eb37f8319f
La suite era allineata a una vecchia forma dello stato (sp.punt/sp.set/ sp.servHome) e a una vecchia architettura e2e (controller su :3001). Baseline iniziale: 77/170 test Vitest falliti. Vitest (ora 212/212 verdi): - gameState.test.js: riscritto con helper che derivano punteggio/set/ servizio dalla striscia; aggiunto blocco formInizio - server-utils.js: getNetworkIPs accetta interfacce iniettabili e printServerInfo accetta gli IP iniettabili (deterministico anche su WSL); filtro LAN unificato (esclude 127./169.254./172.) - websocket + stress: punteggio letto via punteggio(striscia) - ControllerPage/DisplayPage: forzato layout mobile (viewport portrait), punteggi impostati via striscia; aggiunto test bottone REFERTO - nuovi: referto.test.js, persist.test.js (mock fs), wsMixin.test.js, integration/server.test.js (routing) Refactor di supporto: - referto.js: estratta buildRefertoHtml(state, now) pura; generaReferto resta wrapper con window.open/print - server.js: estratti createApp()/startServer(); avvio solo se entrypoint e2e (migrazione parziale, NON ancora verificata verde): - tutti i riferimenti controller :3001 -> :3000/controller - forzato viewport portrait sul controller prima del goto - reset helper: chiude il dialog di configurazione che doReset apre - game-simulation: gestione del dialog SET VINTO automatico a 25
77 lines
3.7 KiB
JavaScript
77 lines
3.7 KiB
JavaScript
const { test, expect } = require('@playwright/test');
|
|
|
|
test.describe('Game Simulation', () => {
|
|
test('Simulazione Partita: Controller aggiunge punti finché non cambia il set', async ({ context }) => {
|
|
// 1. Setup Pagine
|
|
const displayPage = await context.newPage();
|
|
const controllerPage = await context.newPage();
|
|
|
|
await displayPage.goto('http://localhost:3000');
|
|
await controllerPage.setViewportSize({ width: 390, height: 844 });
|
|
await controllerPage.goto('http://localhost:3000/controller');
|
|
|
|
// Selettori (basati su ID ipotetici o classi, adattali al tuo HTML reale)
|
|
// Assumo che nel DOM ci siano elementi con ID o classi riconoscibili
|
|
// E che i punteggi siano visibili.
|
|
|
|
// Pulisco lo stato iniziale (reset)
|
|
const btnReset = controllerPage.getByText(/Reset/i).first();
|
|
if (await btnReset.isVisible()) {
|
|
await btnReset.click();
|
|
// La modale di conferma ha un bottone "SI" con classe .btn-confirm
|
|
const btnConfirmReset = controllerPage.locator('.dialog .btn-confirm').getByText('SI');
|
|
if (await btnConfirmReset.isVisible()) {
|
|
await btnConfirmReset.click();
|
|
}
|
|
}
|
|
// doReset apre automaticamente il dialog di configurazione: chiudilo
|
|
const cfgCancel = controllerPage.locator('.dialog-config .btn-cancel');
|
|
if (await cfgCancel.isVisible()) {
|
|
await cfgCancel.click();
|
|
}
|
|
await controllerPage.waitForTimeout(200);
|
|
|
|
// 2. Loop per vincere il primo set (25 punti)
|
|
// In ControllerPage.vue, il click su .team-score.home-bg incrementa i punti home
|
|
const btnHomeScore = controllerPage.locator('.team-score.home-bg');
|
|
|
|
for (let i = 0; i < 25; i++) {
|
|
await btnHomeScore.click();
|
|
// Piccola pausa per lasciare tempo al server di processare e broadcastare
|
|
//await displayPage.waitForTimeout(10);
|
|
}
|
|
|
|
// 3. Verifica Vittoria Set
|
|
// I punti dovrebbero essere tornati a 0 (o mostrare 25 prima del reset manuale?)
|
|
// Il codice gameState dice: checkVittoria -> resetta solo se qualcuno chiama resetta?
|
|
// No, checkVittoria è boolean. applyAction('incPunt') incrementa.
|
|
// Se vince, il set incrementa? 'incPunt' non incrementa i set in automatico nel codice gameState checkato prima!
|
|
// Controllo applyAction:
|
|
// "s.sp.punt[team]++" ... POI "checkVittoria(s)" all'inizio del prossimo incPunt?
|
|
// NO: "if (checkVittoria(s)) break" all'inizio di incPunt impedisce di andare oltre 25 se già vinto.
|
|
// MA 'incSet' è un'azione separata!
|
|
|
|
// Aspetta, la logica standard è: arrivo a 25 -> vinco set?
|
|
// In questo codice `gameState.js` NON c'è automatismo "arrivo a 25 -> set++ e palla al centro".
|
|
// L'utente deve cliccare "SET Antoniana" manualmente?
|
|
// Guardiamo ControllerPage.vue:
|
|
// C'è un bottone "SET {{ state.sp.nomi.home }}" che manda { type: 'incSet', team: 'home' }
|
|
|
|
// QUINDI: Il test deve:
|
|
// 1. Arrivare a 25 pt.
|
|
// 2. Cliccare "SET HOME".
|
|
// 3. Verificare che Set Home = 1.
|
|
|
|
// A 25-0 compare automaticamente il dialog "SET VINTO"
|
|
await expect(controllerPage.locator('.team-score.home-bg .team-pts')).toHaveText('25');
|
|
await controllerPage.waitForSelector('.dialog-winner');
|
|
|
|
// Procedi al set successivo: registra il set vinto da Home
|
|
await controllerPage.getByText('VAI AL SET SUCCESSIVO').click();
|
|
await controllerPage.waitForTimeout(300);
|
|
|
|
// Verifica che il set Home sia incrementato a 1
|
|
await expect(controllerPage.locator('.team-score.home-bg .team-set')).toContainText('SET 1');
|
|
});
|
|
});
|