Aggiunge la migration m26: notifiche automatiche di palloni e solleciti (DD-040)

Promemoria con «oggi/domani», data, ora e luogo. Turno palloni a 12, 6 e 3 ore
per gli eventi con un incaricato confermato, con revoca una tantum se
l'incaricato cambia. Sollecito presenze a 24, 12 e 6 ore ai destinatari
dell'evento senza risposta o con «forse». Due job pg_cron ogni 15 minuti; push
dei tipi automatici dalla coda; nessuna email per il turno palloni.

Nuovo test di integrazione sui job veri del database; aggiornati i test di
promemoria, code push ed email.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5.5 committed 2026-09-30 14:03:50 +02:00
1 parent 07624f6b9f
commit 563142a30a
5 files changed
+1413 -15

No files matched your search

+25
View File
@@ -217,6 +217,31 @@ if (!locale) {
}
});
await prova(
"le notifiche automatiche di palloni e solleciti (DD-040) vanno in coda push; i pulsanti no",
async () => {
const automatiche = [
"turno_palloni_12h",
"turno_palloni_6h",
"turno_palloni_3h",
"turno_palloni_revocato",
"sollecita_presenze_24h",
"sollecita_presenze_12h",
"sollecita_presenze_6h",
];
for (const tipo of automatiche) {
const riga = await coda(await creaNotifica(G4, tipo, EVENTI[2]));
assert.equal(riga?.stato, "in_coda", tipo);
assert.equal(riga?.tentativi, 0, tipo);
}
// `turno_palloni` e `sollecita_presenze` restano i tipi dei pulsanti: la push la manda
// la route, e una seconda dal worker sarebbe un doppione.
for (const tipo of ["turno_palloni", "sollecita_presenze"]) {
assert.equal(await coda(await creaNotifica(G4, tipo, EVENTI[2])), undefined, tipo);
}
},
);
await prova(
"il sondaggio è un tipo valido, e la sua mail parte dal trigger di M22",
async () => {