37 lines
1.6 KiB
Python
37 lines
1.6 KiB
Python
import sqlite3
|
|
import unittest
|
|
|
|
from backend.app.schema_migrations import run_schema_migrations
|
|
|
|
|
|
class SchemaMigrationTests(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
self.conn = sqlite3.connect(":memory:")
|
|
self.conn.execute(
|
|
"CREATE TABLE users (id INTEGER PRIMARY KEY, username TEXT NOT NULL UNIQUE, password_hash TEXT, role TEXT, created_at TEXT)"
|
|
)
|
|
self.conn.execute(
|
|
"CREATE TABLE signup_invites (id INTEGER PRIMARY KEY, code TEXT NOT NULL UNIQUE, created_at TEXT, updated_at TEXT)"
|
|
)
|
|
self.conn.execute("CREATE TABLE portal_items (id INTEGER PRIMARY KEY, kind TEXT, updated_at TEXT)")
|
|
self.conn.execute("CREATE TABLE requests_cache (request_id INTEGER PRIMARY KEY, created_at TEXT)")
|
|
|
|
def tearDown(self) -> None:
|
|
self.conn.close()
|
|
|
|
def test_migrations_are_versioned_and_idempotent(self) -> None:
|
|
self.assertEqual(run_schema_migrations(self.conn), [1])
|
|
self.assertEqual(run_schema_migrations(self.conn), [])
|
|
|
|
user_columns = {row[1] for row in self.conn.execute("PRAGMA table_info(users)")}
|
|
self.assertIn("auth_version", user_columns)
|
|
self.assertIn("email", user_columns)
|
|
request_columns = {row[1] for row in self.conn.execute("PRAGMA table_info(requests_cache)")}
|
|
self.assertIn("requested_by_id", request_columns)
|
|
applied = self.conn.execute("SELECT version, name FROM schema_migrations").fetchall()
|
|
self.assertEqual(applied, [(1, "legacy_columns_and_indexes")])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|