forked from cleveragents/cleveragents-core
90 lines
3.2 KiB
Python
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__}"
|