#!/usr/bin/env python3 """Offline SQLite regression for additive admin preset migration and 16-slot upsert.""" from pathlib import Path import sqlite3 ROOT = Path(__file__).resolve().parents[2] all_scripts = sorted((ROOT / 'migrations').glob('*.sql')) assert [p.name for p in all_scripts][-1] == '0010_dashboard_presets.sql' con = sqlite3.connect(':memory:') con.execute('PRAGMA foreign_keys = ON') for _ in range(2): for script in all_scripts: con.executescript(script.read_text()) con.execute("INSERT INTO administrator(id,username,password_hash,generation,created_at) VALUES(1,'owner','hash',1,0)") con.execute("INSERT INTO admin_preferences(administrator_id,document) VALUES(1,'{}')") upsert = ''' INSERT INTO dashboard_presets(administrator_id, name, document, updated_at) SELECT a.id, ?, ?, ? FROM administrator a WHERE a.id = 1 AND a.username = ? AND ((SELECT count(*) FROM dashboard_presets WHERE administrator_id = a.id) < 16 OR EXISTS(SELECT 1 FROM dashboard_presets WHERE administrator_id = a.id AND name = ?)) ON CONFLICT(administrator_id, name) DO UPDATE SET document = excluded.document, updated_at = excluded.updated_at ''' for i in range(16): name = f'Preset {i}' assert con.execute(upsert, (name,'{}',i,'owner',name)).rowcount == 1 assert con.execute(upsert, ('Overflow','{}',16,'owner','Overflow')).rowcount == 0 assert con.execute(upsert, ('Preset 0','{"changed":true}',17,'owner','Preset 0')).rowcount == 1 assert con.execute(upsert, ('Other account','{}',18,'intruder','Other account')).rowcount == 0 assert con.execute('SELECT count(*) FROM dashboard_presets').fetchone()[0] == 16 assert con.execute('SELECT document FROM dashboard_presets WHERE name="Preset 0"').fetchone()[0] == '{"changed":true}' assert con.execute('UPDATE OR IGNORE dashboard_presets SET name=? WHERE name=?', ('Preset 1','Preset 0')).rowcount == 0 assert con.execute('UPDATE OR IGNORE dashboard_presets SET name=? WHERE name=?', ('Renamed','Preset 0')).rowcount == 1 con.execute('DELETE FROM administrator WHERE id=1') assert con.execute('SELECT count(*) FROM dashboard_presets').fetchone()[0] == 0 assert con.execute('SELECT count(*) FROM admin_preferences').fetchone()[0] == 0 print('PASS SQLite migrations repeated, named-preset CRUD, cap, account ownership and cascade')