"""Additive v4 -> v5 migration, not a running managed DB.""" import json,sqlite3 from pathlib import Path from aim_webgui.db.store import Store def test_schema4_history_and_accounts_preserved_old_work_stopped_once(tmp_path): state=tmp_path/'state';state.mkdir(mode=0o700);path=state/'webgui.sqlite3';path.touch(mode=0o600) directory=Path(__import__('aim_webgui.db.store',fromlist=['x']).__file__).parent/'migrations' db=sqlite3.connect(path) for version in range(1,5):db.executescript(next(directory.glob(f'{version:04d}_*.sql')).read_text()) db.execute('PRAGMA user_version=4') db.execute("INSERT INTO users(username,password_hash,role,enabled,must_change_password,created_at,updated_at) VALUES('admin','SYNTHETIC-only','admin',1,0,1,1)") user=db.execute('SELECT id FROM users').fetchone()[0] db.execute("INSERT INTO metadata VALUES('initialized','1')") for status in ('successful','failed','blocked','interrupted','queued','pending','running'): db.execute('INSERT INTO jobs(id,owner_id,status,plan,created_at,scheduled_at,mode,core_result) VALUES(?,?,?,?,?,?,?,?)', (status,user,status,'{"targets":["fixture.example"]}',1,1,'apply','{"fixture":"keep"}' if status=='successful' else None)) db.commit();db.close() store=Store(path);store.migrate();store.migrate();store.check() with store.read()as db: assert db.execute('PRAGMA user_version').fetchone()[0]==5 assert db.execute('SELECT password_hash FROM users').fetchone()[0]=='SYNTHETIC-only' assert dict(db.execute('SELECT id,status FROM jobs'))=={k:('blocked' if k in ('queued','pending') else 'interrupted' if k=='running' else k)for k in ('successful','failed','blocked','interrupted','queued','pending','running')} assert db.execute("SELECT core_result FROM jobs WHERE id='successful'").fetchone()[0]=='{"fixture":"keep"}' assert db.execute("SELECT COUNT(*) FROM audit WHERE action='core33-job-stopped'").fetchone()[0]==3 assert db.execute('SELECT COUNT(*) FROM job_progress_events').fetchone()[0]==0 assert db.execute('SELECT COUNT(*) FROM job_operation_reports').fetchone()[0]==0 backup=tmp_path/'schema5-backup';store.backup(backup) with sqlite3.connect(backup)as db:assert db.execute('PRAGMA user_version').fetchone()[0]==5