diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 4770d5e7..f2b27154 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -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' }); } }); @@ -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' }); + } }); diff --git a/gatewayservice/gateway-service.test.js b/gatewayservice/gateway-service.test.js index 787c6c66..df7e261e 100644 --- a/gatewayservice/gateway-service.test.js +++ b/gatewayservice/gateway-service.test.js @@ -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) @@ -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 () => { @@ -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. @@ -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); + }); + + + +}); \ No newline at end of file