Files
cleveragents-core/tests/features/steps/template_rendering_steps.py
T

90 lines
3.2 KiB
Python

from behave import given
from behave import then
from behave import when
from cleveragents.core.exceptions import TemplateError
from cleveragents.templates.renderer import TemplateEngine
from cleveragents.templates.renderer import TemplateRenderer
@given('a template renderer with "{engine}" engine')
def step_impl(context, engine):
if engine == "simple":
context.renderer = TemplateRenderer(TemplateEngine.SIMPLE)
elif engine == "jinja2":
try:
context.renderer = TemplateRenderer(TemplateEngine.JINJA2)
except TemplateError:
context.renderer = TemplateRenderer(TemplateEngine.SIMPLE)
elif engine == "mustache":
try:
context.renderer = TemplateRenderer(TemplateEngine.MUSTACHE)
except TemplateError:
context.renderer = TemplateRenderer(TemplateEngine.SIMPLE)
else:
raise ValueError(f"Unknown engine: {engine}")
@when("I register and render a template with context data")
def step_impl(context):
context.template_name = "test_template"
context.template_content = "Hello, {name}! Welcome to {project}."
context.renderer.register_template(context.template_name, context.template_content)
context.context_data = {"name": "User", "project": "CleverAgents"}
context.rendered = context.renderer.render(
context.template_name, context.context_data
)
@then("the template should be rendered correctly")
def step_impl(context):
expected = "Hello, User! Welcome to CleverAgents."
assert context.rendered == expected
@when("I try to render a template with invalid context")
def step_impl(context):
context.template_name = "test_template"
context.template_content = "Hello, {name}! Welcome to {project}."
context.renderer.register_template(context.template_name, context.template_content)
context.context_data = {"name": "User"}
try:
context.rendered = context.renderer.render(
context.template_name, context.context_data
)
context.error = None
except Exception as e:
context.error = e
@when("I register multiple templates")
def step_impl(context):
context.templates = {
"greeting": "Hello, {name}!",
"farewell": "Goodbye, {name}!",
"welcome": "Welcome to {project}, {name}!",
}
for name, content in context.templates.items():
context.renderer.register_template(name, content)
context.context_data = {"name": "User", "project": "CleverAgents"}
@then("I should be able to render each template correctly")
def step_impl(context):
for name, content in context.templates.items():
rendered = context.renderer.render(name, context.context_data)
expected = content.format(**context.context_data)
assert rendered == expected
@then("an appropriate template error should be raised")
def step_impl(context):
# Check that an error was raised and it's the right type
assert context.error is not None, "No error was captured in the context"
# For template rendering, we expect a TemplateError or KeyError
from cleveragents.core.exceptions import TemplateError
assert isinstance(
context.error, (TemplateError, KeyError)
), f"Expected TemplateError or KeyError but got {type(context.error).__name__}"