"""Tests for LLM error mapping helpers.""" from deeptutor.services.llm.error_mapping import map_error from deeptutor.services.llm.exceptions import ( LLMAPIError, LLMAuthenticationError, LLMRateLimitError, ProviderContextWindowError, ) class DummyError(Exception): """Custom error used for mapping tests.""" def __init__(self, message: str, status_code: int | None = None) -> None: super().__init__(message) self.status_code = status_code def test_map_error_status_code_auth() -> None: """401 errors should map to authentication failures.""" mapped = map_error(DummyError("auth failed", status_code=401), provider="openai") assert isinstance(mapped, LLMAuthenticationError) def test_map_error_status_code_rate_limit() -> None: """429 errors should map to rate limit failures.""" mapped = map_error(DummyError("rate limited", status_code=429), provider="openai") assert isinstance(mapped, LLMRateLimitError) def test_map_error_message_context_window() -> None: """Context length errors should map to the provider context window error.""" mapped = map_error(DummyError("maximum context length exceeded"), provider="openai") assert isinstance(mapped, ProviderContextWindowError) def test_map_error_falls_back_to_api_error() -> None: """Unknown errors should fall back to generic API error mapping.""" mapped = map_error(DummyError("boom", status_code=500), provider="openai") assert isinstance(mapped, LLMAPIError) assert mapped.status_code == 500