forked from cleveragents/cleveragents-core
91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
"""Behave steps for reactive_registry_adapter coverage."""
|
|
|
|
from types import SimpleNamespace
|
|
|
|
from behave import given, then, when
|
|
|
|
from cleveragents.application.reactive_registry_adapter import register_registry_agents
|
|
from cleveragents.reactive.stream_router import ReactiveStreamRouter
|
|
|
|
|
|
@given("a reactive stream router and route bridge")
|
|
def step_setup_router_and_bridge(context):
|
|
context.stream_router = ReactiveStreamRouter()
|
|
context.route_bridge = SimpleNamespace(agents={"seed": "sentinel"})
|
|
|
|
|
|
@given("an actor registry that raises on list")
|
|
def step_registry_raises(context):
|
|
class FailingRegistry:
|
|
def list_actors(self):
|
|
raise RuntimeError("list failed")
|
|
|
|
context.actor_registry = FailingRegistry()
|
|
|
|
|
|
@given("an actor registry with mixed capabilities")
|
|
def step_registry_mixed(context):
|
|
class DummyActor:
|
|
def __init__(self, name: str, sync: bool = False, async_capable: bool = False):
|
|
self.name = name
|
|
if sync:
|
|
self.process_message_sync = (
|
|
lambda content, metadata: f"{name}:{content}"
|
|
)
|
|
if async_capable:
|
|
self.process_message = lambda content, metadata: f"{name}:{content}"
|
|
|
|
context.actor_registry = SimpleNamespace(
|
|
list_actors=lambda: [
|
|
DummyActor("sync_actor", sync=True),
|
|
DummyActor("async_actor", async_capable=True),
|
|
DummyActor("plain_actor"),
|
|
]
|
|
)
|
|
|
|
|
|
@given("an actor registry that returns actors without names")
|
|
def step_registry_missing_names(context):
|
|
context.actor_registry = SimpleNamespace(list_actors=lambda: [object()])
|
|
|
|
|
|
@given("an actor registry that returns none")
|
|
def step_registry_returns_none(context):
|
|
context.actor_registry = SimpleNamespace(list_actors=lambda: None)
|
|
|
|
|
|
@when("I register registry actors with the adapter")
|
|
def step_register_actors(context):
|
|
register_registry_agents(
|
|
context.stream_router, context.route_bridge, context.actor_registry
|
|
)
|
|
|
|
|
|
@then("no agents are registered")
|
|
def step_assert_no_agents(context):
|
|
assert context.stream_router.agents == {}
|
|
|
|
|
|
@then("the route bridge agents remain unchanged")
|
|
def step_assert_bridge_unchanged(context):
|
|
assert context.route_bridge.agents == {"seed": "sentinel"}
|
|
|
|
|
|
@then("only actors with processing are registered on the stream router")
|
|
def step_assert_registered_processing(context):
|
|
assert set(context.stream_router.agents.keys()) == {"sync_actor", "async_actor"}
|
|
|
|
|
|
@then("the route bridge agents cache includes all listed actors")
|
|
def step_assert_bridge_cache(context):
|
|
assert set(context.route_bridge.agents.keys()) == {
|
|
"sync_actor",
|
|
"async_actor",
|
|
"plain_actor",
|
|
}
|
|
|
|
|
|
@then("the route bridge agents cache is cleared")
|
|
def step_assert_bridge_cleared(context):
|
|
assert context.route_bridge.agents == {}
|