diff --git a/webapp/e2e/features/close-session.feature b/webapp/e2e/features/close-session.feature
new file mode 100644
index 00000000..f92ebb50
--- /dev/null
+++ b/webapp/e2e/features/close-session.feature
@@ -0,0 +1,6 @@
+Feature: Closing a session
+
+Scenario: The user is going to close the session
+ Given An unregistered user
+ When I fill the data in the form, press submit and press Logout button
+ Then A title message should be shown in the screen
\ No newline at end of file
diff --git a/webapp/e2e/features/i18n.feature b/webapp/e2e/features/i18n.feature
new file mode 100644
index 00000000..32175dd6
--- /dev/null
+++ b/webapp/e2e/features/i18n.feature
@@ -0,0 +1,6 @@
+Feature: i18n test
+
+Scenario: The user is going to try different languages
+ Given An unregistered user
+ When I fill the data in the form, press submit and press langugae button
+ Then A Classic Game message should be shown in different languages
\ No newline at end of file
diff --git a/webapp/e2e/features/infinite-mode.feature b/webapp/e2e/features/infinite-mode.feature
new file mode 100644
index 00000000..b8f51386
--- /dev/null
+++ b/webapp/e2e/features/infinite-mode.feature
@@ -0,0 +1,6 @@
+Feature: Play Infinite Mode
+
+Scenario: The user is going to play infinite mode
+ Given An unregistered user
+ When I fill the data in the form, press submit, press Infinte Mode button and end game
+ Then A Game Over message should be shown in the screen
\ No newline at end of file
diff --git a/webapp/e2e/steps/close-session-steps.js b/webapp/e2e/steps/close-session-steps.js
new file mode 100644
index 00000000..8a095c98
--- /dev/null
+++ b/webapp/e2e/steps/close-session-steps.js
@@ -0,0 +1,58 @@
+const puppeteer = require('puppeteer');
+const { defineFeature, loadFeature }=require('jest-cucumber');
+const setDefaultOptions = require('expect-puppeteer').setDefaultOptions
+const feature = loadFeature('./features/close-session.feature');
+
+let page;
+let browser;
+
+defineFeature(feature, test => {
+
+ beforeAll(async () => {
+ browser = process.env.GITHUB_ACTIONS
+ ? await puppeteer.launch()
+ : await puppeteer.launch({ headless: false, slowMo: 100 });
+ page = await browser.newPage();
+ //Way of setting up the timeout
+ setDefaultOptions({ timeout: 10000 })
+
+ await page
+ .goto("http://localhost:3000", {
+ waitUntil: "networkidle0",
+ })
+ .catch(() => {});
+ });
+
+ test('The user is going to close the session', ({given,when,then}) => {
+
+ let username;
+ let password;
+
+ given('An unregistered user', async () => {
+ username = "pablo2"
+ password = "pabloasw"
+ await expect(page).toClick("button", { text: "Don't have an account? Register here." });
+ });
+
+ when('I fill the data in the form, press submit and press Logout button', async () => {
+ await expect(page).toFill('input[name="username"]', username);
+ await expect(page).toFill('input[name="password"]', password);
+ await expect(page).toFill('input[name="confirmPassword"]', password);
+
+ await expect(page).toClick('button.btn', { text: '' });
+
+ await expect(page).toClick('button.perfilButton', { text: '' });
+
+ await expect(page).toClick('li', { text: 'Logout' });
+ });
+
+ then('A title message should be shown in the screen', async () => {
+ await expect(page).toMatchElement("h1.titleLoginRegister", { text: "" });
+ });
+ })
+
+ afterAll(async ()=>{
+ browser.close()
+ })
+
+});
\ No newline at end of file
diff --git a/webapp/e2e/steps/i18n-steps.js b/webapp/e2e/steps/i18n-steps.js
new file mode 100644
index 00000000..5d8d9291
--- /dev/null
+++ b/webapp/e2e/steps/i18n-steps.js
@@ -0,0 +1,71 @@
+const puppeteer = require('puppeteer');
+const { defineFeature, loadFeature }=require('jest-cucumber');
+const setDefaultOptions = require('expect-puppeteer').setDefaultOptions
+const feature = loadFeature('./features/i18n.feature');
+
+let page;
+let browser;
+
+defineFeature(feature, test => {
+
+ beforeAll(async () => {
+ browser = process.env.GITHUB_ACTIONS
+ ? await puppeteer.launch()
+ : await puppeteer.launch({ headless: false, slowMo: 10 });
+ page = await browser.newPage();
+ //Way of setting up the timeout
+ setDefaultOptions({ timeout: 10000 })
+
+ await page
+ .goto("http://localhost:3000", {
+ waitUntil: "networkidle0",
+ })
+ .catch(() => {});
+ });
+
+ test('The user is going to try different languages', ({given,when,then}) => {
+
+ let username;
+ let password;
+
+ given('An unregistered user', async () => {
+ username = "pablo3"
+ password = "pabloasw"
+ await expect(page).toClick("button", { text: "Don't have an account? Register here." });
+ });
+
+ when('I fill the data in the form, press submit and press langugae button', async () => {
+ await expect(page).toFill('input[name="username"]', username);
+ await expect(page).toFill('input[name="password"]', password);
+ await expect(page).toFill('input[name="confirmPassword"]', password);
+
+ await expect(page).toClick('button.btn', { text: '' });
+
+ await expect(page).toMatchElement("span", { text: "Classic Game" });
+
+ await expect(page).toClick('button.menuLeft', { text: '' });
+
+ await expect(page).toClick('div.languageButton', { text: '' });
+
+ await expect(page).toClick('li', { text: 'Spanish' });
+ });
+
+ then('A Classic Game message should be shown in different languages', async () => {
+
+ await expect(page).toMatchElement("span", { text: "Juego Clásico" });
+
+ await expect(page).toClick('div.languageButton', { text: '' });
+ await expect(page).toClick('li', { text: 'Italiano' });
+ await expect(page).toMatchElement("span", { text: "Gioco Classico" });
+
+ await expect(page).toClick('div.languageButton', { text: '' });
+ await expect(page).toClick('li', { text: 'Francese' });
+ await expect(page).toMatchElement("span", { text: "Jeu classique" });
+ });
+ })
+
+ afterAll(async ()=>{
+ browser.close()
+ })
+
+});
\ No newline at end of file
diff --git a/webapp/e2e/steps/infinite-mode-steps.js b/webapp/e2e/steps/infinite-mode-steps.js
new file mode 100644
index 00000000..947d87ba
--- /dev/null
+++ b/webapp/e2e/steps/infinite-mode-steps.js
@@ -0,0 +1,58 @@
+const puppeteer = require('puppeteer');
+const { defineFeature, loadFeature }=require('jest-cucumber');
+const setDefaultOptions = require('expect-puppeteer').setDefaultOptions
+const feature = loadFeature('./features/infinite-mode.feature');
+
+let page;
+let browser;
+
+defineFeature(feature, test => {
+
+ beforeAll(async () => {
+ browser = process.env.GITHUB_ACTIONS
+ ? await puppeteer.launch()
+ : await puppeteer.launch({ headless: false, slowMo: 10 });
+ page = await browser.newPage();
+ //Way of setting up the timeout
+ setDefaultOptions({ timeout: 10000 })
+
+ await page
+ .goto("http://localhost:3000", {
+ waitUntil: "networkidle0",
+ })
+ .catch(() => {});
+ });
+
+ test('The user is going to play infinite mode', ({given,when,then}) => {
+
+ let username;
+ let password;
+
+ given('An unregistered user', async () => {
+ username = "pablo"
+ password = "pabloasw"
+ await expect(page).toClick("button", { text: "Don't have an account? Register here." });
+ });
+
+ when('I fill the data in the form, press submit, press Infinte Mode button and end game', async () => {
+ await expect(page).toFill('input[name="username"]', username);
+ await expect(page).toFill('input[name="password"]', password);
+ await expect(page).toFill('input[name="confirmPassword"]', password);
+
+ await expect(page).toClick('button.btn', { text: '' });
+
+ await expect(page).toClick('button.btn', { text: 'Infinite Mode' });
+
+ await expect(page).toClick('div.endGameButton', { text: '' });
+ });
+
+ then('A Game Over message should be shown in the screen', async () => {
+ await expect(page).toMatchElement("p", { text: "Game Over" });
+ });
+ })
+
+ afterAll(async ()=>{
+ browser.close()
+ })
+
+});
\ No newline at end of file
diff --git a/webapp/e2e/steps/register-form.steps.js b/webapp/e2e/steps/register-form.steps.js
index c706a59e..163d9a65 100644
--- a/webapp/e2e/steps/register-form.steps.js
+++ b/webapp/e2e/steps/register-form.steps.js
@@ -11,7 +11,7 @@ defineFeature(feature, test => {
beforeAll(async () => {
browser = process.env.GITHUB_ACTIONS
? await puppeteer.launch()
- : await puppeteer.launch({ headless: false, slowMo: 100 });
+ : await puppeteer.launch({ headless: false, slowMo: 10 });
page = await browser.newPage();
//Way of setting up the timeout
setDefaultOptions({ timeout: 10000 })
@@ -29,7 +29,7 @@ defineFeature(feature, test => {
let password;
given('An unregistered user', async () => {
- username = "pablo"
+ username = "pablo4"
password = "pabloasw"
await expect(page).toClick("button", { text: "Don't have an account? Register here." });
});
@@ -43,7 +43,7 @@ defineFeature(feature, test => {
});
then('A confirmation message should be shown in the screen', async () => {
- await expect(page).toMatchElement("div", { text: "User added successfully" });
+ await expect(page).toMatchElement("span", { text: "[ ASW Quiz - WIQ ]" });
});
})
diff --git a/webapp/src/App.js b/webapp/src/App.js
index c4b18e12..e06aa06d 100644
--- a/webapp/src/App.js
+++ b/webapp/src/App.js
@@ -9,11 +9,28 @@ import User from './components/User'
import { IntlProvider } from 'react-intl';
import messages_en from './messages/messages_en.json';
import messages_es from './messages/messages_es.json';
+import messages_it from './messages/messages_it.json';
+import messages_fr from './messages/messages_fr.json';
function App() {
const [locale, setLocale] = useState('en');
- const messages = locale === 'en' ? messages_en : messages_es;
+ let messages;
+ switch (locale) {
+ case 'en':
+ messages = messages_en;
+ break;
+ case 'es':
+ messages = messages_es;
+ break;
+ case 'it':
+ messages = messages_it;
+ break;
+ case 'fr':
+ messages = messages_fr;
+ break;
+ default: break;
+ }
const [daltonicMode, setDaltonicMode] = useState(false);
diff --git a/webapp/src/components/AddUser.js b/webapp/src/components/AddUser.js
index d60c6942..a50ad114 100644
--- a/webapp/src/components/AddUser.js
+++ b/webapp/src/components/AddUser.js
@@ -153,7 +153,7 @@ const AddUser = ({goTo, changeLanguage, locale, handleToggleView}) => {
} />
{error && (
- setError('')} message={} />
+ setError('')} message={`Error: ${error}`} />
)}
);
diff --git a/webapp/src/components/LanguageSelect.js b/webapp/src/components/LanguageSelect.js
index 86211ce0..81b44cec 100644
--- a/webapp/src/components/LanguageSelect.js
+++ b/webapp/src/components/LanguageSelect.js
@@ -8,6 +8,8 @@ const LanguageSelect = ({ value, onChange }) => {
);
diff --git a/webapp/src/components/Login.js b/webapp/src/components/Login.js
index a31e033b..eed31614 100644
--- a/webapp/src/components/Login.js
+++ b/webapp/src/components/Login.js
@@ -122,7 +122,7 @@ const Login = ({ goTo, changeLanguage, locale, handleToggleView }) => {
} />
{error && (
- setError('')} message={} />
+ setError('')} message={`Error: ${error}`} />
)}
diff --git a/webapp/src/components/Nav.jsx b/webapp/src/components/Nav.jsx
index 29c7918c..45140894 100644
--- a/webapp/src/components/Nav.jsx
+++ b/webapp/src/components/Nav.jsx
@@ -85,7 +85,7 @@ function Nav({ goTo, changeLanguage, locale, isInGame, changeDaltonicMode }) {
-
-