longevity: atomicità compilazione questionario con transazione unica

This commit is contained in:
2026-08-21 20:02:23 +02:00
parent f21b64fcc5
commit 91e6487da3
2 changed files with 46 additions and 23 deletions
+20
View File
@@ -64,4 +64,24 @@ describe('compilazione del questionario', () => {
const n = db.prepare(`SELECT COUNT(*) n FROM sessioni`).get() as { n: number };
expect(n.n).toBe(0);
});
it('fallimento a metà non lascia traccia: sessione, misure e note sono atomiche', () => {
const db = dbPronto();
// Passa null nel campo libero per provocare un errore NOT NULL nella tabella profilo_note.
// Questo forza il fallimento DOPO aver aperto la sessione e registrato le misure.
expect(() =>
salvaCompilazione(db, {
client_code: 'ISL-0001', data: '2026-08-21',
risposte: { q_riposato: 6 },
liberi: { farmaci: null as any }, // Tipo violato: NOT NULL
})
).toThrow();
// Verifica che la transazione sia stata rollback: niente sessione, niente misure, niente note.
const sessioni = db.prepare(`SELECT COUNT(*) n FROM sessioni`).get() as { n: number };
const misure = db.prepare(`SELECT COUNT(*) n FROM misure`).get() as { n: number };
const note = db.prepare(`SELECT COUNT(*) n FROM profilo_note`).get() as { n: number };
expect(sessioni.n).toBe(0);
expect(misure.n).toBe(0);
expect(note.n).toBe(0);
});
});