From ee54e9a1f49723f2da21ed7ea6f2d897cf32a47c Mon Sep 17 00:00:00 2001 From: AdrianoDev Date: Mon, 20 Jul 2026 22:28:20 +0200 Subject: [PATCH] Migrazione: allinea i bottoni promo col vecchio testo-freccia MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Il commit 1522d97 ha spostato la freccia "→" dei bottoni promo nel CSS (::after) e il maiuscolo in text-transform, cambiando il seed in minuscolo senza freccia. Ma il seed è INSERT OR IGNORE: sui DB esistenti (produzione) le righe restavano a "LE NOSTRE PROPOSTE →" / "ACQUISTA →", e il ::after avrebbe prodotto una doppia freccia. Aggiunge una migrazione guardata dal vecchio valore (idempotente, non tocca le righe modificate dal pannello) che le allinea al seed corrente. Verificata su copia del DB di produzione: frecce corrette e 40 edit del pannello intatti. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/lib/db.ts | 11 +++++++++++ tests/content-db.test.ts | 29 +++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/lib/db.ts b/src/lib/db.ts index faaed8a..49a1779 100644 --- a/src/lib/db.ts +++ b/src/lib/db.ts @@ -166,6 +166,17 @@ export function createDb(path?: string): Database.Database { const updMetodoTx = db.transaction(() => { for (const [tag, oldV, newV] of METODO) upd02.run(newV, tag, oldV); }); updMetodoTx(); + // Modifiche promo (commit 1522d97): la freccia "→" dei bottoni è passata al CSS (::after) e il + // maiuscolo a text-transform. Il seed è ora minuscolo e senza freccia. Le righe di prod ancora + // al vecchio default vanno allineate, altrimenti il CSS ::after produce una DOPPIA freccia. + // Guardato dal vecchio valore → idempotente, non tocca eventuali modifiche del pannello. + const PROMO_FRECCE: [string, string, string][] = [ + ['promo.hero.cta', 'LE NOSTRE PROPOSTE →', 'Le nostre proposte'], + ['promo.buy-label', 'ACQUISTA →', 'Acquista'], + ]; + const updPromoTx = db.transaction(() => { for (const [tag, oldV, newV] of PROMO_FRECCE) upd02.run(newV, tag, oldV); }); + updPromoTx(); + // Modifiche 03: due ingressi dello stesso stabile → indirizzo esteso in footer e contatti. // Il tag global.contact.map-query è nuovo (inserito dal seed); qui si aggiorna solo l'indirizzo // già esistente, se non modificato dal pannello. Idempotente. diff --git a/tests/content-db.test.ts b/tests/content-db.test.ts index 9c47b0d..c2980f0 100644 --- a/tests/content-db.test.ts +++ b/tests/content-db.test.ts @@ -84,6 +84,35 @@ describe('schema content_blocks e ruoli', () => { } }); + it('allinea i bottoni promo col vecchio testo-freccia al seed senza freccia', () => { + const dir = mkdtempSync(join(tmpdir(), 'il-db-promo-')); + const path = join(dir, 'test.db'); + try { + // DB pre-refactor: valori con freccia letterale e maiuscolo (poi spostati nel CSS). + const db1 = createDb(path); + db1.prepare("UPDATE content_blocks SET value = 'LE NOSTRE PROPOSTE →' WHERE tag = 'promo.hero.cta'").run(); + db1.prepare("UPDATE content_blocks SET value = 'ACQUISTA →' WHERE tag = 'promo.buy-label'").run(); + // Riga modificata dal pannello: NON deve essere toccata. + db1.prepare("UPDATE content_blocks SET value = 'Compra ora', updated_by = 'editor' WHERE tag = 'promo.buy-label'").run(); + db1.close(); + + // Riapertura: la migrazione allinea solo le righe rimaste al vecchio default con freccia. + const db2 = createDb(path); + const val = (tag: string) => (db2.prepare('SELECT value FROM content_blocks WHERE tag = ?').get(tag) as { value: string }).value; + expect(val('promo.hero.cta')).toBe('Le nostre proposte'); + // promo.buy-label era stato editato dal pannello → resta invariato. + expect(val('promo.buy-label')).toBe('Compra ora'); + db2.close(); + + // Idempotente: terza apertura non altera. + const db3 = createDb(path); + expect((db3.prepare("SELECT value FROM content_blocks WHERE tag = 'promo.hero.cta'").get() as { value: string }).value).toBe('Le nostre proposte'); + db3.close(); + } finally { + rmSync(dir, { recursive: true, force: true }); + } + }); + it('migra un DB esistente senza colonna role', () => { // simula DB vecchio: createDb due volte sullo stesso path in-memory non è possibile, // quindi si verifica che la migrazione sia idempotente (doppia esecuzione non lancia)