// La prima apertura del referto (revisione del 22/08): con i dati di oggi il cliente vede // molti assi tratteggiati. È corretto, ma la pagina deve SPIEGARLO, non lasciarlo sembrare // un guasto. Questi controlli leggono il sorgente delle pagine/componenti — come già fa // referto.test.ts per "nessuna pagina interroga il database da sola" — perché non c'è un // harness di rendering per Astro/React in questo repo (nessuna dipendenza nuova ammessa). import { describe, it, expect } from 'vitest'; import { readFileSync } from 'node:fs'; import { join } from 'node:path'; const leggi = (p: string) => readFileSync(join(process.cwd(), p), 'utf8'); describe('la Fitness Age, quando manca, spiega perché (come le altre carte)', () => { it('io.astro mostra una nota di copertura anche per la Fitness Age, non solo un trattino nudo', () => { const src = leggi('src/pages/longevity/io.astro'); // Deve leggere la copertura dedicata (vista.ts, fitnessAgeCopertura), non inventarsi // un numero: la sola presenza del trattino '—' non basta più. expect(src).toMatch(/fitnessAgeCopertura/); expect(src).toMatch(/Copertura dati/); }); it('il numero della Fitness Age, quando c\'è, è formattato all\'italiana', () => { const src = leggi('src/pages/longevity/io.astro'); expect(src).toMatch(/formattaNumero\(referto\.fitnessAge\)/); }); }); describe('il radar spiega prima di mostrare', () => { it('la spiegazione del radar precede il grafico, non lo segue', () => { const src = leggi('src/components/longevity/Radar.tsx'); const idxIntro = src.indexOf("L'area piena"); const idxGrafico = src.indexOf(' { const src = leggi('src/components/longevity/Radar.tsx'); expect(src).toMatch(/trainer/i); }); }); describe('la copertura si mostra sempre, non solo quando il numero manca', () => { it('MacroScore.astro non nasconde più la copertura quando il punteggio c\'è', () => { const src = leggi('src/components/longevity/MacroScore.astro'); // PRIMA: `{valore === null && (

Copertura dati...`. La nota deve poter comparire // anche quando valore !== null: la vecchia guardia esatta non deve più esserci. expect(src).not.toMatch(/\{valore === null && \(\s*

/); expect(src).toMatch(/Copertura dati/); }); it('il punteggio di MacroScore è formattato all\'italiana', () => { const src = leggi('src/components/longevity/MacroScore.astro'); expect(src).toMatch(/formattaNumero\(valore\)/); }); }); describe('chi ha già compilato può ricompilare (monitoraggio nel tempo)', () => { it('io.astro offre il collegamento al questionario anche quando il referto esiste già', () => { const src = leggi('src/pages/longevity/io.astro'); const idxReferto = src.indexOf('{referto && ('); expect(idxReferto).toBeGreaterThan(-1); const blocco = src.slice(idxReferto); expect(blocco).toMatch(/href=["'`]\/longevity\/questionario["'`]/); }); });