Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Añado modificaciones en los test de Gateway-service para mejorar el covered de SonarCloud #97

Closed
wants to merge 6 commits into from
Closed
13 changes: 11 additions & 2 deletions gatewayservice/gateway-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,12 @@ app.get('/getQuestion', async (req, res) => {

res.json(questionResponse.data);
} catch (error) {
res.status(error.response.status).json({ error: error.response.data.error });
/* if (error.response) {
const errorMessage= error.response.data.error || error.response.data;
res.status(error.response.status).json({ error: errorMessage });
} else { */
res.status(500).json({ error: 'Error al realizar la solicitud al servicio de preguntas' });
//}
}
});

Expand All @@ -59,7 +64,11 @@ app.get('/generateQuestions', async (req, res) => {
await axios.get(questionServiceUrl+'/generateQuestions', req.body);

} catch (error) {
res.status(error.response.status).json({ error: error.response.data.error });
if (error.response) {
res.status(error.response.status).json({ error: error.response.data.error });
} else {
res.status(500).json({ error: 'Error al realizar la solicitud al servicio de preguntas' });
}
}
});

Expand Down
104 changes: 94 additions & 10 deletions gatewayservice/gateway-service.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,18 @@ it('should perform the health request', async () => {
expect(response.statusCode).toBe(200);
});

it('should perform the getQuestion request', async () => {
const response = await request(app).get('/getQuestion').send();

expect(response.statusCode).toBe(200);
const data = {
pregunta: '¿Cuál es la capital de Francia?',
respuestas: ['Berlin', 'Paris', 'Londres', 'Madrid'],
correcta: 'Helsinki',
};
axios.get.mockImplementationOnce(() => Promise.resolve({ data }));
});

// Test /login endpoint
it('should forward login request to auth service', async () => {
const response = await request(app)
Expand Down Expand Up @@ -85,13 +97,23 @@ it('should perform the health request', async () => {

it('should forward get question request to question service', async () => {
const questionServiceUrl = 'http://localhost:8003';
const data = {
pregunta: '¿Cuál es la capital de Francia?',
respuestas: ['Berlin', 'Paris', 'Londres', 'Madrid'],
correcta: 'Helsinki',
};
const expectedQuestion = '¿Cuál es la capital de Francia?';
const expectedOptions = ['Berlin', 'Paris', 'Londres', 'Madrid'];
const expectedCorrectAnswer = 'Helsinki';

// Simula una llamada exitosa al servicio de preguntas
axios.get.mockImplementationOnce(() => Promise.resolve({ data }));
// Agrega tus expectativas aquí

// Realiza la solicitud al endpoint
const response = await request(app).get('/getQuestion').send();

// Verifica que la respuesta tenga un código de estado 200
expect(response.statusCode).toBe(200);

// Verifica que la pregunta y las opciones sean correctas
expect(response.body.pregunta).toBe(expectedQuestion);
expect(response.body.respuestas).toEqual(expect.arrayContaining(expectedOptions));
expect(response.body.correcta).toBe(expectedCorrectAnswer);
});

it('should forward get question request to question generate service', async () => {
Expand All @@ -102,7 +124,7 @@ it('should perform the health request', async () => {
correcta: 'Helsinki',
};
axios.get.mockImplementationOnce(() => Promise.resolve({ data }));
// Agrega tus expectativas aquí

});

//Verifica si el manejo de errores funciona correctamente cuando la llamada al servicio de preguntas falla.
Expand All @@ -113,7 +135,69 @@ it('should perform the health request', async () => {
});





it('should handle authentication error', async () => {
const authError = new Error('Authentication failed');
authError.response = {
status: 401,
data: { error: 'Invalid credentials' },
};

// Simula un error en la llamada al servicio de autenticación
axios.post.mockImplementationOnce(() => Promise.reject(authError));

// Realiza la solicitud al endpoint
const response = await request(app).post('/login').send({ /* datos de autenticación */ });

// Verifica que la respuesta tenga un código de estado 401
expect(response.statusCode).toBe(401);
expect(response.body.error).toBe('Invalid credentials');
});


it('should handle authentication error', async () => {
const authError = new Error('Authentication failed');
authError.response = {
status: 401,
data: { error: 'Invalid credentials' },
};

// Simula un error en la llamada al servicio de autenticación
axios.post.mockImplementationOnce(() => Promise.reject(authError));

// Realiza la solicitud al endpoint
const response = await request(app).post('/adduser').send({ /* datos de autenticación */ });

// Verifica que la respuesta tenga un código de estado 401
expect(response.statusCode).toBe(401);
expect(response.body.error).toBe('Invalid credentials');
});

it('should return an error when the question service request fails', async () => {
// Mock the axios.get method to reject the promise
axios.get.mockImplementationOnce(() =>
Promise.reject(new Error('Error al realizar la solicitud al servicio de preguntas'))
);

const response = await request(app)
.get('/getQuestion')
.send({ id: 'mockedQuestionId' });

expect(response.statusCode).toBe(500);
expect(response.body.error).toBeDefined();
expect(response.body.error).toEqual('Error al realizar la solicitud al servicio de preguntas');
});

it('should return an error when generating questions fails', async () => {
const errorMessage = 'Error al realizar la solicitud al servicio de preguntas';
axios.get.mockRejectedValue(new Error(errorMessage));

const response = await request(app).get('/generateQuestions');

expect(response.statusCode).toBe(500);
expect(response.body.error).toBeDefined();
expect(response.body.error).toEqual(errorMessage);
});



});