29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
from pathlib import Path
|
|
|
|
import pytest
|
|
from alembic.config import Config
|
|
from alembic.script import ScriptDirectory
|
|
|
|
from ai_platform.bootstrap.app import _current_migration_heads, validate_migration_heads
|
|
|
|
|
|
def test_startup_migration_heads_come_from_alembic_metadata():
|
|
project_root = Path(__file__).resolve().parents[1]
|
|
config = Config(str(project_root / "alembic.ini"))
|
|
config.set_main_option("path_separator", "os")
|
|
config.set_main_option("script_location", str(project_root / "migrations"))
|
|
expected_heads = frozenset(ScriptDirectory.from_config(config).get_heads())
|
|
|
|
assert _current_migration_heads() == expected_heads
|
|
validate_migration_heads(expected_heads)
|
|
|
|
|
|
def test_startup_rejects_missing_applied_migration_heads():
|
|
with pytest.raises(RuntimeError, match="migrations are missing or not at head"):
|
|
validate_migration_heads(frozenset())
|
|
|
|
|
|
def test_startup_rejects_stale_applied_migration_heads():
|
|
with pytest.raises(RuntimeError, match="migrations are missing or not at head"):
|
|
validate_migration_heads({"stale-head"})
|