test: gate real pgvector corpus lifecycle

This commit is contained in:
2026-07-12 05:22:30 +02:00
parent 9e21cce036
commit 9a9acbd122
4 changed files with 290 additions and 9 deletions
+9 -9
View File
@@ -22,7 +22,7 @@ def test_migrations_are_clean_and_idempotent(database_url):
from tht.cli.vector_migrate_cmd import migrate, migration_status
before = migration_status(database_url)
assert [item.version for item in before.pending] == ["001", "002", "003"]
assert [item.version for item in before.pending] == ["001", "002", "003", "004"]
migrate(database_url)
migrate(database_url)
@@ -30,7 +30,7 @@ def test_migrations_are_clean_and_idempotent(database_url):
status = migration_status(database_url)
assert status.pending == ()
assert status.drifted == ()
assert [item.version for item in status.applied] == ["001", "002", "003"]
assert [item.version for item in status.applied] == ["001", "002", "003", "004"]
def test_schema_matches_direct_adapter_contract(database_url):
@@ -156,7 +156,7 @@ def test_status_json_is_pristine(database_url, monkeypatch):
assert result.exit_code == 0, result.output
assert json.loads(result.stdout) == {
"applied": ["001", "002", "003"],
"applied": ["001", "002", "003", "004"],
"drifted": [],
"pending": [],
}
@@ -249,7 +249,7 @@ def test_hostile_admin_search_path_cannot_shadow_migration_objects(database_url)
with verification.connect() as connection:
assert connection.execute(
text("SELECT count(*) FROM public.tht_vector_migrations")
).scalar_one() == 3
).scalar_one() == 4
assert connection.execute(
text("SELECT count(*) FROM shadow.tht_vector_migrations")
).scalar_one() == 0
@@ -279,10 +279,10 @@ def test_failed_batch_rolls_back_schema_and_ledger(database_url, tmp_path):
from tht.cli.vector_migrate_cmd import MigrationError, migrate, migration_status
migrations = _copy_migrations(tmp_path)
(migrations / "004_first.sql").write_text("CREATE TABLE public.must_rollback (id int);\n")
(migrations / "005_broken.sql").write_text("THIS IS NOT SQL;\n")
(migrations / "005_first.sql").write_text("CREATE TABLE public.must_rollback (id int);\n")
(migrations / "006_broken.sql").write_text("THIS IS NOT SQL;\n")
with pytest.raises(MigrationError, match="005_broken.sql"):
with pytest.raises(MigrationError, match="006_broken.sql"):
migrate(database_url, migrations)
engine = create_engine(database_url)
@@ -290,8 +290,8 @@ def test_failed_batch_rolls_back_schema_and_ledger(database_url, tmp_path):
assert connection.execute(text("SELECT to_regclass('public.must_rollback')")).scalar() is None
engine.dispose()
status = migration_status(database_url, migrations)
assert [item.version for item in status.applied] == ["001", "002", "003"]
assert [item.version for item in status.pending] == ["004", "005"]
assert [item.version for item in status.applied] == ["001", "002", "003", "004"]
assert [item.version for item in status.pending] == ["005", "006"]
def _copy_migrations(tmp_path: Path) -> Path: