From 8538e0b6fc6ca95fbe5c218cbc02e2dc74ae58f0 Mon Sep 17 00:00:00 2001 From: tegwick Date: Sun, 26 Apr 2026 02:38:59 +0200 Subject: [PATCH] explicit migration/storage coverage --- tests/test_storage_migrations.py | 78 ++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 tests/test_storage_migrations.py diff --git a/tests/test_storage_migrations.py b/tests/test_storage_migrations.py new file mode 100644 index 0000000..31a6695 --- /dev/null +++ b/tests/test_storage_migrations.py @@ -0,0 +1,78 @@ +import sqlite3 + +from repo_registry.core.service import RegistryService +from repo_registry.repo_ingestion.git import GitIngestionService +from repo_registry.storage.sqlite import RegistryStore + + +def make_service(tmp_path): + store = RegistryStore(tmp_path / "registry.sqlite3") + store.initialize() + return RegistryService(store, ingestion=GitIngestionService(tmp_path / "checkouts")) + + +def test_initialize_is_idempotent_and_applies_expected_columns(tmp_path): + database_path = tmp_path / "registry.sqlite3" + store = RegistryStore(database_path) + + store.initialize() + store.initialize() + + with sqlite3.connect(database_path) as connection: + feature_columns = { + row[1] for row in connection.execute("PRAGMA table_info(approved_features)") + } + evidence_columns = { + row[1] for row in connection.execute("PRAGMA table_info(approved_evidence)") + } + + assert "source_refs" in feature_columns + assert "source_refs" in evidence_columns + + +def test_delete_repository_cascades_registry_and_review_rows(tmp_path): + service = make_service(tmp_path) + repository = service.register_repository( + name="Cascade", + url="https://example.com/cascade.git", + description="Cascade fixture.", + ) + ability_id = service.add_ability(repository.id, name="Cascade Ability") + capability_id = service.add_capability( + repository.id, + ability_id, + name="Cascade Capability", + ) + service.add_feature( + repository.id, + capability_id, + name="Cascade Feature", + type="API", + ) + service.add_evidence( + repository.id, + capability_id, + type="test", + reference="tests/test_cascade.py", + ) + run = service.store.create_analysis_run(repository.id) + service.store.create_review_decision( + repository.id, + run.id, + action="manual_test", + notes="Cascade review decision.", + ) + + service.delete_repository(repository.id) + + with service.store.connect() as connection: + for table in ( + "approved_abilities", + "approved_capabilities", + "approved_features", + "approved_evidence", + "analysis_runs", + "review_decisions", + ): + count = connection.execute(f"SELECT COUNT(*) FROM {table}").fetchone()[0] + assert count == 0, table