From 252e1528f64f5f13dab46b9b47a100f307be60ed Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Mon, 2 Nov 2026 08:49:57 +0100 Subject: [PATCH] Messaggio di fine partita, test a inizio stagione e documenti di stato MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Il messaggio dopo «Fine partita» dice solo «Partita salvata» (il voto MVP apre 2 ore dopo l'inizio, non dipende dallo scout). I due test che pretendevano una gara CSI già giocata tollerano l'inizio stagione (uno si salta). «Calendario ufficiale» passa in «Fatto» nella roadmap; PROJECT_STATE conta le migration fino alla m39. Co-Authored-By: Claude Sonnet 5.5 --- PROJECT_STATE.md | 14 +++++++------- docs/ROADMAP.md | 4 ++-- src/routes/scout.tsx | 2 +- test/e2e/percorsi.test.ts | 6 ++---- test/integration/api.test.ts | 13 ++++++++----- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/PROJECT_STATE.md b/PROJECT_STATE.md index 88df612..d8b3c79 100644 --- a/PROJECT_STATE.md +++ b/PROJECT_STATE.md @@ -1,6 +1,6 @@ # Project State -Ultimo aggiornamento: 26/10/2026 +Ultimo aggiornamento: 02/11/2026 Questo file dice **a che punto siamo ora**. Le funzionalità stanno in [docs/ROADMAP.md](docs/ROADMAP.md), i rilasci in [docs/CHANGELOG.md](docs/CHANGELOG.md), lo @@ -21,11 +21,11 @@ schema in [docs/DATABASE.md](docs/DATABASE.md), le procedure in [docs/CHANGELOG.md](docs/CHANGELOG.md). - **Backend:** Supabase proprietario (`kfkcldwncxqaixetsjes`). Lovable Cloud e il vecchio Project Ref `hetycilxgkdmccelwerq` non si usano più. -- **Migration:** 49 file in `supabase/migrations/`, fino a `m38_nome_votato_badge_social`. In produzione - sono applicate 45 su 49, fino alla `m34_link_maps_evento` (verificato con - `npx supabase migration list --linked` il 26/10/2026: le uniche mancanti sono `m35`-`m38`, nessuna - migration remota è assente dal repository). **Da applicare ancora: `m35`-`m38`** - (voto MVP e badge social, DD-051 e DD-052, branch `feature/gara`): `npx supabase db push` è rinviato +- **Migration:** 50 file in `supabase/migrations/`, fino a `m39_scout_valutazioni`. In produzione + sono applicate 45 su 50, fino alla `m34_link_maps_evento` (verificato con + `npx supabase migration list --linked` il 26/10/2026: le uniche mancanti sono `m35`-`m39`, nessuna + migration remota è assente dal repository). **Da applicare ancora: `m35`-`m39`** + (voto MVP e badge social, DD-051 e DD-052, valutazioni dello scout, DD-053; branch `feature/gara`): `npx supabase db push` è rinviato per scelta, non è stato eseguito. Vanno applicate subito prima del rilascio del codice: con le sole migration il voto MVP dell'app in produzione (1.4.2) smette di funzionare, con il solo codice la vista dei conteggi non esiste. @@ -38,7 +38,7 @@ schema in [docs/DATABASE.md](docs/DATABASE.md), le procedure in - **Lavoro in corso:** branch `feature/gara` per le funzioni di gara (correzioni e nuove funzioni; in futuro anche lo scouting). Primo lavoro: il voto MVP definitivo, segreto, a tempo e tra presenti, con i pari merito (DD-051, DD-052). Poi lo scout live ridotto alle valutazioni − / + - per set (DD-053), salvate subito su database. Migration `m39` da applicare in produzione. Non ancora in `main`, non rilasciato, versione + per set (DD-053), salvate subito su database. Non ancora in `main`, non rilasciato, versione invariata. Le altre voci aperte stanno in [docs/ROADMAP.md](docs/ROADMAP.md), sotto «Prossimo». ## Cose da sapere diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 293cdc9..1b2f862 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -34,6 +34,8 @@ Tutto quello che è rilasciato, fino alla versione 1.0.0 (vedi `CHANGELOG.md`). - [x] Collegamento CSI (stagione 2026/27) - [x] Classifica automatica (campionato e Coppa) - [x] Risultati campionato +- [x] Calendario ufficiale — le gare future del feed CSI compaiono già nella pagina Campionato: + a inizio stagione il calendario c'è prima dei risultati - [x] Dettaglio partita — formazioni, storico scontri diretti e probabilità di vittoria calcolata dal CSI - [x] Ruolo allenatore — gestisce gli eventi e sollecita le presenze, profilo ridotto senza @@ -54,8 +56,6 @@ Tutto quello che è rilasciato, fino alla versione 1.0.0 (vedi `CHANGELOG.md`). ## Prossimo -- [ ] Calendario ufficiale — i dati delle gare future arrivano già dal feed CSI, la pagina - Campionato usa solo quelle giocate - [ ] Database esercizi - [ ] AI Allenamenti - [ ] Archivio allenamenti diff --git a/src/routes/scout.tsx b/src/routes/scout.tsx index 33420a4..ae6eb9e 100644 --- a/src/routes/scout.tsx +++ b/src/routes/scout.tsx @@ -330,7 +330,7 @@ function ScoutBoard({ toast.error("Salvataggio non riuscito, riprova"); return; } - toast.success("Partita salvata: ora la squadra può votare l'MVP"); + toast.success("Partita salvata"); finito.current = true; void cancella.mutateAsync(partita.id); onFine(); diff --git a/test/e2e/percorsi.test.ts b/test/e2e/percorsi.test.ts index e41f05c..0feadd5 100644 --- a/test/e2e/percorsi.test.ts +++ b/test/e2e/percorsi.test.ts @@ -62,10 +62,8 @@ try { const csi = (await json(res)) as DatiCsi; const noi = csi.classifica.find((r) => isNostraSquadra(r.squadra)); assert.ok(noi, "la nostra squadra arriva dal portale"); - assert.ok( - csi.partite.some((p) => p.setNostri !== null), - "ci sono risultati giocati", - ); + // A inizio stagione il calendario c'è ma nessuna gara è ancora stata giocata. + assert.ok(csi.partite.length > 0, "le gare della stagione arrivano dal portale"); const html = await pagina("/classifica"); assert.match(titolo(html), /Classifica campionato/); diff --git a/test/integration/api.test.ts b/test/integration/api.test.ts index 1d2c09f..a916a4f 100644 --- a/test/integration/api.test.ts +++ b/test/integration/api.test.ts @@ -124,9 +124,13 @@ try { assert.ok(Date.now() - t0 < 2_000, "risposta immediata"); }); - await provaCsi( - "GET /api/public/csi-partita/$id restituisce formazioni e precedenti", - async () => { + // A inizio stagione il calendario c'è ma nessuna gara è ancora stata giocata: il test + // del dettaglio non ha un bersaglio e si salta, come per il portale non raggiungibile. + const nomeDettaglio = "GET /api/public/csi-partita/$id restituisce formazioni e precedenti"; + if (csiRaggiungibile && !partiteGiocate(csi?.partite ?? [])[0]) { + salta(nomeDettaglio, "nessuna gara ancora giocata nella stagione"); + } else + await provaCsi(nomeDettaglio, async () => { const primaGiocata = partiteGiocate(csi?.partite ?? [])[0]; assert.ok(primaGiocata, "serve almeno una gara giocata per testare il dettaglio"); const res = await fetch(url(`/api/public/csi-partita/${primaGiocata.id}`)); @@ -147,8 +151,7 @@ try { const secondo = await fetch(url(`/api/public/csi-partita/${primaGiocata.id}`)); assert.equal(secondo.status, 200); assert.ok(Date.now() - t0 < 2_000, "seconda chiamata dalla cache: risposta immediata"); - }, - ); + }); await provaCsi( "GET /api/public/csi-partita/$id con un id davvero inesistente risponde 503, non rompe",