feat: add schema drift handling and rebuild
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
import os
|
||||
import tempfile
|
||||
import sqlite3
|
||||
|
||||
import backend.db as db_mod
|
||||
|
||||
|
||||
|
||||
def _setup_temp_db_with_m2_schema(tmp_dir: str) -> str:
|
||||
db_path = os.path.join(tmp_dir, "test.db")
|
||||
conn = sqlite3.connect(db_path)
|
||||
# create old settings table
|
||||
conn.execute("CREATE TABLE settings (key TEXT PRIMARY KEY, value TEXT, value_enc TEXT)")
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return db_path
|
||||
|
||||
|
||||
def test_drift_detection_and_rebuild(monkeypatch):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
db_path = _setup_temp_db_with_m2_schema(tmp)
|
||||
monkeypatch.setenv("SLAB_DB_PATH", db_path)
|
||||
# init_db should rebuild
|
||||
conn = db_mod.init_db()
|
||||
# check schema_version exists
|
||||
cur = conn.execute("SELECT version FROM schema_version").fetchone()
|
||||
assert cur is not None
|
||||
assert cur[0] == 1
|
||||
# check settings has columns value and value_enc
|
||||
info = conn.execute("PRAGMA table_info(settings)").fetchall()
|
||||
cols = {row[1] for row in info}
|
||||
assert "value" in cols
|
||||
assert "value_enc" in cols
|
||||
# also ensure old settings table dropped and recreated
|
||||
# no other data
|
||||
rows = conn.execute("SELECT key FROM settings").fetchall()
|
||||
assert rows == []
|
||||
Reference in New Issue
Block a user