33 lines
1.4 KiB
Python
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()
|