From e8cb4085176472c697c3f1e7bbf576034a202a04 Mon Sep 17 00:00:00 2001 From: uo277310 Date: Mon, 29 Apr 2024 19:57:52 +0200 Subject: [PATCH 01/10] Arreglos de seguridad --- gatewayservice/gateway-service.js | 8 ++++++-- questions/generatedquestservice/generatedquest-service.js | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 76f33380..6ebc4ec5 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -112,10 +112,14 @@ app.get('/getAllGeneratedQuestions', async (req, res) => { app.get('/getRecords/:userId', async (req, res) => { try { - const userId = req.params.userId; - const recordsResponse = await axios.get(`${recordServiceUrl}/getRecords/${userId}`); + const recordsUrl = url.format({ + pathname: `${recordServiceUrl}/getRecords/${userId}`, + query: { } + }); + + const recordsResponse = await axios.get(recordsUrl); res.json(recordsResponse.data); } catch (error) { res.status(500).json({ error: 'Error interno del servidor' }); diff --git a/questions/generatedquestservice/generatedquest-service.js b/questions/generatedquestservice/generatedquest-service.js index 56864f47..1d2d8525 100644 --- a/questions/generatedquestservice/generatedquest-service.js +++ b/questions/generatedquestservice/generatedquest-service.js @@ -25,8 +25,9 @@ mongoose.connect(mongoUri); const doesQuestionExist = async (questionBody) => { //devuelve true si la pregunta ya existe try { + const safeQuestionBody = questionBody.toString(); const existingQuestion = await GeneratedQuestion.findOne({ - generatedQuestionBody: { $eq: questionBody } + generatedQuestionBody: safeQuestionBody }); return !!existingQuestion; // Convertir el resultado en un booleano From 79dbcfd1970559778cc1d9dd205b6d4ee8cc7a5d Mon Sep 17 00:00:00 2001 From: uo277310 Date: Mon, 29 Apr 2024 20:10:27 +0200 Subject: [PATCH 02/10] Vuelta atras en gateway --- gatewayservice/gateway-service.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 6ebc4ec5..76f33380 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -112,14 +112,10 @@ app.get('/getAllGeneratedQuestions', async (req, res) => { app.get('/getRecords/:userId', async (req, res) => { try { + const userId = req.params.userId; - const recordsUrl = url.format({ - pathname: `${recordServiceUrl}/getRecords/${userId}`, - query: { } - }); - - const recordsResponse = await axios.get(recordsUrl); + const recordsResponse = await axios.get(`${recordServiceUrl}/getRecords/${userId}`); res.json(recordsResponse.data); } catch (error) { res.status(500).json({ error: 'Error interno del servidor' }); From 1ef1c9d1e84ccaa003704931f35c49393688e166 Mon Sep 17 00:00:00 2001 From: uo277310 Date: Mon, 29 Apr 2024 20:18:50 +0200 Subject: [PATCH 03/10] Nuevo intento de arreglo de seguridad --- gatewayservice/gateway-service.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 76f33380..2e629696 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -112,13 +112,11 @@ app.get('/getAllGeneratedQuestions', async (req, res) => { app.get('/getRecords/:userId', async (req, res) => { try { - - const userId = req.params.userId; - + const userId = encodeURIComponent(req.params.userId); const recordsResponse = await axios.get(`${recordServiceUrl}/getRecords/${userId}`); res.json(recordsResponse.data); } catch (error) { - res.status(500).json({ error: 'Error interno del servidor' }); + res.status(500).json({ error: 'Error interno del servidor' }); } }); From 27336cb9adc422ac381c2793b9004ebeaa23c847 Mon Sep 17 00:00:00 2001 From: uo283055 Date: Tue, 30 Apr 2024 00:30:49 +0200 Subject: [PATCH 04/10] issues sonar --- webapp/src/components/RankingList.test.js | 2 +- webapp/src/components/UsersList.js | 2 -- webapp/src/components/UsersList.test.js | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/webapp/src/components/RankingList.test.js b/webapp/src/components/RankingList.test.js index 0dbbd0c2..aaefb8a2 100644 --- a/webapp/src/components/RankingList.test.js +++ b/webapp/src/components/RankingList.test.js @@ -1,5 +1,5 @@ import React from 'react'; -import { render, screen, waitFor, act } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import RankingList from './RankingList'; import axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; diff --git a/webapp/src/components/UsersList.js b/webapp/src/components/UsersList.js index aa9650af..4794ca1d 100644 --- a/webapp/src/components/UsersList.js +++ b/webapp/src/components/UsersList.js @@ -3,8 +3,6 @@ import React, { useState, useEffect } from 'react'; import axios from 'axios'; import PropTypes from 'prop-types'; -//import { Container, Typography, TextField, Button, Snackbar } from '@mui/material'; - const UsersList = ({ setError }) => { const [listUsers, setListUsers] = useState([]); diff --git a/webapp/src/components/UsersList.test.js b/webapp/src/components/UsersList.test.js index fb6573b6..9b33f230 100644 --- a/webapp/src/components/UsersList.test.js +++ b/webapp/src/components/UsersList.test.js @@ -1,5 +1,5 @@ import React from 'react'; -import { render, waitFor, screen, act } from '@testing-library/react'; +import { render, screen, act } from '@testing-library/react'; import axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; import UsersList from './UsersList'; From 1c33d88cc835dd81480b9406e07eb9650de32697 Mon Sep 17 00:00:00 2001 From: uo283055 Date: Tue, 30 Apr 2024 01:07:32 +0200 Subject: [PATCH 05/10] edit punto 8 + comiendo documentacion tests --- docs/src/08_concepts.adoc | 2 +- docs/src/12_testing.adoc | 23 +++++++++++++++++++ .../{12_glossary.adoc => 13_glossary.adoc} | 0 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 docs/src/12_testing.adoc rename docs/src/{12_glossary.adoc => 13_glossary.adoc} (100%) diff --git a/docs/src/08_concepts.adoc b/docs/src/08_concepts.adoc index 363ceda8..639312aa 100644 --- a/docs/src/08_concepts.adoc +++ b/docs/src/08_concepts.adoc @@ -37,7 +37,7 @@ image::08-DominioV4.png["Dominio"] ==== Desarrollo * *Implementación:* Para la creación de esta aplicación se usará el lenguaje de programación JavaScript, para el front-end se utilizará React, Node.js y la construccion de microservicios para el back-end y MongoDB para la gestion de la base de datos NoSQL. -* *Pruebas:* Se llevarán a cabo pruebas e2e y unitarias, de integración, de aceptación, de capacidad/rendimiento y de regresión, todas ellas siguiendo los principios FIRST(Fast, Independent, Repeatable, Self-Checking y Timely) para garantizar la ejecución correcta de todas las funcionalidades de la aplicación. +* *Pruebas:* Se llevarán a cabo pruebas e2e, de carga y unitarias todas ellas siguiendo los principios FIRST(Fast, Independent, Repeatable, Self-Checking y Timely) para garantizar la ejecución correcta de todas las funcionalidades de la aplicación. ==== Estilo arquitecónico diff --git a/docs/src/12_testing.adoc b/docs/src/12_testing.adoc new file mode 100644 index 00000000..83e29748 --- /dev/null +++ b/docs/src/12_testing.adoc @@ -0,0 +1,23 @@ +ifndef::imagesdir[:imagesdir: ../images] + +[[section-glossary]] +== Testing +Se llevarán a cabo pruebas e2e, unitarias y de carga para garantizar la ejecución correcta de todas las funcionalidades de la aplicación. + +=== Tests Unitarios +En nuestro proyecto estos tests son esenciales para garantizar +la correcta funcionalidad. Por lo que se probará +cada componente de todo el código (funciones, métodos, clases...) +se probarán de manera exhaustiva. + +Para poder lograr esto, cada tests se centra solo en una sola función o método siguiento los +principios FIRST: + *Fast: La ejecución de los tests serán rapidos. + *Independent: Los tests serán independientes unos de otros. + *Repeatable: Tests consistentes de manera que se obtendrá siempre los mismos resultados. + *Self-Checking: Se podrá saber si el resultado de los tests ha pasado o no sin necesidad de intervenir. + *Timely: La ampliación e incremento de los tests se irá haceindo durante el desarrollo del proyecto. + +=== E2E. Tests de integración + +=== Tests de carga \ No newline at end of file diff --git a/docs/src/12_glossary.adoc b/docs/src/13_glossary.adoc similarity index 100% rename from docs/src/12_glossary.adoc rename to docs/src/13_glossary.adoc From b7de4764435b0bab9c7a290de83c0a39a70d6069 Mon Sep 17 00:00:00 2001 From: Laura Menendez <124043624+uo283055@users.noreply.github.com> Date: Tue, 30 Apr 2024 01:11:31 +0200 Subject: [PATCH 06/10] edit doc de testing --- docs/src/12_testing.adoc | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/docs/src/12_testing.adoc b/docs/src/12_testing.adoc index 83e29748..1877c751 100644 --- a/docs/src/12_testing.adoc +++ b/docs/src/12_testing.adoc @@ -5,19 +5,30 @@ ifndef::imagesdir[:imagesdir: ../images] Se llevarán a cabo pruebas e2e, unitarias y de carga para garantizar la ejecución correcta de todas las funcionalidades de la aplicación. === Tests Unitarios -En nuestro proyecto estos tests son esenciales para garantizar -la correcta funcionalidad. Por lo que se probará -cada componente de todo el código (funciones, métodos, clases...) -se probarán de manera exhaustiva. - -Para poder lograr esto, cada tests se centra solo en una sola función o método siguiento los -principios FIRST: - *Fast: La ejecución de los tests serán rapidos. - *Independent: Los tests serán independientes unos de otros. - *Repeatable: Tests consistentes de manera que se obtendrá siempre los mismos resultados. - *Self-Checking: Se podrá saber si el resultado de los tests ha pasado o no sin necesidad de intervenir. - *Timely: La ampliación e incremento de los tests se irá haceindo durante el desarrollo del proyecto. + +En nuestro proyecto, los tests unitarios son fundamentales para garantizar la correcta funcionalidad de cada componente del código. Cada función, método o clase será probado exhaustivamente para asegurar su integridad y rendimiento. + +Para lograr esto, seguimos los principios FIRST: + +|=== +|Principio | Descripción + +|Fast (Rápido) +|Los tests unitarios se ejecutan rápidamente, proporcionando retroalimentación inmediata sobre la integridad del código. + +|Independent (Independiente) +|Cada test es independiente de los demás, evitando dependencias y permitiendo su ejecución en cualquier orden. + +|Repeatable (Repetible) +|Los resultados de los tests son consistentes y predecibles, independientemente de cuántas veces se ejecuten o del entorno de ejecución. + +|Self-Checking (Autoverificable) +|Los tests determinan automáticamente si han pasado o fallado, sin necesidad de intervención humana para su validación. + +|Timely (Oportuno) +|La creación y ampliación de tests se realiza durante todo el desarrollo del proyecto, garantizando una cobertura adecuada en todo momento. +|=== === E2E. Tests de integración -=== Tests de carga \ No newline at end of file +=== Tests de carga From a87deba0d549927ac20056100229588a1a9ae9b7 Mon Sep 17 00:00:00 2001 From: Laura Menendez <124043624+uo283055@users.noreply.github.com> Date: Tue, 30 Apr 2024 01:32:34 +0200 Subject: [PATCH 07/10] actualizacion punto testing --- docs/src/12_testing.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/src/12_testing.adoc b/docs/src/12_testing.adoc index 1877c751..32e858d3 100644 --- a/docs/src/12_testing.adoc +++ b/docs/src/12_testing.adoc @@ -30,5 +30,6 @@ Para lograr esto, seguimos los principios FIRST: |=== === E2E. Tests de integración +uscaremos garantizar que la aplicación sea fácil de usar para proporcionar una experiencia satisfactoria al usuario. Nos centraremos en verificar diversas funcionalidades, desde la jugabilidad hasta acciones como el registro, inicio de sesión y cambios en los ajustes. Simularemos interacciones que haría un usuario real para asegurar que la aplicación sea intuitiva y funcione correctamente. === Tests de carga From 8506c2847448405a05504d670a08322cd44b4046 Mon Sep 17 00:00:00 2001 From: Laura Menendez <124043624+uo283055@users.noreply.github.com> Date: Tue, 30 Apr 2024 01:33:13 +0200 Subject: [PATCH 08/10] Update punto 13 --- docs/src/12_testing.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/12_testing.adoc b/docs/src/12_testing.adoc index 32e858d3..10c1bea6 100644 --- a/docs/src/12_testing.adoc +++ b/docs/src/12_testing.adoc @@ -2,7 +2,7 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-glossary]] == Testing -Se llevarán a cabo pruebas e2e, unitarias y de carga para garantizar la ejecución correcta de todas las funcionalidades de la aplicación. +Se llevarán a cabo pruebas unitarias, E2E y de carga para garantizar la ejecución correcta de todas las funcionalidades de la aplicación. === Tests Unitarios From dc2305add9d95b41933867e8a5e4fca8a2f38fa6 Mon Sep 17 00:00:00 2001 From: uo283055 Date: Tue, 30 Apr 2024 01:40:27 +0200 Subject: [PATCH 09/10] edit --- webapp/src/components/RankingList.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/src/components/RankingList.test.js b/webapp/src/components/RankingList.test.js index aaefb8a2..76d3405c 100644 --- a/webapp/src/components/RankingList.test.js +++ b/webapp/src/components/RankingList.test.js @@ -1,5 +1,5 @@ import React from 'react'; -import { render, screen } from '@testing-library/react'; +import { render, screen, act } from '@testing-library/react'; import RankingList from './RankingList'; import axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; From 8f41293e5c14385184683972b8e30673b96b9488 Mon Sep 17 00:00:00 2001 From: uo285427 Date: Tue, 30 Apr 2024 02:20:52 +0200 Subject: [PATCH 10/10] borro constantes que no se usaban --- webapp/src/components/Game.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/src/components/Game.js b/webapp/src/components/Game.js index 29865bbd..d613a07e 100644 --- a/webapp/src/components/Game.js +++ b/webapp/src/components/Game.js @@ -9,10 +9,10 @@ const Game = ({ username, totalQuestions, timeLimit, themes }) => { const [error, setError] = useState(''); const [correctQuestions, setCorrectQuestions] = useState(0); const [timer, setTimer] = useState(0); - const [themesSelected, setThemesSelected] = useState(themes); + const [themesSelected] = useState(themes); const [numberClics, setNumberClics] = useState(0); const [finished, setFinished] = useState(false); - const [selectedAnswer, setSelectedAnswer] = useState(''); + const [setSelectedAnswer] = useState(''); const [selectedOption, setSelectedOption] = useState(null); // Opción seleccionada actualmente const [almacenado, setAlmacenado] = useState(false); const pricePerQuestion = 25;