Test that the migration chain keeps the expression indexes (B-97, DAT-75, DAT-56, ARC-62)
batch_alter_table on SQLite rebuilds the table and silently drops ix_rounds_single_active and ix_users_username_lower, autogenerate never sees them, and no test ran the migrations (the others build the schema with create_all). tests/unit/test_migrations.py runs `alembic upgrade head` on an empty file DB in a subprocess and asserts both indexes exist with their definition (read from sqlite_master) and that a second active round and a case-variant username are refused. Verified to fail when a batch_alter_table on rounds is added to the last migration. The current chain already preserves both indexes, so no migration changes. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
daec4749c2
commit
cc63753439
7 files changed
+90
-26
No files matched your search
@@ -932,8 +932,8 @@ italiano.
|
||||
e l'avvio dei sei task; la route SSE `round_stream` (è testato solo il
|
||||
broadcaster); `UserLocks` e la sua acquisizione nelle route di scommessa e
|
||||
prelievo; il codice JavaScript dei frontend; la parità delle chiavi tra le
|
||||
lingue di `i18n.js`; le migrazioni Alembic (lo schema dei test nasce da
|
||||
`Base.metadata.create_all`). Le verifiche dal vivo sono state manuali
|
||||
lingue di `i18n.js`; le migrazioni Alembic su dati esistenti (la catena è eseguita solo su un database vuoto, [ARC-62]; lo schema degli
|
||||
altri test nasce da `Base.metadata.create_all`). Le verifiche dal vivo sono state manuali
|
||||
(`scripts/electrum_smoke_test.py` e transazioni reali su mainnet; prelievo e
|
||||
RBF mai trasmessi dal vivo, vedi [limiti-noti.md](limiti-noti.md)).
|
||||
La revisione del 2026-09-28 ha osservato che nessuna delle sue falle
|
||||
@@ -946,8 +946,7 @@ italiano.
|
||||
tabella con un solo avviso. Ogni migrazione batch su `rounds` o `users` li
|
||||
ricrea esplicitamente.
|
||||
*Codice:* `migrations/env.py` · `migrations/versions/` ·
|
||||
*Test:* —
|
||||
*Stato:* da implementare (B-97) · *Oggi:* nessun test esegue le migrazioni.
|
||||
*Test:* `tests/unit/test_migrations.py`
|
||||
- **[ARC-63]** **Test di parità delle traduzioni.** Un test legge
|
||||
`TRANSLATIONS` da `app/static/i18n.js` e fallisce se una delle sette lingue
|
||||
ha un insieme di chiavi diverso da quello di `en` ([ARC-51]).
|
||||
|
||||
@@ -1453,9 +1453,8 @@ letti con una scansione completa.
|
||||
secondo username uguale a meno delle maiuscole vengano rifiutati con
|
||||
`IntegrityError`. Il test gira con la suite unitaria, quindi una migrazione
|
||||
che perde uno dei due indici non entra nel repository.
|
||||
*Codice:* `migrations/env.py` · *Test:* —
|
||||
*Stato:* da implementare (B-97) · *Oggi:* nessun test esegue le migrazioni
|
||||
(vedi sotto).
|
||||
*Codice:* `migrations/env.py` ·
|
||||
*Test:* `tests/unit/test_migrations.py`
|
||||
|
||||
- **[DAT-57]** Una migrazione che incontra dati incompatibili con un nuovo
|
||||
vincolo si comporta in uno di due modi. Se esiste una correzione **senza
|
||||
@@ -1477,10 +1476,9 @@ letti con una scansione completa.
|
||||
l'indice. È la stessa scelta che `get_active_round` faceva già in silenzio.
|
||||
*Codice:* `migrations/versions/8a1c4e7b2d90_add_failure_reason_and_single_active_round_index.py`
|
||||
|
||||
Oggi nessun test esegue le migrazioni: i test unitari creano lo schema
|
||||
direttamente dal modello (`Base.metadata.create_all`), quindi verificano il
|
||||
modello, non la catena di revisioni. [DAT-75] (B-97) aggiunge il primo test
|
||||
sulla catena.
|
||||
I test unitari creano lo schema direttamente dal modello
|
||||
(`Base.metadata.create_all`), quindi verificano il modello, non la catena di
|
||||
revisioni; [DAT-75] aggiunge il test che esegue la catena su un database vuoto.
|
||||
|
||||
### Storia dello schema
|
||||
|
||||
|
||||
+3
-3
@@ -245,16 +245,16 @@ cifrava di nuovo il file sbagliato (vedi [operativita.md](operativita.md)).
|
||||
| B-94 | Cambio password, login e bug report senza limiti adeguati; errori non strutturati in alcune risposte | Media | **aperto** | — | SEC, API |
|
||||
| B-95 | Costo della scommessa e `fee_address` letti dalla configurazione corrente invece che fotografati all'apertura | Media | **aperto** | — | RND, BET |
|
||||
| B-96 | Incoerenze minori di stato (prelievo ridotto sotto il minimo, importi di un pagamento abbandonato, audit mancanti, attesa in `closing` senza segnali, …) | Media | **aperto** | — | TX, BET, WDR, DEP |
|
||||
| B-97 | Le migrazioni possono eliminare in silenzio gli indici su espressione | Media | **aperto** | — | DAT |
|
||||
| B-97 | Le migrazioni possono eliminare in silenzio gli indici su espressione | Media | *da registrare* | `test_migrations.py` | DAT |
|
||||
| B-98 | La selezione delle monete si ferma alla prima che copre l'importo e rifiuta una scommessa pagabile | Media | **aperto** | — | BET, WDR |
|
||||
|
||||
## Stato attuale
|
||||
|
||||
- **Corretti:** B-01 … B-70, tranne B-16, che è chiuso nella sostanza (il
|
||||
crash è eliminato e `/guida` serve un segnaposto) ma lascia la guida vera
|
||||
come limite accettato; dalla revisione del 2026-09-28: B-88, B-75.
|
||||
come limite accettato; dalla revisione del 2026-09-28: B-88, B-75, B-97.
|
||||
- **Aperti:** B-71, B-72 (gravità bassa, operativi o di documentazione) e
|
||||
B-73 … B-98 dalla revisione del 2026-09-28 tranne i corretti (9 critici,
|
||||
8 alti, 7 medi), da implementare nell'ordine di
|
||||
8 alti, 6 medi), da implementare nell'ordine di
|
||||
[piano-correzioni.md](piano-correzioni.md).
|
||||
- **Prossimo numero libero:** `B-99`.
|
||||
Reference in new issue
Block a user