2023-12-09 22:46:32 +00:00
|
|
|
"""Tessie common helpers for tests."""
|
|
|
|
|
2023-12-22 02:40:55 +00:00
|
|
|
from contextlib import contextmanager
|
2023-12-09 22:46:32 +00:00
|
|
|
from http import HTTPStatus
|
2023-12-22 02:40:55 +00:00
|
|
|
from unittest.mock import AsyncMock, patch
|
2023-12-09 22:46:32 +00:00
|
|
|
|
|
|
|
from aiohttp import ClientConnectionError, ClientResponseError
|
|
|
|
from aiohttp.client import RequestInfo
|
|
|
|
|
|
|
|
from homeassistant.components.tessie.const import DOMAIN
|
|
|
|
from homeassistant.const import CONF_ACCESS_TOKEN
|
|
|
|
from homeassistant.core import HomeAssistant
|
2023-12-22 02:40:55 +00:00
|
|
|
from homeassistant.helpers.entity import EntityDescription
|
2023-12-09 22:46:32 +00:00
|
|
|
|
|
|
|
from tests.common import MockConfigEntry, load_json_object_fixture
|
|
|
|
|
|
|
|
TEST_STATE_OF_ALL_VEHICLES = load_json_object_fixture("vehicles.json", DOMAIN)
|
|
|
|
TEST_VEHICLE_STATE_ONLINE = load_json_object_fixture("online.json", DOMAIN)
|
|
|
|
TEST_VEHICLE_STATE_ASLEEP = load_json_object_fixture("asleep.json", DOMAIN)
|
2023-12-16 04:56:38 +00:00
|
|
|
TEST_RESPONSE = {"result": True}
|
2023-12-09 22:46:32 +00:00
|
|
|
|
|
|
|
TEST_CONFIG = {CONF_ACCESS_TOKEN: "1234567890"}
|
|
|
|
TESSIE_URL = "https://api.tessie.com/"
|
|
|
|
|
|
|
|
TEST_REQUEST_INFO = RequestInfo(
|
|
|
|
url=TESSIE_URL, method="GET", headers={}, real_url=TESSIE_URL
|
|
|
|
)
|
|
|
|
|
|
|
|
ERROR_AUTH = ClientResponseError(
|
|
|
|
request_info=TEST_REQUEST_INFO, history=None, status=HTTPStatus.UNAUTHORIZED
|
|
|
|
)
|
|
|
|
ERROR_TIMEOUT = ClientResponseError(
|
|
|
|
request_info=TEST_REQUEST_INFO, history=None, status=HTTPStatus.REQUEST_TIMEOUT
|
|
|
|
)
|
|
|
|
ERROR_UNKNOWN = ClientResponseError(
|
|
|
|
request_info=TEST_REQUEST_INFO, history=None, status=HTTPStatus.BAD_REQUEST
|
|
|
|
)
|
2023-12-22 09:17:23 +00:00
|
|
|
ERROR_VIRTUAL_KEY = ClientResponseError(
|
|
|
|
request_info=TEST_REQUEST_INFO,
|
|
|
|
history=None,
|
|
|
|
status=HTTPStatus.INTERNAL_SERVER_ERROR,
|
|
|
|
)
|
2023-12-09 22:46:32 +00:00
|
|
|
ERROR_CONNECTION = ClientConnectionError()
|
|
|
|
|
|
|
|
|
|
|
|
async def setup_platform(hass: HomeAssistant, side_effect=None):
|
|
|
|
"""Set up the Tessie platform."""
|
|
|
|
|
|
|
|
mock_entry = MockConfigEntry(
|
|
|
|
domain=DOMAIN,
|
|
|
|
data=TEST_CONFIG,
|
|
|
|
)
|
|
|
|
mock_entry.add_to_hass(hass)
|
|
|
|
|
|
|
|
with patch(
|
|
|
|
"homeassistant.components.tessie.get_state_of_all_vehicles",
|
|
|
|
return_value=TEST_STATE_OF_ALL_VEHICLES,
|
|
|
|
side_effect=side_effect,
|
|
|
|
):
|
|
|
|
await hass.config_entries.async_setup(mock_entry.entry_id)
|
|
|
|
await hass.async_block_till_done()
|
|
|
|
|
|
|
|
return mock_entry
|
2023-12-22 02:40:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
@contextmanager
|
|
|
|
def patch_description(
|
|
|
|
key: str, attr: str, descriptions: tuple[EntityDescription]
|
|
|
|
) -> AsyncMock:
|
|
|
|
"""Patch a description."""
|
|
|
|
to_patch = next(filter(lambda x: x.key == key, descriptions))
|
|
|
|
original = to_patch.func
|
|
|
|
mock = AsyncMock()
|
|
|
|
object.__setattr__(to_patch, attr, mock)
|
|
|
|
yield mock
|
|
|
|
object.__setattr__(to_patch, attr, original)
|