Calendario: il 19 e il 20 settembre non sono un buco, sono un evento e una chiusura

Quei due giorni non stanno in nessuna delle due griglie perche' non hanno class:
il 19 c'e' la presentazione della nuova apertura, il 20 si sta chiusi. Scritto
come avviso con la sua finestra, il vuoto smette di sembrare una trascrizione
incompleta e diventa un'informazione.

Gli avvisi compaiono in cima al popup e in fondo al PDF - e' il file che gira su
WhatsApp, e chi lo riceve non ha la pagina davanti. Spariscono da soli quando
sono passati: un avviso scaduto dice che il centro e' chiuso in un giorno gia'
trascorso, e chi legge non sa piu' se valga per quest'anno o per il prossimo.

Lo spazio riservato in fondo alla pagina cresce con gli avvisi, altrimenti la
griglia si allunga fino a spingerli su una seconda pagina.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-17 17:07:24 +02:00
parent 928de34c55
commit d03c62641e
6 changed files with 123 additions and 18 deletions
+32 -4
View File
@@ -1,5 +1,5 @@
import { describe, it, expect } from 'vitest';
import { calendari, calendarioDaMostrare, DISCIPLINE, GIORNI, type Giorno } from '../src/data/calendari';
import { avvisi, avvisiAttivi, calendari, calendarioDaMostrare, DISCIPLINE, GIORNI, type Giorno } from '../src/data/calendari';
const d = (iso: string) => new Date(iso);
@@ -25,9 +25,11 @@ describe('calendarioDaMostrare', () => {
});
});
// 19 e 20 settembre non sono coperti da nessuno dei due fogli del cliente. Il buco è vero e
// resta dichiarato qui: se un giorno verrà colmato, questo test lo dirà.
it('nei due giorni scoperti (19-20 settembre) mostra il prossimo', () => {
// 19 e 20 settembre non stanno in nessuna griglia perché quei due giorni non hanno class:
// il 19 c'è la presentazione della nuova apertura, il 20 si sta chiusi (Adriano, 17/08).
// La griglia mostrata è quindi quella del 21, marcata futura, e l'informazione sui due
// giorni arriva dagli avvisi qui sotto.
it('nei due giorni fuori griglia (19-20 settembre) mostra il prossimo', () => {
expect(calendarioDaMostrare(d('2026-09-19T10:00:00+02:00'))).toMatchObject({
cal: { id: 'settembre-21-in-poi' }, futuro: true,
});
@@ -44,6 +46,32 @@ describe('calendarioDaMostrare', () => {
});
});
describe('giornate fuori griglia', () => {
it('la presentazione e la chiusura si vedono prima di arrivarci', () => {
const oggi = avvisiAttivi(d('2026-08-17T12:00:00+02:00')).map((a) => a.id);
expect(oggi).toEqual(['presentazione-19-settembre', 'chiusura-20-settembre']);
});
// Un avviso passato è peggio di nessun avviso: dice che il centro è chiuso un giorno che è
// già trascorso, e chi legge non sa più se valga per quest'anno o per il prossimo.
it('ogni avviso sparisce da solo quando è passato', () => {
expect(avvisiAttivi(d('2026-09-19T23:59:59+02:00')).map((a) => a.id))
.toEqual(['presentazione-19-settembre', 'chiusura-20-settembre']);
expect(avvisiAttivi(d('2026-09-20T00:00:00+02:00')).map((a) => a.id))
.toEqual(['chiusura-20-settembre']);
expect(avvisiAttivi(d('2026-09-21T00:00:00+02:00'))).toEqual([]);
});
it('ogni avviso ha una scadenza leggibile e un testo', () => {
for (const a of avvisi) {
expect(Number.isNaN(Date.parse(a.to)), `${a.id}: scadenza illeggibile`).toBe(false);
if (a.from !== null) expect(Date.parse(a.to)).toBeGreaterThanOrEqual(Date.parse(a.from));
expect(a.quando.length).toBeGreaterThan(0);
expect(a.testo.length).toBeGreaterThan(0);
}
});
});
describe('coerenza dei calendari trascritti', () => {
for (const c of calendari) {
describe(c.id, () => {