""" 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