mirror of https://github.com/home-assistant/core
65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
"""Tests for the Anthropic integration."""
|
|
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
from anthropic import (
|
|
APIConnectionError,
|
|
APITimeoutError,
|
|
AuthenticationError,
|
|
BadRequestError,
|
|
)
|
|
from httpx import URL, Request, Response
|
|
import pytest
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("side_effect", "error"),
|
|
[
|
|
(APIConnectionError(request=None), "Connection error"),
|
|
(APITimeoutError(request=None), "Request timed out"),
|
|
(
|
|
BadRequestError(
|
|
message="Your credit balance is too low to access the Claude API. Please go to Plans & Billing to upgrade or purchase credits.",
|
|
response=Response(
|
|
status_code=400,
|
|
request=Request(method="POST", url=URL()),
|
|
),
|
|
body={"type": "error", "error": {"type": "invalid_request_error"}},
|
|
),
|
|
"anthropic integration not ready yet: Your credit balance is too low to access the Claude API",
|
|
),
|
|
(
|
|
AuthenticationError(
|
|
message="invalid x-api-key",
|
|
response=Response(
|
|
status_code=401,
|
|
request=Request(method="POST", url=URL()),
|
|
),
|
|
body={"type": "error", "error": {"type": "authentication_error"}},
|
|
),
|
|
"Invalid API key",
|
|
),
|
|
],
|
|
)
|
|
async def test_init_error(
|
|
hass: HomeAssistant,
|
|
mock_config_entry: MockConfigEntry,
|
|
caplog: pytest.LogCaptureFixture,
|
|
side_effect,
|
|
error,
|
|
) -> None:
|
|
"""Test initialization errors."""
|
|
with patch(
|
|
"anthropic.resources.messages.AsyncMessages.create",
|
|
new_callable=AsyncMock,
|
|
side_effect=side_effect,
|
|
):
|
|
assert await async_setup_component(hass, "anthropic", {})
|
|
await hass.async_block_till_done()
|
|
assert error in caplog.text
|