llm-connect/tests/test_adapter.py

78 lines
3.1 KiB
Python
Raw Normal View History

"""
Tests for MockLLMAdapter and ErrorLLMAdapter (Core adapter utilities).
"""
import pytest
from llm_connect.adapter import MockLLMAdapter, ErrorLLMAdapter
from llm_connect.models import RunConfig, LLMResponse
class TestMockLLMAdapter:
def test_returns_mock_response(self, mock_adapter, run_config):
response = mock_adapter.execute_prompt("hello", run_config)
assert response.content == "test response"
def test_returns_llm_response(self, mock_adapter, run_config):
response = mock_adapter.execute_prompt("hello", run_config)
assert isinstance(response, LLMResponse)
def test_call_count_increments(self, mock_adapter, run_config):
assert mock_adapter.call_count == 0
mock_adapter.execute_prompt("a", run_config)
mock_adapter.execute_prompt("b", run_config)
assert mock_adapter.call_count == 2
def test_records_last_prompt(self, mock_adapter, run_config):
mock_adapter.execute_prompt("my prompt", run_config)
assert mock_adapter.last_prompt == "my prompt"
def test_records_last_config(self, mock_adapter, run_config):
mock_adapter.execute_prompt("x", run_config)
assert mock_adapter.last_config is run_config
def test_reset_clears_state(self, mock_adapter, run_config):
mock_adapter.execute_prompt("x", run_config)
mock_adapter.reset()
assert mock_adapter.call_count == 0
assert mock_adapter.last_prompt is None
assert mock_adapter.last_config is None
def test_validate_config_always_true(self, mock_adapter, run_config):
assert mock_adapter.validate_config(run_config) is True
def test_usage_contains_expected_keys(self, mock_adapter, run_config):
response = mock_adapter.execute_prompt("prompt text", run_config)
assert "prompt_tokens" in response.usage
assert "completion_tokens" in response.usage
assert "total_tokens" in response.usage
def test_custom_response_text(self, run_config):
adapter = MockLLMAdapter(mock_response="custom answer")
response = adapter.execute_prompt("q", run_config)
assert response.content == "custom answer"
def test_default_response_text(self, run_config):
adapter = MockLLMAdapter()
response = adapter.execute_prompt("q", run_config)
assert response.content == "Mock LLM response"
def test_metadata_marks_as_mock(self, mock_adapter, run_config):
response = mock_adapter.execute_prompt("q", run_config)
assert response.metadata.get("mock") is True
class TestErrorLLMAdapter:
def test_raises_on_execute(self, run_config):
adapter = ErrorLLMAdapter()
with pytest.raises(RuntimeError):
adapter.execute_prompt("q", run_config)
def test_raises_with_custom_message(self, run_config):
adapter = ErrorLLMAdapter(error_message="boom")
with pytest.raises(RuntimeError, match="boom"):
adapter.execute_prompt("q", run_config)
def test_validate_config_returns_true(self, run_config):
adapter = ErrorLLMAdapter()
assert adapter.validate_config(run_config) is True