Skip to content

Commit

Permalink
Merge pull request #92 from Arquisoft/LaraFMz
Browse files Browse the repository at this point in the history
Lara f mz
  • Loading branch information
UO277938 authored Apr 9, 2024
2 parents 9f39339 + 714eefa commit cc985c5
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 127 deletions.
35 changes: 8 additions & 27 deletions gatewayservice/gateway-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,39 +76,20 @@ app.get('/pregunta', async (req, res) => {
}
});

app.get('/updateCorrectAnswers', async (req, res) => {
console.log(req.query)
const params = {username: req.query.username, numAnswers: req.query.numAnswers};
try{
const updateStatsResponse = await axios.get(userServiceUrl+ `/updateCorrectAnswers?params=${params}`)
res.json(updateStatsResponse.data);
}catch(error){
res.status(error.response.status).json({error: error.response.data.error});
}
});

app.get('/updateIncorrectAnswers', async (req, res) => {
const params = {username: req.query.username, numAnswers: req.query.numAnswers};
try{
const updateStatsResponse = await axios.get(userServiceUrl+ `/updateIncorrectAnswers?params=${params}`)
app.get('/updateStats', async (req, res) => {
//const params = {username: req.query.username, numAnswers: req.query.numAnswers};
const { username, numRespuestasCorrectas, numRespuestasIncorrectas} = req.query;
console.log("username: "+username);
console.log("correctas: "+numRespuestasCorrectas);
console.log("incorrectas: "+numRespuestasIncorrectas);
try{
const updateStatsResponse = await axios.get(userServiceUrl+ `/updateStats?username=${username}&numRespuestasCorrectas=${numRespuestasCorrectas}&numRespuestasIncorrectas=${numRespuestasIncorrectas}`)
res.json(updateStatsResponse.data);
}catch(error){
res.status(error.response.status).json({error: error.response.data.error});
}
});

app.get('/updateCompletedGames', async (req, res) => {
const { username } = req.query;
try{
const updateStatsResponse = await axios.get(userServiceUrl+ `/updateCompletedGames?username=${username}`)
res.json(updateStatsResponse.data);
}catch(error){
res.status(error.response.status).json({error: error.response.data.error});
}
});



app.get('/getUserData', async (req, res) => {
console.log(req.query)
const { username } = req.query;
Expand Down
70 changes: 16 additions & 54 deletions userservice/userservice/user-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,43 +45,24 @@ app.post('/adduser', async (req, res) => {
res.status(400).json({ error: error.message });
}});

app.get('/updateCorrectAnswers', async (req,res) => {
console.log(req.query)
//const { username } = req.query;
const { username } = req.query.username;
const { numAnswers } = req.query.numAnswers;
app.get('/updateStats', async (req,res) => {
const { username, numRespuestasCorrectas, numRespuestasIncorrectas} = req.query;
console.log("username1: "+username);
console.log("correctas1: "+numRespuestasCorrectas);
console.log("incorrectas1: "+numRespuestasIncorrectas);
try {
const user = await User.findOne({ username });
if (!user) {
return res.status(404).json({ success: false, message: 'Usuario no encontrado' });
}
// Incrementa las respuestas correctas del usuario
user.correctAnswers = numAnswers;
await user.save();
return res.status(200).json({ success: true, message: 'Respuestas correctas actualizada con éxito' });
} catch (error) {
console.error('Error al actualizar las respuestas correctas:', error);
return res.status(500).json({ success: false, message: 'Error al actualizar las respuestas correctas' });
}
})

app.get('/updateIncorrectAnswers', async (req,res) => {
console.log(req.query)
//const { username } = req.query;
const { username } = req.query.username;
const { numAnswers } = req.query.numAnswers;
try {
const user = await User.findOne({ username });
if (!user) {
return res.status(404).json({ success: false, message: 'Usuario no encontrado' });
}
// Incrementa las respuestas incorrectas del usuario
user.incorrectAnswers = numAnswers;
await user.save();
return res.status(200).json({ success: true, message: 'Respuestas incorrectas actualizada con éxito' });
const user = await User.findOne({ username });
if (!user) {
return res.status(404).json({ success: false, message: 'Usuario no encontrado' });
}
// Cambia las estadisticas del usuario
user.correctAnswers += numRespuestasCorrectas;
user.incorrectAnswers += numRespuestasIncorrectas;
user.completedGames++;
await user.save();
return res.status(200).json({ success: true, message: 'Estadísticas actualizadas con éxito' });
} catch (error) {
console.error('Error al actualizar la respuesta correcta:', error);
return res.status(500).json({ success: false, message: 'Error al actualizar las respuestas incorrectas' });
return res.status(500).json({ success: false, message: 'Error al actualizar las Estadísticas' });
}
})

Expand All @@ -99,25 +80,6 @@ app.get('/getUserData', async (req, res) => {
}
});


app.get('/updateCompletedGames', async (req,res) => {
console.log(req.query)
const { username } = req.query;
try {
const user = await User.findOne({ username });
if (!user) {
return res.status(404).json({ success: false, message: 'Usuario no encontrado' });
}
user.completedGames += 1;
await user.save();
return res.status(200).json({ success: true, message: 'Juegos completados actualizado con éxito' });
} catch (error) {
console.error('Error al actualizar Juegos completados:', error);
return res.status(500).json({ success: false, message: 'Error al actualizar Juegos completados' });
}
})


const server = app.listen(port, () => {
console.log(`User Service listening at http://localhost:${port}`);
});
Expand Down
2 changes: 1 addition & 1 deletion webapp/src/components/Pages/Estadisticas.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// src/components/Login.js
import React, { useState, useEffect } from 'react';
import { Container, Typography, TextField, Button, Snackbar } from '@mui/material';
import { Container } from '@mui/material';
import '../Estilos/estadisticas.css';
import axios from 'axios';

Expand Down
58 changes: 13 additions & 45 deletions webapp/src/components/Pages/Juego.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import axios from 'axios';
import '../Estilos/juego.css';
import { Container } from '@mui/material';
import Temporizador from '../Temporizador';
import { jwtDecode } from 'jwt-decode';

const Juego = ({isLogged, username, numPreguntas}) => {
//La pregunta (string)
Expand All @@ -20,13 +19,11 @@ const Juego = ({isLogged, username, numPreguntas}) => {
//Para saber si el temporizador se ha parado al haber respondido una respuesta
const [pausarTemporizador, setPausarTemporizador] = useState(false)
const [restartTemporizador, setRestartTemporizador] = useState(false)

const [firstRender, setFirstRender] = useState(false);
const[ready, setReady] = useState(false)
const [numPreguntaActual, setNumPreguntaActual] = useState(0)
const [arPreg, setArPreg] = useState([])
const [finishGame, setFinishGame] = useState(false)

const [numRespuestasCorrectas, setNumRespuestasCorrectas] = useState(0)
const [numRespuestasIncorrectas, setNumRespuestasIncorrectas] = useState(0)

Expand All @@ -43,39 +40,14 @@ const Juego = ({isLogged, username, numPreguntas}) => {


//Control de las estadísticas
const updateCorrectAnswers = async () => {
try {
//const response = await axios.get(`${apiEndpoint}/updateCorrectAnswers?username=${username}`);
const params = {username: {username}, numAnswers: {numRespuestasCorrectas}};
const response = await axios.get(`${apiEndpoint}/updateCorrectAnswers?params=${params}`);
console.log('Respuestas correctas actualizada con éxito:', response.data);
// Realizar otras acciones según sea necesario
} catch (error) {
console.error('Error al actualizar la respuesta correcta:', error);
// Manejar el error de acuerdo a tus necesidades
}
};

const updateIncorrectAnswers = async () => {
try {
//const response = await axios.get(`${apiEndpoint}/updateIncorrectAnswers?username=${username}`);
const params = {username: {username}, numAnswers: {numRespuestasIncorrectas}};
const response = await axios.get(`${apiEndpoint}/updateIncorrectAnswers?params=${params}`);
console.log('Respuesta incorrecta actualizada con éxito:', response.data);
} catch (error) {
console.error('Error al actualizar la respuesta incorrecta:', error);
}
};

const updateCompletedGames = async () => {
const updateStats = async () => {
try {
const response = await axios.get(`${apiEndpoint}/updateCompletedGames?username=${username}`);
console.log('Juegos completados actualizado con éxito:', response.data);
const response = await axios.get(`${apiEndpoint}/updateStats?username=${username}&numRespuestasCorrectas=${numRespuestasCorrectas}&numRespuestasIncorrectas=${numRespuestasIncorrectas}`);
console.log('Estadisticas actualizadas con éxito:', response.data);
} catch (error) {
console.error('Error al actualizar Juegos completados:', error);
console.error('Error al actualizar las estadisticas:', error);
}
};
////

//Función que genera un numero de preguntas determinado
async function crearPreguntas(numPreguntas){
Expand All @@ -97,7 +69,7 @@ const Juego = ({isLogged, username, numPreguntas}) => {
)
}
catch (error) {
console.error('Error al actualizar la respuesta correcta:', error);
console.error('Error al actualizar las estadisticas:', error);
// Manejar el error de acuerdo a tus necesidades
}
numPreguntas--;
Expand Down Expand Up @@ -129,13 +101,13 @@ const Juego = ({isLogged, username, numPreguntas}) => {
if(respuesta == resCorr){
console.log("entro a respuesta correcta")
//Aumenta en 1 en las estadisticas de juegos ganado
setNumRespuestasCorrectas(numRespuestasCorrectas++);
//updateCorrectAnswers();
setNumRespuestasCorrectas(numRespuestasCorrectas+1);
console.log("Correctas: "+numRespuestasCorrectas)
setVictoria(true)
}
else{
setNumRespuestasIncorrectas(numRespuestasIncorrectas++);
//updateIncorrectAnswers();
setNumRespuestasIncorrectas(numRespuestasIncorrectas + 1);
console.log("Incorrectas: "+numRespuestasIncorrectas)
setVictoria(false)
}
//storeResult(victoria)
Expand Down Expand Up @@ -214,15 +186,15 @@ const Juego = ({isLogged, username, numPreguntas}) => {

//Primer render para un comportamiento diferente
useEffect(() => {
updateCompletedGames()
//updateCompletedGames()
}, [finishGame])

//Funcion que se llama al hacer click en el boton Siguiente
const clickSiguiente = () => {
if(numPreguntaActual==numPreguntas){
setFinishGame(true)
setReady(false)
finishGame()
//finishGame()
return
}
descolorearTodos()
Expand All @@ -236,11 +208,7 @@ const Juego = ({isLogged, username, numPreguntas}) => {

//Funcion que se llama al hacer click en el boton Siguiente
const clickFinalizar = () => {
//updateCompletedGames();
updateCorrectAnswers();
updateIncorrectAnswers();
//almacenar aqui partida jugada a estadisticas
//y lo que se quiera
updateStats();
}

const handleRestart = () => {
Expand All @@ -260,8 +228,8 @@ const Juego = ({isLogged, username, numPreguntas}) => {
<button id="boton2" className="button" onClick={() => botonRespuesta(resFalse[2])}> {resFalse[2]}</button>
<button id="boton3" className="button" onClick={() => botonRespuesta(resFalse[0])}> {resFalse[0]}</button>
<button id="boton4" className="button" onClick={() => botonRespuesta(resFalse[3])}> {resFalse[3]}</button>
<button id="botonSiguiente" className="button" onClick={() =>clickSiguiente()} > SIGUIENTE</button>
</div>
<button id="botonSiguiente" className="button" onClick={() =>clickSiguiente()} > SIGUIENTE</button>
</>
: <h2> CARGANDO... </h2>}
{finishGame ? <>
Expand Down
85 changes: 85 additions & 0 deletions webapp/src/components/Pages/Juego.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import React from 'react';
import { render, fireEvent, waitFor } from '@testing-library/react';
import axios from 'axios';
import Juego from './Juego';

// Mock de axios para simular respuestas de la API
jest.mock('axios');

describe('<Juego />', () => {
beforeEach(() => {
// Limpiar todos los mocks antes de cada prueba
jest.clearAllMocks();
});

it('debería renderizar el componente correctamente', () => {
const { getByText } = render(<Juego />);
expect(getByText('CARGANDO...')).toBeInTheDocument();
});

it('debería mostrar la pregunta y las respuestas después de cargar', async () => {
// Mock de respuesta exitosa de la API
axios.get.mockResolvedValueOnce({
data: {
question: '¿Cuál es la capital de Francia?',
answerGood: 'París',
answers: ['Londres', 'Madrid', 'París', 'Berlín'],
},
});

const { getByText, getByTestId } = render(<Juego />);

// Esperar a que se carguen las preguntas
await waitFor(() => {
expect(getByText('¿Cuál es la capital de Francia?')).toBeInTheDocument();
});

// Verificar que las respuestas se muestran correctamente
expect(getByTestId('boton1')).toHaveTextContent('Londres');
expect(getByTestId('boton2')).toHaveTextContent('Madrid');
expect(getByTestId('boton3')).toHaveTextContent('París');
expect(getByTestId('boton4')).toHaveTextContent('Berlín');
});

it('debería cambiar los colores de los botones al hacer clic en una respuesta', async () => {
axios.get.mockResolvedValueOnce({
data: {
question: '¿Cuál es la capital de Francia?',
answerGood: 'París',
answers: ['Londres', 'Madrid', 'París', 'Berlín'],
},
});

const { getByTestId } = render(<Juego />);
await waitFor(() => {});

fireEvent.click(getByTestId('boton3')); // Seleccionar la respuesta correcta

// Verificar que los colores de los botones se hayan actualizado correctamente
expect(getByTestId('boton1')).toHaveStyle('background-color: #E14E4E');
expect(getByTestId('boton2')).toHaveStyle('background-color: #E14E4E');
expect(getByTestId('boton3')).toHaveStyle('background-color: #05B92B');
expect(getByTestId('boton4')).toHaveStyle('background-color: #E14E4E');
});

it('debería avanzar a la siguiente pregunta al hacer clic en el botón SIGUIENTE', async () => {
axios.get.mockResolvedValue({
data: {
question: '¿Cuál es la capital de Francia?',
answerGood: 'París',
answers: ['Londres', 'Madrid', 'París', 'Berlín'],
},
});

const { getByText, getByTestId } = render(<Juego />);
await waitFor(() => {});

fireEvent.click(getByTestId('boton3')); // Seleccionar la respuesta correcta
fireEvent.click(getByText('SIGUIENTE'));

// Verificar que se cargue la siguiente pregunta
await waitFor(() => {
expect(getByText('¿Cuál es la capital de Francia?')).toBeInTheDocument();
});
});
});

0 comments on commit cc985c5

Please sign in to comment.