import { describe, it, expect } from 'vitest'; import { createLongevityDb } from '../../src/lib/longevity/db'; import { seedRegistro, seedPesi, testAttivi, esisteTest } from '../../src/lib/longevity/registro'; describe('registro dei test', () => { it('carica i 20 campi punteggiati del questionario', () => { const db = createLongevityDb(':memory:'); seedRegistro(db); const q = db.prepare(`SELECT COUNT(*) n FROM registro_test WHERE test_id LIKE 'q_%'`).get() as { n: number }; expect(q.n).toBe(20); }); it('alcol_life porta la soglia 7-14 voluta da Nicola', () => { const db = createLongevityDb(':memory:'); seedRegistro(db); const row = db.prepare(`SELECT curva, params FROM registro_test WHERE test_id = 'q_alcol_life'`) .get() as { curva: string; params: string }; expect(row.curva).toBe('lin_dec'); expect(JSON.parse(row.params)).toEqual({ best: 7, worst: 14 }); }); it('calo_pomeridiano usa la curva invertita, la quinta che al Python manca', () => { const db = createLongevityDb(':memory:'); seedRegistro(db); const row = db.prepare(`SELECT curva FROM registro_test WHERE test_id = 'q_calo_pomeridiano'`) .get() as { curva: string }; expect(row.curva).toBe('x10_inv'); }); it('un test disattivato non e piu attivo dopo la sua data', () => { const db = createLongevityDb(':memory:'); seedRegistro(db); db.prepare(`UPDATE registro_test SET attivo_a = '2026-08-01' WHERE test_id = 'q_sigarette'`).run(); const attivi = testAttivi(db, '2026-08-21').map((t) => t.test_id); expect(attivi).not.toContain('q_sigarette'); expect(testAttivi(db, '2026-07-01').map((t) => t.test_id)).toContain('q_sigarette'); }); it('esisteTest distingue un test vero da uno inventato', () => { const db = createLongevityDb(':memory:'); seedRegistro(db); expect(esisteTest(db, 'q_ore_sonno')).toBe(true); expect(esisteTest(db, 'q_inventato')).toBe(false); }); it('i pesi di ogni asse sommano a 1', () => { const db = createLongevityDb(':memory:'); seedPesi(db, 'v1.0'); const righe = db.prepare( `SELECT contenitore, ROUND(SUM(peso), 6) tot FROM pesi WHERE model_version = 'v1.0' AND livello = 'asse' GROUP BY contenitore` ).all() as { contenitore: string; tot: number }[]; expect(righe.length).toBe(7); for (const r of righe) expect(r.tot).toBe(1); }); it('i pesi sono legati alla versione del modello', () => { const db = createLongevityDb(':memory:'); seedPesi(db, 'v1.0'); seedPesi(db, 'v2.0'); const n = db.prepare(`SELECT COUNT(DISTINCT model_version) n FROM pesi`).get() as { n: number }; expect(n.n).toBe(2); }); it('il plank pesa su due assi: va visto, non nascosto', () => { const db = createLongevityDb(':memory:'); seedPesi(db, 'v1.0'); const righe = db.prepare( `SELECT contenitore FROM pesi WHERE model_version='v1.0' AND livello='asse' AND elemento IN ('core','plank')` ).all() as { contenitore: string }[]; expect(righe.map((r) => r.contenitore).sort()) .toEqual(['Forza & Struttura', 'Stabilità & Mobilità Funzionale']); }); });