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"})