// Il registro dei test è dato di prodotto, non dato di un cliente: un database nuovo deve // nascere con dentro le domande e i pesi. Fino al 03/09/2026 seedRegistro e seedPesi erano // chiamati SOLO dai test, quindi ogni suite passava e il primo avvio vero apriva un // questionario senza domande. Questo test guarda il database come lo trova l'applicazione. import { describe, it, expect } from 'vitest'; import { createLongevityDb } from '../../src/lib/longevity/db'; import { campiDelQuestionario } from '../../src/lib/longevity/vista'; import { MODEL_VERSION, seedRegistro, seedPesi } from '../../src/lib/longevity/registro'; const OGGI = new Date().toISOString().slice(0, 10); describe('un database longevity appena creato', () => { it('ha il registro dei test già seminato, non vuoto', () => { const db = createLongevityDb(':memory:'); const n = (db.prepare('SELECT COUNT(*) AS n FROM registro_test').get() as { n: number }).n; expect(n).toBeGreaterThan(0); }); it('mostra le domande del questionario senza che nessuno semini a mano', () => { const db = createLongevityDb(':memory:'); const campi = campiDelQuestionario(db, OGGI); expect(campi.length).toBeGreaterThan(0); // I tre sotto-domini che il questionario alimenta oggi: se un giorno il registro // perdesse una famiglia di domande, il referto continuerebbe a "funzionare" con un // asse in meno e nessuno se ne accorgerebbe. const sottoDomini = new Set(campi.map((c) => c.sottoDominio)); expect(sottoDomini).toContain('questionario_sonno'); expect(sottoDomini).toContain('questionario_energia_stress'); expect(sottoDomini).toContain('questionario_lifestyle'); }); it('ha i pesi del modello corrente, per assi e macro', () => { const db = createLongevityDb(':memory:'); const perLivello = db.prepare( 'SELECT livello, COUNT(*) AS n FROM pesi WHERE model_version = ? GROUP BY livello' ).all(MODEL_VERSION) as { livello: string; n: number }[]; const mappa = Object.fromEntries(perLivello.map((r) => [r.livello, r.n])); expect(mappa.asse).toBeGreaterThan(0); expect(mappa.macro).toBeGreaterThan(0); expect(mappa.fitness_age).toBeGreaterThan(0); }); it('rilanciare la creazione non duplica niente (INSERT OR REPLACE)', () => { const db = createLongevityDb(':memory:'); const prima = (db.prepare('SELECT COUNT(*) AS n FROM registro_test').get() as { n: number }).n; // Stessa semina, stesso database: è ciò che accade a ogni riavvio del container. seedRegistro(db); seedPesi(db, MODEL_VERSION); const dopo = (db.prepare('SELECT COUNT(*) AS n FROM registro_test').get() as { n: number }).n; expect(dopo).toBe(prima); }); });