b11e1a554f
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
30 lines
1.0 KiB
Python
30 lines
1.0 KiB
Python
import sqlite3
|
|
import importlib
|
|
|
|
|
|
def _columns(db_file):
|
|
conn = sqlite3.connect(db_file)
|
|
cols = {r[1] for r in conn.execute("PRAGMA table_info(projects)")}
|
|
conn.close()
|
|
return cols
|
|
|
|
|
|
def test_migration_adds_columns_and_is_idempotent(tmp_path, monkeypatch):
|
|
db_file = tmp_path / "seismo_fleet.db"
|
|
conn = sqlite3.connect(db_file)
|
|
conn.execute("CREATE TABLE projects (id TEXT PRIMARY KEY, name TEXT)")
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
monkeypatch.chdir(tmp_path) # migration resolves data/ relative to cwd
|
|
(tmp_path / "data").mkdir()
|
|
(tmp_path / "data" / "seismo_fleet.db").write_bytes(db_file.read_bytes())
|
|
|
|
mod = importlib.import_module("backend.migrate_add_project_portal_auth")
|
|
mod.migrate()
|
|
cols = _columns(tmp_path / "data" / "seismo_fleet.db")
|
|
assert {"portal_enabled", "portal_password_hash", "portal_link_token"} <= cols
|
|
|
|
mod.migrate() # second run must not raise
|
|
assert {"portal_enabled", "portal_password_hash", "portal_link_token"} <= _columns(tmp_path / "data" / "seismo_fleet.db")
|