Files
cleveragents-core/features/steps/langgraph_dynamic_router_steps.py
T

76 lines
2.3 KiB
Python

"""Behave step definitions for dynamic_router coverage."""
from behave import given, then, when # type: ignore
from behave.runner import Context # type: ignore
from cleveragents.langgraph.dynamic_router import DynamicRouter
from cleveragents.langgraph.nodes import Edge
@given("a dynamic router with no rules")
def step_no_rules(context: Context):
context.router = DynamicRouter()
@given('a dynamic router with a rule targeting "next" and no condition')
def step_rule_no_condition(context: Context):
context.router = DynamicRouter(rules=[{"target": "next"}])
@given(
'a dynamic router with a rule targeting "match_target" when message type is "match"'
)
def step_rule_with_condition_matches(context: Context):
context.router = DynamicRouter(
rules=[
{
"target": "match_target",
"condition": lambda msg: msg.get("type") == "match",
}
]
)
@given(
'a dynamic router with a rule targeting "conditional" when message type is "expected"'
)
def step_rule_with_condition_fails(context: Context):
context.router = DynamicRouter(
rules=[
{
"target": "conditional",
"condition": lambda msg: msg.get("type") == "expected",
}
]
)
@when("I route the message")
def step_route_message(context: Context):
# Parse message from scenario text (provided as JSON-like string)
import json
message_text = context.text.strip() if context.text else "{}"
context.message = json.loads(message_text)
context.result_edges = context.router.route(context.message)
@then("the router should return the default end edge")
def step_assert_default_edge(context: Context):
assert context.result_edges == [Edge(source="start", target="end")]
@then('the router should return a single edge to "next"')
def step_assert_next_edge(context: Context):
assert context.result_edges == [Edge(source="start", target="next")]
@then('the router should return a single edge to "match_target"')
def step_assert_match_edge(context: Context):
assert context.result_edges == [Edge(source="start", target="match_target")]
@then("the router should return the default end edge even when rules do not match")
def step_assert_fallback_edge(context: Context):
assert context.result_edges == [Edge(source="start", target="end")]