longevity test: motivazione corretta per il caso 'test disattivato', e media verificata numericamente
Il commento del test 'un test disattivato non entra nel calcolo' diceva che q_attivita fosse l'unica voce del sotto-dominio questionario_lifestyle: falso, ne ha sei (q_attivita, q_alimentazione, q_sigarette, q_alcol_life, q_luce, q_schermi). Il motivo vero per cui il test funziona e' che il fixture ne compila solo una delle sei, quindi disattivarla svuota il sotto-dominio. Corretto il commento a dire il motivo vero, con nota su cosa succederebbe se il fixture cambiasse. Aggiunto anche il test mancante sulla regola della media: q_attivita(3)=65 e q_alimentazione(6)=60, stesso sotto-dominio, verificano che il valore dell'asse "Stile di Vita & Sonno" sia la loro media (62.5), diversa sia dalla somma (125) sia da ciascun addendo (65, 60) — nessun test esistente controllava il VALORE della media, solo lo stato.
This commit is contained in:
@@ -49,10 +49,17 @@ describe('il motore legge le curve dal registro', () => {
|
||||
// ancora una voce nel registro): siccome un asse insufficiente non porta
|
||||
// 'valore' nel tipo Punteggio, il JSON prima/dopo risultava IDENTICO — la
|
||||
// suite lo ha confermato (verificato eseguendo il test: fallisce con le due
|
||||
// stringhe uguali). Corretto qui usando 'q_attivita', l'unica voce del
|
||||
// sotto-dominio 'questionario_lifestyle' che pesa 1.00 dentro "Stile di Vita
|
||||
// & Sonno": disattivarla fa cadere la copertura di quell'asse da 1.00 a 0 e
|
||||
// lo stato passa da 'ok' a 'insufficiente' — una differenza vera e osservabile.
|
||||
// stringhe uguali). Corretto qui usando 'q_attivita': NON e' l'unica voce
|
||||
// del sotto-dominio 'questionario_lifestyle' (ne ha sei: q_attivita,
|
||||
// q_alimentazione, q_sigarette, q_alcol_life, q_luce, q_schermi), ma in
|
||||
// QUESTO fixture e' l'unica delle sei a cui si risponde. Disattivarla
|
||||
// svuota davvero il sotto-dominio (nessun'altra voce lifestyle compilata a
|
||||
// sostituirla), la copertura dell'asse "Stile di Vita & Sonno" (peso 1.00
|
||||
// su quel solo sotto-dominio) cade da 1.00 a 0 e lo stato passa da 'ok' a
|
||||
// 'insufficiente' — una differenza vera e osservabile. Se in futuro il
|
||||
// fixture compilasse anche un'altra risposta lifestyle, questo test
|
||||
// andrebbe aggiornato: la disattivazione non svuoterebbe piu' il
|
||||
// sotto-dominio da sola.
|
||||
const db = dbPronto();
|
||||
salvaCompilazione(db, {
|
||||
client_code: 'ISL-0001', data: '2026-08-22', eta: 35,
|
||||
@@ -68,6 +75,25 @@ describe('il motore legge le curve dal registro', () => {
|
||||
expect(dopo.assi['Stile di Vita & Sonno'].stato).toBe('insufficiente');
|
||||
expect(JSON.stringify(prima)).not.toBe(JSON.stringify(dopo));
|
||||
});
|
||||
|
||||
it('due test dello stesso sotto-dominio danno la MEDIA dei punteggi, non la somma ne un singolo valore', () => {
|
||||
// q_attivita e q_alimentazione condividono il sotto-dominio 'questionario_lifestyle',
|
||||
// che pesa 1.00 (unico elemento) dentro l'asse "Stile di Vita & Sonno": il valore
|
||||
// dell'asse coincide col valore del sotto-dominio, quindi la media si legge diretta.
|
||||
const db = dbPronto();
|
||||
salvaCompilazione(db, {
|
||||
client_code: 'ISL-0001', data: '2026-08-22', eta: 35,
|
||||
// q_attivita curva incstep, steps [[0,20],[2,50],[4,80],[999,100]]: valore 3 ->
|
||||
// lerp fra (2,50) e (4,80) a meta' strada -> punteggio 65.
|
||||
// q_alimentazione curva x10: valore 6 -> punteggio 60.
|
||||
// media = (65+60)/2 = 62.5: diversa dalla somma (125) e da ciascun addendo (65, 60).
|
||||
risposte: { q_attivita: 3, q_alimentazione: 6 },
|
||||
});
|
||||
const r = calcolaSessione(db, 1);
|
||||
const asse = r.assi['Stile di Vita & Sonno'];
|
||||
expect(asse.stato).toBe('ok');
|
||||
if (asse.stato === 'ok') expect(asse.valore).toBe(62.5);
|
||||
});
|
||||
});
|
||||
|
||||
describe('calcolo e congelamento di una sessione', () => {
|
||||
|
||||
Reference in New Issue
Block a user