Files
Enterprise-MCP-Service-Bus/RI/tests/unit/test_agent_runtime_identity_resolver.py
2026-09-14 10:11:29 -03:00

56 lines
2.0 KiB
Python

"""Identity Resolver / BusinessContext (EP-12-T04, ADR-022, ADR-023)."""
from __future__ import annotations
from pathlib import Path
from emcp_bus.agent_runtime.identity_resolver import IdentityResolver, IdentityResolverConfig
from emcp_bus.common.config import load_yaml_model
REPO_ROOT = Path(__file__).parents[2]
IDENTITY_YAML = REPO_ROOT / "config" / "orchestrator" / "identity.yaml"
def test_resolve_maps_a_declared_alias_to_its_canonical_key() -> None:
resolver = IdentityResolver(IdentityResolverConfig(aliases={"msisdn": "customer_key"}))
result = resolver.resolve({"msisdn": "+5511999999999"})
assert result == {"customer_key": "+5511999999999"}
def test_resolve_passes_through_unaliased_keys_unchanged() -> None:
resolver = IdentityResolver(IdentityResolverConfig(aliases={"msisdn": "customer_key"}))
result = resolver.resolve({"amount": 100})
assert result == {"amount": 100}
def test_the_real_seed_identity_yaml_validates_and_resolves_msisdn() -> None:
config = load_yaml_model(IDENTITY_YAML, IdentityResolverConfig)
resolver = IdentityResolver(config)
result = resolver.resolve({"msisdn": "+5511999999999"})
assert result == {"customer_key": "+5511999999999"}
def test_identity_resolver_module_never_imports_pdp_or_entitlement() -> None:
"""ADR-023's guardrail, made mechanically checkable: this module must
never gain a dependency on the authorization path."""
import ast
import emcp_bus.agent_runtime.identity_resolver as module
source = Path(module.__file__).read_text(encoding="utf-8")
imported_modules = set()
for node in ast.walk(ast.parse(source)):
if isinstance(node, ast.ImportFrom) and node.module:
imported_modules.add(node.module)
elif isinstance(node, ast.Import):
imported_modules.update(alias.name for alias in node.names)
assert not any(name.startswith("emcp_bus.pdp") for name in imported_modules)
assert not any(name.startswith("emcp_bus.entitlement") for name in imported_modules)