Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lara f mz #92

Merged
merged 3 commits into from
Apr 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 8 additions & 27 deletions gatewayservice/gateway-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,39 +56,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();
});
});
});
Loading