"""AC-5: alembic head is `0001_initial` and schema matches data_model.md § 2. The migration is verified by inspecting the head revision and the upgrade script's table/column declarations. We do NOT spin up Postgres here — that's covered by integration tests; this is a Tier-1 unit check that the migration metadata is correctly wired. """ from __future__ import annotations import os import re from pathlib import Path import pytest from alembic import script as alembic_script from alembic.config import Config REPO_ROOT = Path(__file__).resolve().parents[2] MIGRATION_BODY = (REPO_ROOT / "db" / "migrations" / "versions" / "0001_initial.py").read_text() def test_head_revision_matches_latest_migration() -> None: """Asserts the Alembic head tracks the latest migration on disk. AZ-263 originally pinned this to ``0001_initial``; AZ-304 advanced the head to ``0002_c6_tile_identity_and_lru`` (additive on AZ-263 — see ``_docs/02_tasks/todo/AZ-304_c6_postgres_schema.md``). AZ-320 added ``0003_c11_upload_attempts`` (additive — adds the ``tiles.upload_attempts`` counter and widens the ``ck_tiles_voting_status`` constraint to admit ``upload_giveup``). Future migrations update this assertion in lockstep with the new head. """ # Arrange cwd = os.getcwd() os.chdir(REPO_ROOT) try: cfg = Config(str(REPO_ROOT / "alembic.ini")) sc = alembic_script.ScriptDirectory.from_config(cfg) # Act heads = sc.get_heads() finally: os.chdir(cwd) # Assert assert list(heads) == ["0003_c11_upload_attempts"], f"unexpected heads: {heads}" @pytest.mark.parametrize( "table", [ "tiles", "flights", "sector_classifications", "manifests", "engine_cache_entries", ], ) def test_initial_migration_declares_table(table: str) -> None: # Assert — tolerate multi-line `op.create_table(\n "