generated from coulomb/repo-seed
Milestone 0 plus the manual-registry spine from Milestone 1
This commit is contained in:
98
tests/test_registry_service.py
Normal file
98
tests/test_registry_service.py
Normal file
@@ -0,0 +1,98 @@
|
||||
from repo_registry.core.service import RegistryService
|
||||
from repo_registry.storage.sqlite import NotFoundError, RegistryStore
|
||||
|
||||
|
||||
def make_service(tmp_path):
|
||||
store = RegistryStore(tmp_path / "registry.sqlite3")
|
||||
store.initialize()
|
||||
return RegistryService(store)
|
||||
|
||||
|
||||
def test_manual_registry_builds_ability_map(tmp_path):
|
||||
service = make_service(tmp_path)
|
||||
|
||||
repository = service.register_repository(
|
||||
name="MailRouter",
|
||||
url="https://example.com/mail-router.git",
|
||||
description="Routes incoming customer email",
|
||||
)
|
||||
ability_id = service.add_ability(
|
||||
repository.id,
|
||||
name="Business Email Routing",
|
||||
description="Route inbound messages to the right department.",
|
||||
confidence=0.92,
|
||||
)
|
||||
capability_id = service.add_capability(
|
||||
repository.id,
|
||||
ability_id,
|
||||
name="Classify Incoming Email",
|
||||
description="Classify messages into intent categories.",
|
||||
inputs=["subject", "body"],
|
||||
outputs=["intent", "confidence"],
|
||||
confidence=0.88,
|
||||
)
|
||||
service.add_feature(
|
||||
repository.id,
|
||||
capability_id,
|
||||
name="POST /api/classify-email",
|
||||
type="REST endpoint",
|
||||
location="src/routes/classify_email.py",
|
||||
confidence=0.84,
|
||||
)
|
||||
service.add_evidence(
|
||||
repository.id,
|
||||
capability_id,
|
||||
type="unit_test",
|
||||
reference="tests/test_email_classification.py",
|
||||
strength="strong",
|
||||
)
|
||||
|
||||
ability_map = service.ability_map(repository.id)
|
||||
|
||||
assert ability_map.repository.name == "MailRouter"
|
||||
assert ability_map.abilities[0].name == "Business Email Routing"
|
||||
capability = ability_map.abilities[0].capabilities[0]
|
||||
assert capability.name == "Classify Incoming Email"
|
||||
assert capability.inputs == ["subject", "body"]
|
||||
assert capability.features[0].location == "src/routes/classify_email.py"
|
||||
assert capability.evidence[0].strength == "strong"
|
||||
|
||||
|
||||
def test_search_matches_approved_abilities_and_capabilities(tmp_path):
|
||||
service = make_service(tmp_path)
|
||||
repository = service.register_repository(
|
||||
name="MailRouter",
|
||||
url="https://example.com/mail-router.git",
|
||||
)
|
||||
ability_id = service.add_ability(
|
||||
repository.id,
|
||||
name="Business Email Routing",
|
||||
description="Route inbound messages.",
|
||||
)
|
||||
service.add_capability(
|
||||
repository.id,
|
||||
ability_id,
|
||||
name="Classify Incoming Email",
|
||||
description="Classify messages into intent categories.",
|
||||
)
|
||||
|
||||
results = service.search("classify")
|
||||
|
||||
assert len(results) == 1
|
||||
assert results[0].repository_name == "MailRouter"
|
||||
assert results[0].match_type == "capability"
|
||||
assert results[0].match_name == "Classify Incoming Email"
|
||||
|
||||
|
||||
def test_capability_must_belong_to_repository(tmp_path):
|
||||
service = make_service(tmp_path)
|
||||
first = service.register_repository(name="First", url="https://example.com/first.git")
|
||||
second = service.register_repository(name="Second", url="https://example.com/second.git")
|
||||
ability_id = service.add_ability(first.id, name="Document Classification")
|
||||
|
||||
try:
|
||||
service.add_capability(second.id, ability_id, name="Classify Document")
|
||||
except NotFoundError as exc:
|
||||
assert "ability" in str(exc)
|
||||
else:
|
||||
raise AssertionError("expected a NotFoundError")
|
||||
Reference in New Issue
Block a user