88 lines
2.8 KiB
Python
88 lines
2.8 KiB
Python
"""Tests for display render functions and DisplayAdapter."""
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
from rich.panel import Panel
|
|
from rich.table import Table
|
|
from rich.text import Text
|
|
|
|
from app.models.message import Message
|
|
from app.utils.display import (
|
|
DisplayAdapter,
|
|
render_assistant_message,
|
|
render_error,
|
|
render_iteration_header,
|
|
render_tool_call,
|
|
render_tool_result,
|
|
render_token_usage,
|
|
render_user_message,
|
|
render_warning,
|
|
)
|
|
|
|
|
|
class TestRenderFunctions:
|
|
def test_render_user_message_returns_panel(self) -> None:
|
|
result = render_user_message("hello")
|
|
assert isinstance(result, Panel)
|
|
assert result.title == "You"
|
|
|
|
def test_render_assistant_message_returns_panel(self) -> None:
|
|
result = render_assistant_message("response")
|
|
assert isinstance(result, Panel)
|
|
assert result.title == "Assistant"
|
|
|
|
def test_render_tool_call_returns_text(self) -> None:
|
|
result = render_tool_call("read_file", '{"path": "foo.py"}')
|
|
assert isinstance(result, Text)
|
|
assert "read_file" in result.plain
|
|
|
|
def test_render_tool_result_success(self) -> None:
|
|
result = render_tool_result("read_file", "file contents here", is_error=False)
|
|
assert isinstance(result, Text)
|
|
assert "read_file" in result.plain
|
|
|
|
def test_render_tool_result_error(self) -> None:
|
|
result = render_tool_result("read_file", "not found", is_error=True)
|
|
assert isinstance(result, Text)
|
|
assert "read_file" in result.plain
|
|
|
|
def test_render_iteration_header(self) -> None:
|
|
result = render_iteration_header(3, 25)
|
|
assert isinstance(result, Text)
|
|
assert "3/25" in result.plain
|
|
|
|
def test_render_token_usage(self) -> None:
|
|
result = render_token_usage(1500, 32000)
|
|
assert isinstance(result, Text)
|
|
assert "1,500" in result.plain
|
|
|
|
def test_render_warning(self) -> None:
|
|
result = render_warning("something happened")
|
|
assert isinstance(result, Text)
|
|
|
|
def test_render_error(self) -> None:
|
|
result = render_error("bad thing")
|
|
assert isinstance(result, Text)
|
|
|
|
|
|
class TestDisplayAdapter:
|
|
def test_write_user_message(self) -> None:
|
|
mock_log = MagicMock()
|
|
adapter = DisplayAdapter(mock_log)
|
|
adapter.write_user_message("hello")
|
|
mock_log.write.assert_called_once()
|
|
arg = mock_log.write.call_args[0][0]
|
|
assert isinstance(arg, Panel)
|
|
|
|
def test_write_tool_call(self) -> None:
|
|
mock_log = MagicMock()
|
|
adapter = DisplayAdapter(mock_log)
|
|
adapter.write_tool_call("read_file", '{"path": "x"}')
|
|
mock_log.write.assert_called_once()
|
|
|
|
def test_write_warning(self) -> None:
|
|
mock_log = MagicMock()
|
|
adapter = DisplayAdapter(mock_log)
|
|
adapter.write_warning("oops")
|
|
mock_log.write.assert_called_once()
|