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

77 lines
2.5 KiB
Python

import io
import sys
from unittest.mock import patch
from behave import given
from behave import then
from behave import when
from cleveragents.agents.base import Agent
from cleveragents.interactive.commands import execute_command
from cleveragents.interactive.commands import format_help_text
from cleveragents.interactive.commands import parse_command
from cleveragents.interactive.session import InteractiveSession
from cleveragents.routing.router import Router
from cleveragents.templates.renderer import TemplateRenderer
class MockAgent(Agent):
async def process(self, message, context=None):
return f"Response to: {message}"
def get_capabilities(self):
return ["mock"]
@given("an interactive session is active")
def step_impl(context):
context.template_renderer = TemplateRenderer()
agent = MockAgent("test_agent", {}, context.template_renderer)
context.router = Router("test_router", {"agent": agent}, context.template_renderer)
context.session = InteractiveSession(
routers={"test_router": context.router}, initial_route_name="test_router"
)
@when('I enter the "{command}" command')
def step_impl(context, command):
context.stdout = io.StringIO()
with patch("sys.stdout", context.stdout):
if command.startswith("/"):
context.continue_session = context.session.process_command(command)
else:
context.parsed_command = parse_command(command)
context.command_result = execute_command(context.parsed_command)
@then("I should see the help information")
def step_impl(context):
output = context.stdout.getvalue()
assert "Available Commands:" in output
assert "/help" in output
assert "/exit" in output
@given("an interactive session with some history")
def step_impl(context):
context.template_renderer = TemplateRenderer()
agent = MockAgent("test_agent", {}, context.template_renderer)
context.router = Router("test_router", {"agent": agent}, context.template_renderer)
context.session = InteractiveSession(
routers={"test_router": context.router}, initial_route_name="test_router"
)
context.session.add_to_history("user", "Hello")
context.session.add_to_history("assistant", "Hi there!")
@then("I should see the conversation history")
def step_impl(context):
output = context.stdout.getvalue()
assert "You: Hello" in output
assert "Agent: Hi there!" in output
@then("the session should end")
def step_impl(context):
assert context.continue_session is False