Files
RustBox/tests/test_fresh_sqlite_migrations.py
T
Mateusz Gruszczyński 425ea7449b
RustBox CI / rustbox (push) Canceled after 0s
v0.1.0
2026-10-30 17:22:17 +01:00

33 lines
1.4 KiB
Python

from pathlib import Path
import sqlite3
ROOT = Path(__file__).resolve().parents[1]
def test_all_user_sqlite_migrations_apply_on_fresh_database(tmp_path):
db_path = tmp_path / "user.sqlite"
conn = sqlite3.connect(db_path)
migrations = sorted((ROOT / "migrations/sqlite").glob("V*.sql"))
user_migrations = [m for m in migrations if m.name != "V047__sessions.sql"]
assert len(user_migrations) == 46
for migration in user_migrations:
conn.executescript(migration.read_text())
version = int(migration.name[1:4])
conn.execute(f"PRAGMA user_version = {version}")
assert conn.execute("PRAGMA user_version").fetchone()[0] == 46
tables = {row[0] for row in conn.execute("SELECT name FROM sqlite_master WHERE type='table'")}
assert {"user_meta", "folders", "messages", "drafts", "contacts"} <= tables
assert "sessions" not in tables
conn.close()
def test_session_sqlite_migration_is_separate_and_valid(tmp_path):
db_path = tmp_path / "rustbox.sqlite"
conn = sqlite3.connect(db_path)
conn.executescript((ROOT / "migrations/sqlite/V047__sessions.sql").read_text())
tables = {row[0] for row in conn.execute("SELECT name FROM sqlite_master WHERE type='table'")}
indexes = {row[0] for row in conn.execute("SELECT name FROM sqlite_master WHERE type='index'")}
assert "sessions" in tables
assert {"idx_sessions_browser", "idx_sessions_user", "idx_sessions_expiry"} <= indexes
conn.close()