import { describe, it, expect } from 'vitest'; import { createLongevityDb } from '../../src/lib/longevity/db'; import { seedRegistro, seedPesi, MODEL_VERSION } from '../../src/lib/longevity/registro'; import { apriSessione, registraMisure } from '../../src/lib/longevity/misure'; import { calcolaSessione } from '../../src/lib/longevity/motore'; /** * Riproduce la situazione descritta nella documentazione del cliente: una persona di cui * si conosce solo la composizione corporea, misurata dalla Wellness Tower. Un asse pieno, * tutti gli altri scoperti. È il caso in cui un motore ingenuo mostrerebbe sei zeri. * Dati sintetici: nessuna persona reale. */ describe('un profilo con una sola area misurata', () => { it('mostra l asse coperto e dichiara insufficienti gli altri sei', () => { const db = createLongevityDb(':memory:'); seedRegistro(db); seedPesi(db, MODEL_VERSION); db.prepare(`INSERT INTO soggetti (client_code, sesso) VALUES ('ISL-0001','M')`).run(); // i tre test di composizione esistono nel registro solo dopo il piano degli import: // finche non ci sono, questo test dimostra il comportamento con zero misure fisiche const s = apriSessione(db, { client_code: 'ISL-0001', data: '2026-08-22', tipo: 'checkup', eta_alla_data: 38 }); registraMisure(db, s, 'questionario', []); const r = calcolaSessione(db, s); const insufficienti = Object.values(r.assi).filter((a) => a.stato === 'insufficiente').length; expect(insufficienti).toBe(7); expect(r.fitnessAge).toBeNull(); }); it('nessun asse insufficiente porta con se un valore da mostrare per sbaglio', () => { const db = createLongevityDb(':memory:'); seedRegistro(db); seedPesi(db, MODEL_VERSION); db.prepare(`INSERT INTO soggetti (client_code, sesso) VALUES ('ISL-0002','F')`).run(); const s = apriSessione(db, { client_code: 'ISL-0002', data: '2026-08-22', tipo: 'checkup', eta_alla_data: 35 }); registraMisure(db, s, 'questionario', []); const r = calcolaSessione(db, s); for (const [nome, asse] of Object.entries(r.assi)) { if (asse.stato === 'insufficiente') { expect((asse as { valore?: number }).valore, `${nome} espone un valore`).toBeUndefined(); } } }); });