import { describe, it, expect } from 'vitest' import { buildRefertoHtml } from '../../src/referto.js' import { createInitialState } from '../../src/gameState.js' // Data fissa per asserzioni deterministiche const NOW = new Date('2026-03-14T20:30:00') // Costruisce uno stato con una striscia di set arbitraria function statoConSet(striscia, extra = {}) { const state = createInitialState() state.sp.striscia = striscia state.sp.nomi = { home: 'Antoniana', guest: 'Rivali' } return { ...state, ...extra } } describe('buildRefertoHtml (referto.js)', () => { it('esclude i set _phantom dal referto', () => { const striscia = [ { serv: 'h', ris: 'h'.repeat(25) + 'g'.repeat(20), vinc: 'h' }, { serv: 'g', ris: '', vinc: 'g', _phantom: true }, { serv: 'h', ris: 'h'.repeat(25) + 'g'.repeat(18), vinc: 'h' }, ] const html = buildRefertoHtml(statoConSet(striscia), NOW) // due set reali → "Set 1" e "Set 2", mai "Set 3" expect(html).toContain('Set 1') expect(html).toContain('Set 2') expect(html).not.toContain('Set 3') }) it('calcola il punteggio finale di ogni set dalla ris', () => { const striscia = [ { serv: 'h', ris: 'h'.repeat(25) + 'g'.repeat(20), vinc: 'h' }, { serv: 'h', ris: '', vinc: null }, ] const html = buildRefertoHtml(statoConSet(striscia), NOW) // header del set: "Antoniana 25 · 20 Rivali" expect(html).toContain('25') expect(html).toContain('20') }) it('conta i set vinti usando vinc', () => { const striscia = [ { serv: 'h', ris: '', vinc: 'h' }, { serv: 'g', ris: '', vinc: 'g' }, { serv: 'h', ris: '', vinc: 'h' }, { serv: 'h', ris: '', vinc: null }, ] const html = buildRefertoHtml(statoConSet(striscia), NOW) // risultato 2 – 1 expect(html).toContain('2 – 1') }) it('ricava il vincitore dal conteggio punti se vinc è nullo', () => { const striscia = [ { serv: 'h', ris: 'h'.repeat(25) + 'g'.repeat(23), vinc: null }, { serv: 'h', ris: '', vinc: null }, ] const html = buildRefertoHtml(statoConSet(striscia), NOW) // il primo set, pur con vinc null, conta come vinto da home → 1 – 0 expect(html).toContain('1 – 0') }) it('include la progressione punto-punto con classi per squadra', () => { const striscia = [ { serv: 'h', ris: 'hhg', vinc: null }, ] const html = buildRefertoHtml(statoConSet(striscia), NOW) expect(html).toContain('punto-h') expect(html).toContain('punto-g') expect(html).toContain('1-0') expect(html).toContain('2-0') expect(html).toContain('2-1') }) it('rende la formazione di partenza quando presente', () => { const striscia = [ { serv: 'h', ris: 'h', vinc: null, formInizio: { home: ['4', '8', '15'], guest: ['16', '23', '42'] }, }, ] const html = buildRefertoHtml(statoConSet(striscia), NOW) expect(html).toContain('Formazione di partenza') expect(html).toContain('>4<') expect(html).toContain('>42<') }) it('mostra "non disponibile" se manca formInizio', () => { const striscia = [{ serv: 'h', ris: 'h', vinc: null }] const html = buildRefertoHtml(statoConSet(striscia), NOW) expect(html).toContain('non disponibile') }) it('mostra "Nessun punto registrato" per un set senza punti', () => { const striscia = [{ serv: 'h', ris: '', vinc: null }] const html = buildRefertoHtml(statoConSet(striscia), NOW) expect(html).toContain('Nessun punto registrato') }) it('header contiene nomi squadre, modalità e data iniettata', () => { const striscia = [{ serv: 'h', ris: '', vinc: null }] const state = statoConSet(striscia) state.modalitaPartita = '2/3' const html = buildRefertoHtml(state, NOW) expect(html).toContain('Antoniana') expect(html).toContain('Rivali') expect(html).toContain('Modalità: 2/3') expect(html).toContain('14/03/2026') }) })