- Partidas jugadas
+ {t('pages.stats.gamesPlayed')}
|
{stats.nGamesPlayed} |
- Puntos por partida
+ {t('pages.stats.pointsPerGame')}
|
{stats.avgPoints.toFixed(2)} |
- Puntos totales
+ {t('pages.stats.totalpoints')}
|
{stats.totalPoints} |
@@ -179,19 +181,19 @@ const Stats = () => {
<>
- Preguntas correctas totales
+ {t('pages.stats.totalCorrect')}
|
{stats.totalCorrectQuestions} |
- Preguntas incorrectas totales
+ {t('pages.stats.totalIncorrect')}
|
{stats.totalIncorrectQuestions} |
- Porcentaje de aciertos
+ {t('pages.stats.correctRatio')}
|
{stats.ratioCorrect.toFixed(2)}% |
@@ -199,7 +201,7 @@ const Stats = () => {
)}
- Tiempo por pregunta (s):
+ {t('pages.stats.avgTime')}
|
{stats.avgTime.toFixed(2)} |
diff --git a/webapp/src/pages/Stats/Stats.test.js b/webapp/src/pages/Stats/Stats.test.js
index e3fcfb5b..4dccaa1c 100644
--- a/webapp/src/pages/Stats/Stats.test.js
+++ b/webapp/src/pages/Stats/Stats.test.js
@@ -1,68 +1,80 @@
-import React from 'react';
-import { render, screen, waitFor } from '@testing-library/react';
-import Stats from './Stats';
-import { BrowserRouter as Router } from 'react-router-dom';
-import userEvent from '@testing-library/user-event';
+import React from "react";
+import { render, screen, waitFor } from "@testing-library/react";
+import Stats from "./Stats";
+import { BrowserRouter as Router } from "react-router-dom";
+import userEvent from "@testing-library/user-event";
+import { I18nextProvider } from "react-i18next";
+import i18n from "../../i18n.js";
const userData = {
- username: 'testUser',
+ username: "testUser",
nGamesPlayed: 10,
- avgPoints: 7.00,
+ avgPoints: 7.0,
totalPoints: 70,
totalCorrectQuestions: 20,
totalIncorrectQuestions: 5,
- ratioCorrect: 80.00,
- avgTime: 15.00
+ ratioCorrect: 80.0,
+ avgTime: 15.0,
};
const renderComponentWithRouter = () => {
render(
-
-
-
+
+
+
+
+
);
};
-describe('Stats component', () => {
+describe("Stats component", () => {
beforeEach(() => {
localStorage.clear();
});
- test('renders user statistics', async () => {
+ test("renders user statistics", async () => {
renderComponentWithRouter();
await waitFor(() => {
- expect(screen.queryByText('Cargando ...')).not.toBeInTheDocument();
+ expect(screen.queryByText("Cargando ...")).not.toBeInTheDocument();
});
const statisticWordArray = screen.getAllByText(/Estadísticas/i);
- statisticWordArray.forEach(statisticWord => {
+ statisticWordArray.forEach((statisticWord) => {
expect(statisticWord).toBeInTheDocument();
});
});
- test('fetches user statistics and displays them', async () => {
- localStorage.setItem('username', 'testUser');
-
+ test("fetches user statistics and displays them", async () => {
+ localStorage.setItem("username", "testUser");
+
global.fetch = jest.fn().mockResolvedValue({
- json: jest.fn().mockResolvedValue(userData)
+ json: jest.fn().mockResolvedValue(userData),
});
-
+
renderComponentWithRouter();
-
- const table = await screen.findByRole('table');
+
+ const table = await screen.findByRole("table");
expect(table).toBeInTheDocument();
-
- const columnHeaders = ['Partidas jugadas', 'Puntos por partida', 'Puntos totales', 'Preguntas correctas totales', 'Preguntas incorrectas totales', 'Porcentaje de aciertos', 'Tiempo por pregunta (s):'];
- columnHeaders.forEach(headerText => {
+
+ const columnHeaders = [
+ "Partidas jugadas",
+ "Puntos por partida",
+ "Puntos totales",
+ "Preguntas correctas totales",
+ "Preguntas incorrectas totales",
+ "Porcentaje de aciertos",
+ "Tiempo por pregunta (s)",
+ ];
+ columnHeaders.forEach((headerText) => {
const headerElement = screen.getByText(headerText);
expect(headerElement).toBeInTheDocument();
});
Object.entries(userData).forEach(([key, value]) => {
- if (key !== 'username') {
- if (key === 'avgPoints' || key === 'avgTime') {
+ if (key !== "username") {
+ if (key === "avgPoints" || key === "avgTime") {
expect(screen.getByText(value.toFixed(2))).toBeInTheDocument();
- } else if(key==='ratioCorrect'){
+ } else if (key === "ratioCorrect") {
expect(screen.getByText(value.toFixed(2) + "%")).toBeInTheDocument();
} else {
expect(screen.getByText(value.toString())).toBeInTheDocument();
@@ -70,34 +82,33 @@ describe('Stats component', () => {
}
});
});
-
- test('displays an error message when fetching statistics fails', async () => {
- const userId = 'testUser';
- localStorage.setItem('username', userId);
+ test("displays an error message when fetching statistics fails", async () => {
+ const userId = "testUser";
+ localStorage.setItem("username", userId);
- global.fetch = jest.fn().mockRejectedValue(new Error('Failed to fetch'));
+ global.fetch = jest.fn().mockRejectedValue(new Error("Failed to fetch"));
renderComponentWithRouter();
await screen.findByText("Error: Failed to fetch");
});
- test('updates user statistics when username changes', async () => {
- localStorage.setItem('username', 'testUser');
+ test("updates user statistics when username changes", async () => {
+ localStorage.setItem("username", "testUser");
global.fetch = jest.fn().mockResolvedValue({
- json: jest.fn().mockResolvedValue(userData)
+ json: jest.fn().mockResolvedValue(userData),
});
renderComponentWithRouter();
- await screen.findByRole('table');
+ await screen.findByRole("table");
- const newUsername = 'newUser';
- localStorage.setItem('username', newUsername);
+ const newUsername = "newUser";
+ localStorage.setItem("username", newUsername);
- const searchButton = await screen.findByText('Buscar');
+ const searchButton = await screen.findByText("Buscar");
userEvent.click(searchButton);
renderComponentWithRouter();
@@ -105,23 +116,25 @@ describe('Stats component', () => {
expect(fetch).toHaveBeenCalledWith(expect.stringContaining(newUsername));
});
- test('updates user statistics when game mode changes', async () => {
- localStorage.setItem('username', 'testUser');
+ test("updates user statistics when game mode changes", async () => {
+ localStorage.setItem("username", "testUser");
global.fetch = jest.fn().mockResolvedValue({
- json: jest.fn().mockResolvedValue(userData)
+ json: jest.fn().mockResolvedValue(userData),
});
renderComponentWithRouter();
- await screen.findByRole('table');
+ await screen.findByRole("table");
- const modeButton = screen.getByRole('button', { name: /Batería de sabios/i });
+ const modeButton = screen.getByRole("button", {
+ name: /Batería de sabios/i,
+ });
userEvent.click(modeButton);
- renderComponentWithRouter();
-
await waitFor(() => {
- expect(screen.queryByText('Estadísticas de testUser - modo Batería de sabios')).toBeInTheDocument();
+ expect(
+ screen.queryByText("WIQ")
+ ).toBeInTheDocument();
});
});
diff --git a/webapp/src/pages/WrongRoute/WrongRoute.js b/webapp/src/pages/WrongRoute/WrongRoute.js
index b6db262d..ecd71dbf 100644
--- a/webapp/src/pages/WrongRoute/WrongRoute.js
+++ b/webapp/src/pages/WrongRoute/WrongRoute.js
@@ -1,7 +1,11 @@
import React from "react";
import { Link } from 'react-router-dom';
+import { useTranslation } from "react-i18next";
const WrongRoute = () => {
+
+ const { t } = useTranslation();
+
return (
@@ -14,11 +18,11 @@ const WrongRoute = () => {
404
-
Página no encontrada
+
{t('pages.wrongroute.title')}
- La página que estabas buscando no está disponible
+ {t('pages.wrongroute.message')}
-
Página principal
+
{t('pages.wrongroute.home')}
);
diff --git a/webapp/src/pages/WrongRoute/WrongRoute.test.js b/webapp/src/pages/WrongRoute/WrongRoute.test.js
index 9a89973f..26a83963 100644
--- a/webapp/src/pages/WrongRoute/WrongRoute.test.js
+++ b/webapp/src/pages/WrongRoute/WrongRoute.test.js
@@ -1,38 +1,48 @@
-import React from 'react';
-import { render, screen } from '@testing-library/react';
-import WrongRoute from './WrongRoute';
-import { BrowserRouter as Router } from 'react-router-dom';
+import React from "react";
+import { render, screen } from "@testing-library/react";
+import WrongRoute from "./WrongRoute";
+import { BrowserRouter as Router } from "react-router-dom";
+import { I18nextProvider } from "react-i18next";
+import i18n from "../../i18n.js";
-test('renders 404 message', () => {
- const { getByText, getByRole } =render(
-
-
-
+test("renders 404 message", () => {
+ const { getByText, getByRole } = render(
+
+
+
+
+
);
const errorMessage = screen.getByText(/404/i);
- expect(getByText('404')).toBeInTheDocument();
- expect(getByText('Página no encontrada')).toBeInTheDocument();
- expect(getByText('La página que estabas buscando no está disponible')).toBeInTheDocument();
+ expect(getByText("404")).toBeInTheDocument();
+ expect(getByText("Página no encontrada")).toBeInTheDocument();
+ expect(
+ getByText("La página que estabas buscando no está disponible")
+ ).toBeInTheDocument();
- expect(getByRole('link')).toBeInTheDocument();
+ expect(getByRole("link")).toBeInTheDocument();
});
test('renders "Página no encontrada" message', () => {
render(
-
-
-
+
+
+
+
+
);
const notFoundMessage = screen.getByText(/Página no encontrada/i);
expect(notFoundMessage).toBeInTheDocument();
});
-test('renders link to home page', () => {
+test("renders link to home page", () => {
render(
-
-
-
+
+
+
+
+
);
- const homeLink = screen.getByRole('link', { name: /Página principal/i });
- expect(homeLink).toHaveAttribute('href', '/home');
-});
\ No newline at end of file
+ const homeLink = screen.getByRole("link", { name: /Volver al inicio/i });
+ expect(homeLink).toHaveAttribute("href", "/home");
+});