81 lines
3 KiB
Python
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
|