40 lines
1.9 KiB
Python
40 lines
1.9 KiB
Python
import json
|
|||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
from gewu.domain.operations import OPERATIONS, Transport, catalog_bytes, operations_for
|
||
|
|
|
||
|
|
|
||
|
|
def test_read_http_catalog_contains_no_mutation_operations() -> None:
|
||
|
|
http_operations = operations_for(Transport.HTTP)
|
||
|
|
assert all(not operation.mutates_knowledge for operation in http_operations)
|
||
|
|
assert not {"proposal_submit", "owner_decide"} & {item.name for item in http_operations}
|
||
|
|
|
||
|
|
|
||
|
|
def test_owner_decision_is_separate_from_agent_mcp() -> None:
|
||
|
|
agent_operations = {item.name for item in operations_for(Transport.MCP)}
|
||
|
|
owner_operations = {item.name for item in operations_for(Transport.OWNER_MCP)}
|
||
|
|
assert "owner_decide" not in agent_operations
|
||
|
|
assert owner_operations == {"owner_challenge_get", "owner_diff_get", "owner_decide"}
|
||
|
|
|
||
|
|
|
||
|
|
def test_stdio_connector_has_only_selected_file_operations() -> None:
|
||
|
|
stdio_operations = {item.name for item in operations_for(Transport.STDIO)}
|
||
|
|
assert stdio_operations == {"list_selected_files", "upload_selected_file"}
|
||
|
|
|
||
|
|
|
||
|
|
def test_exported_catalog_matches_the_application_allowlist() -> None:
|
||
|
|
path = Path(__file__).resolve().parents[2] / "schema" / "v1" / "catalog.json"
|
||
|
|
catalog = json.loads(path.read_text(encoding="utf-8"))
|
||
|
|
assert path.read_bytes() == catalog_bytes()
|
||
|
|
names_by_transport = {
|
||
|
|
transport.value: {operation.name for operation in operations_for(transport)}
|
||
|
|
for transport in Transport
|
||
|
|
}
|
||
|
|
entries = {operation["name"]: operation for operation in catalog["operations"]}
|
||
|
|
assert set(entries) == {operation.name for operation in OPERATIONS}
|
||
|
|
for name, entry in entries.items():
|
||
|
|
assert set(entry["transports"]) == {
|
||
|
|
transport for transport, names in names_by_transport.items() if name in names
|
||
|
|
}
|
||
|
|
expected_mutates = next(item.mutates_knowledge for item in OPERATIONS if item.name == name)
|
||
|
|
assert entry["mutates_knowledge"] is expected_mutates
|