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)