generated from coulomb/repo-seed
added fixture breadth and regression coverage
This commit is contained in:
@@ -5,6 +5,13 @@ from repo_registry.llm_extraction import ExtractedAbility, ExtractedCapability
|
||||
from repo_registry.repo_ingestion.git import GitIngestionService
|
||||
from repo_registry.semantic import HashingEmbeddingProvider
|
||||
from repo_registry.storage.sqlite import NotFoundError, RegistryStore
|
||||
from tests.fixtures import (
|
||||
write_empty_repo,
|
||||
write_javascript_typescript_package_repo,
|
||||
write_misleading_docs_repo,
|
||||
write_python_cli_repo,
|
||||
write_readme_only_repo,
|
||||
)
|
||||
|
||||
|
||||
def make_service(tmp_path):
|
||||
@@ -291,6 +298,97 @@ def test_search_filters_by_status_language_and_framework(tmp_path):
|
||||
assert wrong_capability_results == []
|
||||
|
||||
|
||||
def test_fixture_breadth_readme_only_repo_stays_conservative(tmp_path):
|
||||
source = write_readme_only_repo(tmp_path)
|
||||
service = make_service(tmp_path)
|
||||
repository = service.register_repository(name="Readme Only", url=str(source))
|
||||
|
||||
summary = service.analyze_repository(repository.id)
|
||||
graph = service.candidate_graph(repository.id, summary.analysis_run.id)
|
||||
|
||||
assert summary.analysis_run.status == "completed"
|
||||
assert graph.abilities[0].confidence == 0.45
|
||||
assert graph.abilities[0].capabilities == []
|
||||
assert service.ability_map(repository.id).abilities == []
|
||||
|
||||
|
||||
def test_fixture_breadth_python_cli_repo_extracts_reviewable_cli_claims(tmp_path):
|
||||
source = write_python_cli_repo(tmp_path)
|
||||
service = make_service(tmp_path)
|
||||
repository = service.register_repository(name="Python CLI", url=str(source))
|
||||
|
||||
summary = service.analyze_repository(repository.id)
|
||||
graph = service.candidate_graph(repository.id, summary.analysis_run.id)
|
||||
|
||||
capability = graph.abilities[0].capabilities[0]
|
||||
assert summary.analysis_run.status == "completed"
|
||||
assert capability.name == "Expose Repository Interface"
|
||||
assert capability.features[0].type == "CLI"
|
||||
assert capability.features[0].name == "CLI command main"
|
||||
assert capability.evidence[0].reference == "tests/test_cli.py"
|
||||
assert service.ability_map(repository.id).abilities == []
|
||||
|
||||
|
||||
def test_fixture_breadth_javascript_typescript_package_extracts_structure_and_api(tmp_path):
|
||||
source = write_javascript_typescript_package_repo(tmp_path)
|
||||
service = make_service(tmp_path)
|
||||
repository = service.register_repository(name="JS TS Package", url=str(source))
|
||||
|
||||
summary = service.analyze_repository(repository.id)
|
||||
graph = service.candidate_graph(repository.id, summary.analysis_run.id)
|
||||
|
||||
fact_names = {(fact.kind, fact.name, fact.path) for fact in summary.facts}
|
||||
capability_names = {
|
||||
capability.name
|
||||
for ability in graph.abilities
|
||||
for capability in ability.capabilities
|
||||
}
|
||||
feature_types = {
|
||||
feature.type
|
||||
for ability in graph.abilities
|
||||
for capability in ability.capabilities
|
||||
for feature in capability.features
|
||||
}
|
||||
assert ("language", "TypeScript", "") in fact_names
|
||||
assert ("framework", "React", "package.json") in fact_names
|
||||
assert ("framework", "Vitest", "package.json") in fact_names
|
||||
assert "Expose Repository Interface" in capability_names
|
||||
assert "Describe Repository Structure" in capability_names
|
||||
assert "API" in feature_types
|
||||
assert service.ability_map(repository.id).abilities == []
|
||||
|
||||
|
||||
def test_fixture_breadth_misleading_docs_do_not_become_approved_truth(tmp_path):
|
||||
source = write_misleading_docs_repo(tmp_path)
|
||||
service = make_service(tmp_path)
|
||||
repository = service.register_repository(name="Misleading Docs", url=str(source))
|
||||
|
||||
summary = service.analyze_repository(repository.id)
|
||||
graph = service.candidate_graph(repository.id, summary.analysis_run.id)
|
||||
ability_map = service.ability_map(repository.id)
|
||||
|
||||
assert summary.analysis_run.status == "completed"
|
||||
assert graph.abilities[0].confidence == 0.45
|
||||
assert graph.abilities[0].capabilities == []
|
||||
assert ability_map.abilities == []
|
||||
|
||||
|
||||
def test_fixture_breadth_empty_repo_produces_no_candidate_claims(tmp_path):
|
||||
source = write_empty_repo(tmp_path)
|
||||
service = make_service(tmp_path)
|
||||
repository = service.register_repository(name="Empty Repo", url=str(source))
|
||||
|
||||
summary = service.analyze_repository(repository.id)
|
||||
graph = service.candidate_graph(repository.id, summary.analysis_run.id)
|
||||
|
||||
assert summary.analysis_run.status == "completed"
|
||||
assert summary.snapshot is not None
|
||||
assert summary.snapshot.file_count == 0
|
||||
assert summary.facts == []
|
||||
assert graph.abilities == []
|
||||
assert service.ability_map(repository.id).abilities == []
|
||||
|
||||
|
||||
def test_semantic_search_adds_hybrid_matches_without_changing_text_default(tmp_path):
|
||||
source = tmp_path / "repo"
|
||||
source.mkdir()
|
||||
|
||||
Reference in New Issue
Block a user