Calendario: si vedono tutti gli orari validi, e il PDF ne fa una pagina ciascuno
Il popup mostrava solo l'orario del momento: chi guarda ad agosto vuole sapere com'e' settembre per intero, e una griglia sola gli fa credere che valga per sempre. Ora ci sono tutti quelli non ancora scaduti, ognuno con la sua etichetta - In vigore, oppure la data da cui parte - e quelli passati spariscono da soli. Il bottone scarica /calendario/tutti.pdf: un orario per pagina, con le giornate fuori griglia ripetute su ognuna, perche' un foglio stampato da solo deve bastare a se stesso. Gli id singoli restano validi per mandarne uno solo. calendarioDaMostrare (uno) diventa calendariDaMostrare (tutti): una funzione sola, non due che dicono cose simili - e' lo stesso difetto dei due link della pagina servizi, che erano due espressioni per lo stesso indirizzo e sono divergute. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+31
-32
@@ -1,48 +1,47 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { avvisi, avvisiAttivi, calendari, calendarioDaMostrare, DISCIPLINE, GIORNI, type Giorno } from '../src/data/calendari';
|
||||
import { avvisi, avvisiAttivi, calendari, calendariDaMostrare, DISCIPLINE, GIORNI, type Giorno } from '../src/data/calendari';
|
||||
|
||||
const d = (iso: string) => new Date(iso);
|
||||
|
||||
describe('calendarioDaMostrare', () => {
|
||||
it('in vigore: mostra quello del periodo', () => {
|
||||
expect(calendarioDaMostrare(d('2026-09-05T10:00:00+02:00'))).toMatchObject({
|
||||
cal: { id: 'settembre-1-18' }, futuro: false,
|
||||
});
|
||||
expect(calendarioDaMostrare(d('2026-09-25T10:00:00+02:00'))).toMatchObject({
|
||||
cal: { id: 'settembre-21-in-poi' }, futuro: false,
|
||||
});
|
||||
// `to: null` = a tempo indeterminato: fra un anno vale ancora quello.
|
||||
expect(calendarioDaMostrare(d('2027-03-01T10:00:00+02:00'))).toMatchObject({
|
||||
cal: { id: 'settembre-21-in-poi' }, futuro: false,
|
||||
});
|
||||
describe('calendariDaMostrare', () => {
|
||||
const idDi = (quando: string) => calendariDaMostrare(d(quando)).map((m) => `${m.cal.id}:${m.stato}`);
|
||||
|
||||
// Si vedono tutti insieme, non solo quello del momento: chi guarda ad agosto vuole sapere
|
||||
// com'è settembre per intero, e una griglia sola gli farebbe credere che valga per sempre.
|
||||
it('prima dell\'inizio: entrambi, marcati futuri', () => {
|
||||
expect(idDi('2026-08-17T10:00:00+02:00'))
|
||||
.toEqual(['settembre-1-18:futuro', 'settembre-21-in-poi:futuro']);
|
||||
});
|
||||
|
||||
// Il link esiste prima che il primo orario cominci: ad agosto deve mostrare gli orari di
|
||||
// settembre dichiarando che entrano dopo, non un "nessun calendario" che non dice niente.
|
||||
it('prima dell\'inizio: mostra il prossimo, marcato come futuro', () => {
|
||||
expect(calendarioDaMostrare(d('2026-08-17T10:00:00+02:00'))).toMatchObject({
|
||||
cal: { id: 'settembre-1-18' }, futuro: true,
|
||||
});
|
||||
it('durante il primo periodo: il primo è in corso, il secondo resta annunciato', () => {
|
||||
expect(idDi('2026-09-05T10:00:00+02:00'))
|
||||
.toEqual(['settembre-1-18:in-corso', 'settembre-21-in-poi:futuro']);
|
||||
});
|
||||
|
||||
// Un orario scaduto non deve restare in pagina: farebbe cercare lezioni che non ci sono più.
|
||||
it('finito il primo periodo, il primo orario sparisce', () => {
|
||||
expect(idDi('2026-09-25T10:00:00+02:00')).toEqual(['settembre-21-in-poi:in-corso']);
|
||||
expect(idDi('2027-03-01T10:00:00+02:00')).toEqual(['settembre-21-in-poi:in-corso']);
|
||||
});
|
||||
|
||||
// 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,
|
||||
});
|
||||
expect(calendarioDaMostrare(d('2026-09-20T23:00:00+02:00'))).toMatchObject({
|
||||
cal: { id: 'settembre-21-in-poi' }, futuro: true,
|
||||
});
|
||||
it('nei due giorni fuori griglia resta il solo orario del 21, annunciato', () => {
|
||||
expect(idDi('2026-09-19T10:00:00+02:00')).toEqual(['settembre-21-in-poi:futuro']);
|
||||
expect(idDi('2026-09-20T23:00:00+02:00')).toEqual(['settembre-21-in-poi:futuro']);
|
||||
});
|
||||
|
||||
it('confini al secondo, in ora italiana', () => {
|
||||
expect(calendarioDaMostrare(d('2026-09-18T23:59:59+02:00'))?.cal.id).toBe('settembre-1-18');
|
||||
expect(calendarioDaMostrare(d('2026-09-21T00:00:00+02:00'))).toMatchObject({
|
||||
cal: { id: 'settembre-21-in-poi' }, futuro: false,
|
||||
});
|
||||
expect(idDi('2026-09-18T23:59:59+02:00'))
|
||||
.toEqual(['settembre-1-18:in-corso', 'settembre-21-in-poi:futuro']);
|
||||
expect(idDi('2026-09-19T00:00:00+02:00')).toEqual(['settembre-21-in-poi:futuro']);
|
||||
expect(idDi('2026-09-21T00:00:00+02:00')).toEqual(['settembre-21-in-poi:in-corso']);
|
||||
});
|
||||
|
||||
it('l\'ordine dell\'elenco di partenza non cambia il risultato', () => {
|
||||
const rovescio = [...calendari].reverse();
|
||||
expect(calendariDaMostrare(d('2026-09-05T10:00:00+02:00'), rovescio).map((m) => m.cal.id))
|
||||
.toEqual(['settembre-1-18', 'settembre-21-in-poi']);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user