Files
sillyhome-next-dev/tests/ha/test_ha_client.py

60 lines
1.9 KiB
Python

from __future__ import annotations
from unittest.mock import MagicMock, patch
import pytest
import requests
from app.ha.client import HaClient
from app.ha.exceptions import HaAuthError, HaHttpError, HaTimeoutError, HaUnexpectedPayloadError
from tests.helpers import build_ha_client_settings
@pytest.fixture()
def client():
settings = build_ha_client_settings()
return HaClient(settings)
def test_list_entities_timeout(client):
with patch.object(client._session, "get", side_effect=requests.Timeout("t")):
with pytest.raises(HaTimeoutError):
client.list_entities()
def test_list_entities_auth_error(client):
response = MagicMock()
response.status_code = 401
response.raise_for_status = MagicMock()
with patch.object(client._session, "get", return_value=response):
with pytest.raises(HaAuthError):
client.list_entities()
def test_list_entities_http_error(client):
response = MagicMock()
response.status_code = 502
response.raise_for_status = MagicMock(side_effect=requests.HTTPError("bad"))
with patch.object(client._session, "get", return_value=response):
with pytest.raises(HaHttpError):
client.list_entities()
def test_list_entities_invalid_json(client):
response = MagicMock()
response.status_code = 200
response.raise_for_status = MagicMock()
response.json = MagicMock(side_effect=ValueError("invalid json"))
with patch.object(client._session, "get", return_value=response):
with pytest.raises(HaUnexpectedPayloadError):
client.list_entities()
def test_list_entities_wrong_payload_type(client):
response = MagicMock()
response.status_code = 200
response.raise_for_status = MagicMock()
response.json = MagicMock(return_value={"data": []})
with patch.object(client._session, "get", return_value=response):
with pytest.raises(HaUnexpectedPayloadError):
client.list_entities()