infrasynth-backend-kit/tests/test_notifications/test_resolvers.py
2026-08-28 14:38:47 -05:00

81 lines
3 KiB
Python

import pytest
from infrasynth.notifications.resolvers import VariableResolverRegistry
class TestVariableResolverRegistry:
def teardown_method(self):
VariableResolverRegistry._resolvers.clear()
def test_register_via_decorator(self):
@VariableResolverRegistry.register("ticket_number", label="Número")
def resolve(recipient, context, request=None):
return context["ticket_id"]
result = VariableResolverRegistry.resolve("ticket_number", "a@b.com", {"ticket_id": 42})
assert result == 42
def test_register_with_namespace(self):
@VariableResolverRegistry.register("user_name", namespace="helpdesk")
def resolve(recipient, context, request=None):
return "John"
assert VariableResolverRegistry.resolve("user_name", "", {}, namespace="helpdesk") == "John"
def test_namespace_scoped_resolver_not_global(self):
@VariableResolverRegistry.register("only_ns", namespace="helpdesk")
def resolve(recipient, context, request=None):
return "x"
assert VariableResolverRegistry.resolve("only_ns", "", {}) is None
def test_namespace_priority_over_global(self):
@VariableResolverRegistry.register("price", namespace="helpdesk")
def ns_resolve(recipient, context, request=None):
return "ns"
@VariableResolverRegistry.register("price")
def global_resolve(recipient, context, request=None):
return "global"
result = VariableResolverRegistry.resolve("price", "", {}, namespace="helpdesk")
assert result == "ns"
def test_unknown_variable_returns_none(self):
assert VariableResolverRegistry.resolve("nope", "", {}) is None
def test_resolver_exception_propagates(self):
@VariableResolverRegistry.register("boom")
def resolve(recipient, context, request=None):
raise ValueError("boom")
with pytest.raises(ValueError, match="boom"):
VariableResolverRegistry.resolve("boom", "", {})
def test_get_available_variables(self):
@VariableResolverRegistry.register("a", label="A var", namespace="ns1")
def resolve_a(recipient, context, request=None):
return 1
@VariableResolverRegistry.register("b", label="B var", namespace="ns2")
def resolve_b(recipient, context, request=None):
return 2
ns1 = VariableResolverRegistry.get_available_variables("ns1")
assert "ns1:a" in ns1
assert "ns2:b" not in ns1
assert ns1["ns1:a"]["label"] == "A var"
def test_get_available_variables_all(self):
@VariableResolverRegistry.register("x", namespace="n1")
def resolve_x(recipient, context, request=None):
return 1
all_vars = VariableResolverRegistry.get_available_variables()
assert "n1:x" in all_vars
def test_register_returns_function(self):
def fn(recipient, context, request=None):
return 1
assert VariableResolverRegistry.register("y")(fn) is fn