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..10c1bea6 --- /dev/null +++ b/docs/src/12_testing.adoc @@ -0,0 +1,35 @@ +ifndef::imagesdir[:imagesdir: ../images] + +[[section-glossary]] +== Testing +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 + +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 +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 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 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' }); } }); 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 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; diff --git a/webapp/src/components/RankingList.test.js b/webapp/src/components/RankingList.test.js index 0dbbd0c2..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, waitFor, act } 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'; diff --git a/webapp/src/components/UsersList.js b/webapp/src/components/UsersList.js index 0e16de01..11087dd6 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';