Skip to content

Commit

Permalink
Merge pull request #100 from Arquisoft/lucia
Browse files Browse the repository at this point in the history
Añado modificaciones respecto a los tests de gateway-service y la mejora en el covered.
  • Loading branch information
uo282189 authored Mar 13, 2024
2 parents 95ac9c9 + 4bb41dd commit 17173a4
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 13 deletions.
7 changes: 5 additions & 2 deletions gatewayservice/gateway-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ app.get('/getQuestion', async (req, res) => {

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

Expand All @@ -59,7 +60,9 @@ 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 });
//Modifico el error
res.status(500).json({ error: 'Error al realizar la solicitud al servicio de generacion de preguntas' });

}
});

Expand Down
106 changes: 95 additions & 11 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 generacion 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);
});



});

0 comments on commit 17173a4

Please sign in to comment.