generated from coulomb/repo-seed
Cross repo isolation
This commit is contained in:
100
tests/test_cli.py
Normal file
100
tests/test_cli.py
Normal file
@@ -0,0 +1,100 @@
|
||||
import pytest
|
||||
|
||||
from repo_registry.cli import main
|
||||
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 write_repo(tmp_path):
|
||||
source = tmp_path / "repo"
|
||||
source.mkdir()
|
||||
(source / "README.md").write_text("# CLI Rebuild\nReports health.\n", encoding="utf-8")
|
||||
(source / "app.py").write_text('@app.get("/health")\ndef health():\n return {}\n', encoding="utf-8")
|
||||
return source
|
||||
|
||||
|
||||
def approved_repository(tmp_path):
|
||||
service = make_service(tmp_path)
|
||||
source = write_repo(tmp_path)
|
||||
repository = service.register_repository(name="CLI Rebuild", url=str(source))
|
||||
summary = service.analyze_repository(repository.id, use_llm_assistance=False)
|
||||
service.approve_candidate_graph(repository.id, summary.analysis_run.id)
|
||||
return service, repository
|
||||
|
||||
|
||||
def test_rebuild_cli_dry_run_preserves_approved_characteristics(tmp_path, capsys):
|
||||
service, repository = approved_repository(tmp_path)
|
||||
|
||||
exit_code = main(
|
||||
[
|
||||
"rebuild-characteristics",
|
||||
"--repo",
|
||||
str(repository.id),
|
||||
"--dry-run",
|
||||
"--no-llm",
|
||||
"--database-path",
|
||||
str(tmp_path / "registry.sqlite3"),
|
||||
"--checkout-root",
|
||||
str(tmp_path / "checkouts"),
|
||||
]
|
||||
)
|
||||
|
||||
output = capsys.readouterr().out
|
||||
assert exit_code == 0
|
||||
assert "repo=1:CLI Rebuild" in output
|
||||
assert "latest_analysis_run=2" in output
|
||||
assert "candidate_source=deterministic" in output
|
||||
assert "dry_run=True" in output
|
||||
assert "cleared_approved=False" in output
|
||||
assert service.ability_map(repository.id).abilities
|
||||
|
||||
|
||||
def test_rebuild_cli_confirmed_single_repo_clears_approved_characteristics(tmp_path, capsys):
|
||||
_service, repository = approved_repository(tmp_path)
|
||||
|
||||
exit_code = main(
|
||||
[
|
||||
"rebuild-characteristics",
|
||||
"--repo",
|
||||
str(repository.id),
|
||||
"--no-llm",
|
||||
"--confirm",
|
||||
"--database-path",
|
||||
str(tmp_path / "registry.sqlite3"),
|
||||
"--checkout-root",
|
||||
str(tmp_path / "checkouts"),
|
||||
]
|
||||
)
|
||||
|
||||
service = make_service(tmp_path)
|
||||
output = capsys.readouterr().out
|
||||
assert exit_code == 0
|
||||
assert "dry_run=False" in output
|
||||
assert "cleared_approved=True" in output
|
||||
assert service.ability_map(repository.id).abilities == []
|
||||
|
||||
|
||||
def test_rebuild_cli_refuses_destructive_all_without_confirm_all(tmp_path):
|
||||
approved_repository(tmp_path)
|
||||
|
||||
with pytest.raises(SystemExit) as exc:
|
||||
main(
|
||||
[
|
||||
"rebuild-characteristics",
|
||||
"--all",
|
||||
"--confirm",
|
||||
"--database-path",
|
||||
str(tmp_path / "registry.sqlite3"),
|
||||
"--checkout-root",
|
||||
str(tmp_path / "checkouts"),
|
||||
]
|
||||
)
|
||||
|
||||
assert exc.value.code == 2
|
||||
Reference in New Issue
Block a user