mirror of
https://github.com/mcloh/Enterprise-MCP-Service-Bus.git
synced 2026-11-05 22:14:11 +00:00
56 lines
2.0 KiB
Python
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)
|