From 82e11e60345abfbd0cdad15683f52d94f1a40271 Mon Sep 17 00:00:00 2001 From: uo289324 Date: Wed, 10 Apr 2024 23:33:01 +0200 Subject: [PATCH 1/6] =?UTF-8?q?test=20de=20devolver=20documentaci=C3=B3n?= =?UTF-8?q?=20y=20devolver=20datos=20de=20usuario?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gatewayservice/gateway-service.test.js | 57 ++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/gatewayservice/gateway-service.test.js b/gatewayservice/gateway-service.test.js index 9044899..044c047 100644 --- a/gatewayservice/gateway-service.test.js +++ b/gatewayservice/gateway-service.test.js @@ -82,4 +82,61 @@ describe('Gateway Service', () => { expect(response.status).toBe(200); expect(response.body).toEqual(mockData); }); + + // Prueba para la devolución de documentación + it('debería devolver la documentación de Swagger correctamente', async () => { + const response = await request(app) + .get('/api-doc') + .redirects(1); // Sigue un máximo de 1 redirección + + // Verificar que la respuesta tenga un código de estado 200 y contenga contenido HTML de la documentación de Swagger + expect(response.statusCode).toBe(200); + expect(response.text).toContain('Swagger UI'); + }); + + it('debería redirigir correctamente a la documentación de Swagger', async () => { + const response = await request(app) + .get('/api-doc'); + + // Verificar que la respuesta tenga un código de estado 301 y que la cabecera "Location" indique la ubicación de la redirección + expect(response.statusCode).toBe(301); + expect(response.headers['location']).toBe('/api-doc/'); + }); + + it('debería devolver los datos del usuario correctamente', async () => { + // Datos de prueba para simular una solicitud GET a /getUserData + const userData = { + username: 'testuser', + // Otros datos del usuario que esperas recibir + }; + + // Mock de axios para simular una respuesta exitosa del servicio de usuario + axios.get.mockResolvedValueOnce({ data: userData }); + + // Realizar la solicitud GET a /getUserData con el nombre de usuario + const response = await request(app) + .get('/getUserData') + .query({ username: 'testuser' }); + + // Verificar que la respuesta sea exitosa (código de estado 200) y contenga los datos del usuario + expect(response.status).toBe(200); + expect(response.body).toEqual(userData); + }); + + it('debería manejar correctamente los errores del servicio de usuario', async () => { + // Simular un error del servicio de usuario + const errorMessage = 'Error al obtener datos del usuario'; + axios.get.mockRejectedValueOnce({ response: { status: 500, data: { error: errorMessage } } }); + + // Realizar la solicitud GET a /getUserData con un nombre de usuario + const response = await request(app) + .get('/getUserData') + .query({ username: 'testuser' }); + + // Verificar que la respuesta tenga el código de estado esperado (500) y contenga el mensaje de error adecuado + expect(response.status).toBe(500); + expect(response.body).toEqual({ error: errorMessage }); + }); + + }); \ No newline at end of file From 5cfaa75b975db0ab95d8c621f2fb38c2e7e3fb77 Mon Sep 17 00:00:00 2001 From: uo289324 Date: Wed, 10 Apr 2024 23:45:24 +0200 Subject: [PATCH 2/6] tests actualizar estadisticas --- gatewayservice/gateway-service.test.js | 53 ++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/gatewayservice/gateway-service.test.js b/gatewayservice/gateway-service.test.js index 044c047..0f38241 100644 --- a/gatewayservice/gateway-service.test.js +++ b/gatewayservice/gateway-service.test.js @@ -138,5 +138,58 @@ describe('Gateway Service', () => { expect(response.body).toEqual({ error: errorMessage }); }); + it('debería actualizar las estadísticas del usuario correctamente', async () => { + // Datos de prueba para simular una solicitud GET a /updateStats + const username = 'testuser'; + const numRespuestasCorrectas = 5; + const numRespuestasIncorrectas = 2; + const updateStatsData = { message: 'Estadísticas actualizadas correctamente' }; + + // Mock de axios para simular una respuesta exitosa del servicio de usuario + axios.get.mockResolvedValueOnce({ data: updateStatsData }); + + // Realizar la solicitud GET a /updateStats con los parámetros de las estadísticas + const response = await request(app) + .get('/updateStats') + .query({ + username: username, + numRespuestasCorrectas: numRespuestasCorrectas, + numRespuestasIncorrectas: numRespuestasIncorrectas + }); + + // Verificar que la respuesta sea exitosa (código de estado 200) y contenga el mensaje de éxito + expect(response.status).toBe(200); + expect(response.body).toEqual(updateStatsData); + }); + + it('debería manejar correctamente los errores del servicio de usuario', async () => { + // Simular un error del servicio de usuario + const errorMessage = 'Error al actualizar las estadísticas del usuario'; + axios.get.mockRejectedValueOnce({ response: { status: 500, data: { error: errorMessage } } }); + + // Realizar la solicitud GET a /updateStats con los parámetros de las estadísticas + const response = await request(app) + .get('/updateStats') + .query({ + username: 'testuser', + numRespuestasCorrectas: 5, + numRespuestasIncorrectas: 2 + }); + + // Verificar que la respuesta tenga el código de estado esperado (500) y contenga el mensaje de error adecuado + expect(response.status).toBe(500); + expect(response.body).toEqual({ error: errorMessage }); + }); + + it('debería devolver un error si los valores de numRespuestasCorrectas o numRespuestasIncorrectas son inválidos', async () => { + const response = await request(app) + .get('/updateStats') + .query({ + username: 'testuser', + numRespuestasCorrectas: -1, // Valor negativo, que no debería ser válido + numRespuestasIncorrectas: 5, + }); + expect(response.status).toBe(400); // Esperamos un error de solicitud incorrecta + }); }); \ No newline at end of file From a30a41368f2dae1cc1cbba61f3bdc7a2fedd5654 Mon Sep 17 00:00:00 2001 From: uo289324 Date: Wed, 10 Apr 2024 23:47:03 +0200 Subject: [PATCH 3/6] comprobar error de datos incorrectos a actualizar --- gatewayservice/gateway-service.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index a04c6f1..0bbd9e7 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -78,6 +78,12 @@ app.get('/pregunta', async (req, res) => { app.get('/updateStats', async (req, res) => { const { username, numRespuestasCorrectas, numRespuestasIncorrectas} = req.query; + + if (parseInt(numRespuestasCorrectas) > 10 || parseInt(numRespuestasCorrectas) < 0 || + parseInt(numRespuestasIncorrectas) > 10 || parseInt(numRespuestasIncorrectas) < 0) { + return res.status(400).json({ error: 'El número de respuestas incorrectas o correctas es erróneo' }); + } + try{ const updateStatsResponse = await axios.get(userServiceUrl+ `/updateStats?username=${username}&numRespuestasCorrectas=${numRespuestasCorrectas}&numRespuestasIncorrectas=${numRespuestasIncorrectas}`) res.json(updateStatsResponse.data); From d7abd40507837133c050e2a91547957a0663985d Mon Sep 17 00:00:00 2001 From: uo289324 Date: Wed, 10 Apr 2024 23:50:30 +0200 Subject: [PATCH 4/6] comprobacion de que recibe todos los datos para actualizar --- gatewayservice/gateway-service.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 0bbd9e7..31757b4 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -79,6 +79,10 @@ app.get('/pregunta', async (req, res) => { app.get('/updateStats', async (req, res) => { const { username, numRespuestasCorrectas, numRespuestasIncorrectas} = req.query; + if (!username || !numRespuestasCorrectas || !numRespuestasIncorrectas) { + return res.status(401).json({ error: 'Faltan parámetros en la solicitud' }); + } + if (parseInt(numRespuestasCorrectas) > 10 || parseInt(numRespuestasCorrectas) < 0 || parseInt(numRespuestasIncorrectas) > 10 || parseInt(numRespuestasIncorrectas) < 0) { return res.status(400).json({ error: 'El número de respuestas incorrectas o correctas es erróneo' }); From 8beae183e23fc80bf0c2e5ec82a663a7b7e0e9e8 Mon Sep 17 00:00:00 2001 From: uo289324 Date: Wed, 10 Apr 2024 23:50:44 +0200 Subject: [PATCH 5/6] test de update --- gatewayservice/gateway-service.test.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gatewayservice/gateway-service.test.js b/gatewayservice/gateway-service.test.js index 0f38241..6311710 100644 --- a/gatewayservice/gateway-service.test.js +++ b/gatewayservice/gateway-service.test.js @@ -192,4 +192,15 @@ describe('Gateway Service', () => { expect(response.status).toBe(400); // Esperamos un error de solicitud incorrecta }); + + it('debería devolver un error si falta algún parámetro en la solicitud de updateStats', async () => { + const response = await request(app) + .get('/updateStats') + .query({ + username: 'testuser', + // numRespuestasCorrectas o numRespuestasIncorrectas están faltando + }); + + expect(response.status).toBe(401); // Esperamos un error de solicitud incorrecta + }); }); \ No newline at end of file From 12123dcc61a957cd9ae828eee3635b493f315a82 Mon Sep 17 00:00:00 2001 From: uo289324 Date: Thu, 11 Apr 2024 00:01:20 +0200 Subject: [PATCH 6/6] nuevos test gateway --- gatewayservice/gateway-service.test.js | 41 ++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/gatewayservice/gateway-service.test.js b/gatewayservice/gateway-service.test.js index 6311710..72feb34 100644 --- a/gatewayservice/gateway-service.test.js +++ b/gatewayservice/gateway-service.test.js @@ -49,6 +49,21 @@ describe('Gateway Service', () => { expect(response.statusCode).toBe(401); }); + it('debería manejar correctamente los errores del servicio de autenticación en /login', async () => { + // Simular un error del servicio de autenticación + const errorMessage = 'Error al autenticar usuario'; + axios.post.mockRejectedValueOnce({ response: { status: 500, data: { error: errorMessage } } }); + + // Realizar la solicitud POST a /login con datos de usuario válidos + const response = await request(app) + .post('/login') + .send({ username: 'testuser', password: 'testpassword' }); + + // Verificar que la respuesta tenga el código de estado esperado (500) y contenga el mensaje de error adecuado + expect(response.status).toBe(500); + expect(response.body).toEqual({ error: errorMessage }); + }); + // Test /adduser endpoint it('deberia añadir usuario correctamente', async () => { const response = await request(app) @@ -203,4 +218,30 @@ describe('Gateway Service', () => { expect(response.status).toBe(401); // Esperamos un error de solicitud incorrecta }); + + /* + it('debería manejar correctamente la carga excesiva', async () => { + // Realizar múltiples solicitudes simultáneas a endpoints diferentes + const promises = []; + for (let i = 0; i < 100; i++) { + promises.push(request(app).post('/login').send({ username: `user${i}`, password: 'password' })); + } + + // Esperar a que se completen todas las solicitudes + const responses = await Promise.all(promises); + + // Verificar que todas las respuestas tengan el código de estado esperado (200) + responses.forEach(response => { + expect(response.status).toBe(200); + }); + }); + */ + + it('debería devolver un estado de salud "OK"', async () => { + const response = await request(app).get('/health'); + + // Verificar que la respuesta tenga el código de estado esperado (200) y contenga un mensaje de estado "OK" + expect(response.status).toBe(200); + expect(response.body).toEqual({ status: 'OK' }); + }); }); \ No newline at end of file