Skip to content

Commit

Permalink
Merge pull request #158 from Arquisoft/86-añadir-sistema-de-ayuda
Browse files Browse the repository at this point in the history
Añadido sistema de ayuda
  • Loading branch information
iyanfdezz authored Apr 27, 2024
2 parents 0e88912 + 7e8e4e9 commit ca9a1d2
Show file tree
Hide file tree
Showing 14 changed files with 420 additions and 7 deletions.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added webapp/public/helCenter.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 9 additions & 1 deletion webapp/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ import Groups from "./pages/Social/Groups.js";
import UserGroups from "./pages/Social/UserGroups.js";
import GroupDetails from "./pages/Social/GroupDetails.js";
import History from "./pages/History/History.js";
import Ayuda from "./pages/Ayuda/Ayuda.js";
import AyudaJuego from "./pages/Ayuda/AyudaJuego.js";
import AyudaEstadisticas from "./pages/Ayuda/AyudaEstadisticas.js"
import AyudaSocial from "./pages/Ayuda/AyudaSocial.js";


function App() {
Expand Down Expand Up @@ -47,8 +51,12 @@ function App() {
<Route path="/social/grupos" element={<Groups />} />
<Route path="/social/misgrupos" element={<UserGroups />} />
<Route path="/social/grupo/:groupName" element={<GroupDetails />} />

<Route path="/ayuda" element={<Ayuda/>} />
<Route path="/ayuda/modos-de-juego" element={<AyudaJuego/>} />
<Route path="/ayuda/estadisticas" element={<AyudaEstadisticas/>} />
<Route path="/ayuda/social" element={<AyudaSocial/>} />
<Route path="/perfil" element={<Perfil />} />

<Route path="/history" element={<History />} />
<Route path="/config" element={<Config />} />
</Route>
Expand Down
8 changes: 7 additions & 1 deletion webapp/src/components/Nav/Nav.js
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ const Nav = () => {
</MenuItem>
</MenuGroup>
<MenuDivider />
<MenuGroup title="Ayuda">
<MenuGroup title="Info">
<MenuItem>
<a href={otherPortUrl}>{t("components.nav.api")}</a>
</MenuItem>
Expand All @@ -266,6 +266,12 @@ const Nav = () => {
</MenuItem>
</MenuGroup>
<MenuDivider />
<MenuGroup title="Ayuda">
<MenuItem onClick={() => handleNavigate("/ayuda")}>
{t("components.nav.help")}
</MenuItem>
</MenuGroup>
<MenuDivider />
<MenuItem onClick={handleLogout}>{t("components.nav.disconnect")}</MenuItem>
</MenuList>
</Menu>
Expand Down
38 changes: 37 additions & 1 deletion webapp/src/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@
"options": "Options",
"disconnect": "Disconnect",
"api": "API docs",
"history": "History"
"history": "History",
"help": "Help"
},
"register": {
"title": "Sign up",
Expand Down Expand Up @@ -244,6 +245,41 @@
"seegroup": "See group",
"creationDate": "Creation date",
"creator": "Creator"
},
"help": {
"title": "Help Center",
"description": "Welcome to our application's help center. Here you'll find useful information to make the most out of our game.",
"category": "Category",
"descriptionC": "Description",
"gameModes": "Help: Game Modes",
"gameModesDescription": "In our application, we have 3 game modes to entertain you. In this section, we aim to address all your doubts.",
"socialHelp": "Help: Social",
"socialHelpDescription": "We have different ways to interact with other users. If you have any doubts about how to do it, this is your section.",
"statsHelp": "Help: Statistics",
"statsHelpDescription": "We have a mode to check all the statistics. If you have any doubts, this is your section.",
"moreDetails": "More details"
},

"helpGame": {
"title": "Help: Game Modes",
"description": "Our application features 3 game modes where you can entertain yourself as much as you want and strive to achieve the highest score. All of them follow the same structure: they present four answer options, out of which only one is correct. Below, we'll detail each game mode and provide a brief example of how they work.",
"classic": "Classic Mode",
"sabios": "Wisdom Battery",
"calculator": "Human Calculator",
"classicDescription": "In Classic mode, you'll have to answer a series of questions within a set time limit for each question. There's also a time bar indicating the remaining time. Correct answers are highlighted in green, while incorrect ones are marked in red.",
"sabiosDescription": "In the Wisdom Battery mode, you need to correctly answer as many questions as possible within a limited time.",
"calculatorDescription": "In Human Calculator mode, you'll tackle mathematical operations, as many as you can until you fail."
},

"helpSocial": {
"title": "Help: Social",
"description": "Our application has a Social section where you can share your gaming experience with other users.",
"friends": "Friends",
"description2": "You can search for users in the system and add them as friends to easily access their profile.",
"groups": "Groups",
"description3": "You can create or join an existing group with other users to access their profile and recent games."
}


}
}
45 changes: 42 additions & 3 deletions webapp/src/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@
"options": "Opciones",
"disconnect": "Desconectar",
"api": "API docs",
"history": "Historial"
"history": "Historial",
"help": "Ayuda"
},
"register": {
"title": "Regístrate",
Expand Down Expand Up @@ -244,7 +245,45 @@
"seegroup": "Ver grupo",
"creationDate": "Fecha de creación",
"creator": "Creador"
},
"help": {
"title": "Centro de ayuda",
"description": "Bienvenido al centro de ayuda de nuestra aplicación. Aquí encontrarás información útil para sacar el máximo provecho de nuestro juego.",
"category": "Categoría",
"descriptionC": "Descripción",
"gameModes": "Modos de juego",
"details": "Detalles",
"gameModesDescription": "En nuestra aplicación tenemos 3 modos de juego con los que podrás entretenerte, en esta sección esperamos responder todas tus dudas.",
"socialHelp": "Social",
"socialHelpDescription": "Tenemos diferentes maneras de interactuar con otros usuarios, si tienes dudas sobre como hacerlo esta es tu sección.",
"statsHelp": "Estadisticas",
"statsHelpDescription": "Tenemos un modo para poder ver todas tus estadísticas para cada modo de juego, si tienes alguna duda esta es tu sección",
"moreDetails": "Más detalles"
},
"helpGame": {
"title": "Ayuda: Modos de Juego",
"description": "Nuestra aplicación cuenta con 3 modos de juego en los que podrás entretenerte todo el tiempo que quieras y conseguir obtener la mejor puntuación. Todos ellos tienen la siguiente estructura: cuentan con cuatro opciones de respuesta en la que solo una es la correcta, y hay una barra de tiempo que te indica el tiempo restante. A continuación se detallarán los juegos y se dará un breve ejemplo de su funcionamiento",
"classic": "Modo Clásico",
"sabios" : "Batería de Sabios",
"calculator": "Calculadora Humana",
"classicDescription": "En el modo Clásico tendrás que responder a una serie de preguntas en un tiempo determinado por pregunta. Tras responder una pregunta, la respuesta correcta se pondrá de color verde y, si has fallado, tu respuesta se pondrá en rojo.",
"sabiosDescription": "En el modo de Batería de Sabios tendrás que responder de forma correcta el máximo de preguntas en un tiempo limite.",
"calculatorDescription": "En el modo Calculadora Humana tendrás que responder a operaciones matemáticas. La partida acaba cuando fallas."
},
"helpStats": {
"title":"Ayuda: Estadísticas",
"title2":"Ayuda: Ranking",
"description": "Nuestra aplicación cuenta con un sistema de estadísticas en la que podrás ver tus estadísticas en los distintos modos de juego, y a su vez también puedes ver las estadisticas de otros usuarios.",
"description2": "Nuestra aplicación también cuenta con un sistema de ranking donde podrás ver los usuarios con las mejores puntuaciones, y filtrarlo por distintos parámetros."

},
"helpSocial": {
"title": "Ayuda: Social",
"description": "Nuestra aplicación cuenta con un apartado Social donde podras compartir tu experiencia de juego con otros usuarios.",
"friends": "Amigos",
"description2": "Podrás buscar los usuarios del sistema y añadirlos como amigos para así acceder a su perfil de forma más fácil.",
"groups": "Grupos",
"description3": "Podrás crear o unirte a un grupo ya existente con otros usuarios para poder ver su perfil y partidas recientes, y compartir tu experiencia con ellos."
}

}
}
}
60 changes: 60 additions & 0 deletions webapp/src/pages/Ayuda/Ayuda.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import React from 'react';
import { useTranslation } from 'react-i18next';
import { Heading, Table, Thead, Tbody, Tr, Th, Td } from '@chakra-ui/react';
import Nav from '../../components/Nav/Nav';
import Footer from '../../components/Footer/Footer';

const Ayuda = () => {
const { t } = useTranslation();

return (
<>
<Nav />
<Heading as="h1">{t('pages.help.title')}</Heading>
<Heading as="h2" size="md">
{t('pages.help.description')}
</Heading>
<Table className="help-table" id="help-table">
<Thead>
<Tr>
<Th>{t('pages.help.category')}</Th>
<Th>{t('pages.help.descriptionC')}</Th>
<Th>{t('pages.help.details')}</Th>
</Tr>
</Thead>
<Tbody>
<Tr>
<Td>{t('pages.help.gameModes')}</Td>
<Td>
{t('pages.help.gameModesDescription')}
</Td>
<Td>
<a href="/ayuda/modos-de-juego">{t('pages.help.moreDetails')}</a>
</Td>
</Tr>
<Tr>
<Td>{t('pages.help.socialHelp')}</Td>
<Td>
{t('pages.help.socialHelpDescription')}
</Td>
<Td>
<a href="/ayuda/social">{t('pages.help.moreDetails')}</a>
</Td>
</Tr>
<Tr>
<Td>{t('pages.help.statsHelp')}</Td>
<Td>
{t('pages.help.statsHelpDescription')}
</Td>
<Td>
<a href="/ayuda/estadisticas">{t('pages.help.moreDetails')}</a>
</Td>
</Tr>
</Tbody>
</Table>
<Footer />
</>
);
};

export default Ayuda;
58 changes: 58 additions & 0 deletions webapp/src/pages/Ayuda/Ayuda.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import React from 'react';
import { render } from '@testing-library/react';
import Ayuda from './Ayuda';
import { BrowserRouter as Router } from "react-router-dom";
import { I18nextProvider } from "react-i18next";
import i18n from "../../i18n.js";

describe('Ayuda Component', () => {

const renderComponentWithRouter = () => {
return render(
<I18nextProvider i18n={i18n}>
<Router>
<Ayuda />
</Router>
</I18nextProvider>
);
};

it('renders component without crashing', () => {
renderComponentWithRouter();
});

it('renders the correct title and description', () => {
const { getByText} = renderComponentWithRouter();
const titleElement = getByText("Centro de ayuda");
const descriptionElement = getByText(/Bienvenido al centro de ayuda de nuestra aplicación. Aquí encontrarás información útil para sacar el máximo provecho de nuestro juego/i);
expect(titleElement).toBeInTheDocument();
expect(descriptionElement).toBeInTheDocument();
});

it('renders the correct help categories and descriptions with more details links', () => {
const { getByText,getAllByText } = renderComponentWithRouter();

const categoriesAndDescriptions = [
{
description: /En nuestra aplicación tenemos 3 modos de juego con los que podrás entretenerte, en esta sección esperamos responder todas tus dudas./,
moreDetails: /Más detalles/
},
{
description: /Tenemos diferentes maneras de interactuar con otros usuarios, si tienes dudas sobre como hacerlo esta es tu sección./,
moreDetails: /Más detalles/
},
{
description: /Tenemos un modo para poder ver todas tus estadísticas para cada modo de juego, si tienes alguna duda esta es tu sección/,
moreDetails: /Más detalles/
}
];

categoriesAndDescriptions.forEach(({ description, moreDetails }) => {
const descriptionElement = getByText(description);
const moreDetailsLinks = getAllByText(moreDetails);

expect(descriptionElement).toBeInTheDocument();
expect(moreDetailsLinks.length).toBeGreaterThanOrEqual(1);
});
});
});
24 changes: 24 additions & 0 deletions webapp/src/pages/Ayuda/AyudaEstadisticas.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import React from 'react';
import { useTranslation } from 'react-i18next';
import { Heading} from '@chakra-ui/react';
import Nav from '../../components/Nav/Nav';
import Footer from '../../components/Footer/Footer';

const AyudaEstadisticas = () => {

const { t } = useTranslation();

return (
<>
<Nav />
<Heading as="h2">{t('pages.helpStats.title')}</Heading>
<p>{t('pages.helpStats.description')}
</p>
<Heading as="h2">{t('pages.helpStats.title2')}</Heading>
<p>{t('pages.helpStats.description2')}</p>
<Footer />
</>
);
};

export default AyudaEstadisticas;
38 changes: 38 additions & 0 deletions webapp/src/pages/Ayuda/AyudaEstadisticas.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import React from 'react';
import { render } from '@testing-library/react';
import { BrowserRouter as Router } from "react-router-dom";
import AyudaEstadisticas from './AyudaEstadisticas';
import { I18nextProvider } from "react-i18next";
import i18n from "../../i18n.js";

describe('AyudaEstadisticas Component', () => {

const renderComponentWithRouter = () => {
return render(
<I18nextProvider i18n={i18n}>
<Router>
<AyudaEstadisticas />
</Router>
</I18nextProvider>
);
};

it('renders component without crashing', () => {
renderComponentWithRouter();
});

const checkDescription = (description) => {
const { getByText } = renderComponentWithRouter();
const descriptionElement = getByText(description);
expect(descriptionElement).toBeInTheDocument();
};

it('renders the correct title and description', () => {
checkDescription(/Nuestra aplicación cuenta con un sistema de estadísticas en la que podrás ver tus estadísticas en los distintos modos de juego, y a su vez también puedes ver las estadisticas de otros usuarios./i);
});

it('renders the correct second title and description', () => {
checkDescription(/Nuestra aplicación también cuenta con un sistema de ranking donde podrás ver los usuarios con las mejores puntuaciones, y filtrarlo por distintos parámetros./i);
});
});

27 changes: 27 additions & 0 deletions webapp/src/pages/Ayuda/AyudaJuego.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import React from 'react';
import { useTranslation } from 'react-i18next';
import { Heading} from '@chakra-ui/react';
import Nav from '../../components/Nav/Nav';
import Footer from '../../components/Footer/Footer';
const AyudaJuego = () => {

const { t } = useTranslation();

return (
<>
<Nav />
<Heading as="h1">{t('pages.helpGame.title')}</Heading>
<p>{t('pages.helpGame.description')}
</p>
<Heading as="h2" size="md">{t('pages.helpGame.classic')}</Heading>
<p>{t('pages.helpGame.classicDescription')}</p>
<Heading as="h2" size="md">{t('pages.helpGame.sabios')}</Heading>
<p>{t('pages.helpGame.sabiosDescription')}</p>
<Heading as="h2" size="md">{t('pages.helpGame.calculator')}</Heading>
<p>{t('pages.helpGame.calculatorDescription')}</p>
<Footer />
</>
);
};

export default AyudaJuego;
Loading

0 comments on commit ca9a1d2

Please sign in to comment.