hass-core/tests/components/laundrify/conftest.py
xLarry 7ada2f864c
Add sensor platform to laundrify integration (#121378)
* feat: initial implementation of sensor platform

* refactor(tests): await setup of config_entry in parent function

* feat(tests): add tests for laundrify sensor platform

* refactor: set name property for laundrify binary_sensor

* refactor(tests): add missing type hints

* refactor(tests): remove global change of the logging level

* refactor: address minor changes from code review

* refactor(tests): transform setup_config_entry into fixture

* refactor: leverage entity descriptions to define common entity properties

* refactor: change native unit to Wh

* fix(tests): use fixture to create the config entry

* fix: remove redundant raise of LaundrifyDeviceException

* fix(tests): raise a LaundrifyDeviceException to test the update failure behavior

* refactor(tests): merge several library fixtures into a single one

* refactor(tests): create a separate UpdateCoordinator instead of using the internal

* refactor(tests): avoid using LaundrifyPowerSensor

* refactor: simplify value retrieval by directly accessing the coordinator

* refactor: remove non-raising code from try-block

* refactor(sensor): revert usage of entity descriptions

* refactor(sensor): consolidate common attributes and init func to LaundrifyBaseSensor

* refactor(sensor): instantiate DeviceInfo obj instead of using dict

* refactor(tests): use freezer to trigger coordinator update

* refactor(tests): assert on entity state instead of coordinator

* refactor(tests): make use of freezer

* chore(tests): typo in comment
2024-09-16 16:21:16 +02:00

75 lines
2.4 KiB
Python

"""Configure py.test."""
import json
from unittest.mock import AsyncMock, patch
from laundrify_aio import LaundrifyAPI, LaundrifyDevice
import pytest
from homeassistant.components.laundrify import DOMAIN
from homeassistant.components.laundrify.const import MANUFACTURER
from homeassistant.const import CONF_ACCESS_TOKEN
from homeassistant.core import HomeAssistant
from .const import VALID_ACCESS_TOKEN, VALID_ACCOUNT_ID
from tests.common import MockConfigEntry, load_fixture
from tests.typing import ClientSessionGenerator
@pytest.fixture(name="mock_device")
def laundrify_sensor_fixture() -> LaundrifyDevice:
"""Return a default Laundrify power sensor mock."""
# Load test data from machines.json
machine_data = json.loads(load_fixture("laundrify/machines.json"))[0]
mock_device = AsyncMock(spec=LaundrifyDevice)
mock_device.id = machine_data["id"]
mock_device.manufacturer = MANUFACTURER
mock_device.model = machine_data["model"]
mock_device.name = machine_data["name"]
mock_device.firmwareVersion = machine_data["firmwareVersion"]
return mock_device
@pytest.fixture(name="laundrify_config_entry")
async def laundrify_setup_config_entry(
hass: HomeAssistant, access_token: str = VALID_ACCESS_TOKEN
) -> MockConfigEntry:
"""Create laundrify entry in Home Assistant."""
entry = MockConfigEntry(
domain=DOMAIN,
unique_id=VALID_ACCOUNT_ID,
data={CONF_ACCESS_TOKEN: access_token},
)
entry.add_to_hass(hass)
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
return entry
@pytest.fixture(name="laundrify_api_mock", autouse=True)
def laundrify_api_fixture(hass_client: ClientSessionGenerator):
"""Mock valid laundrify API responses."""
with (
patch(
"laundrify_aio.LaundrifyAPI.get_account_id",
return_value=VALID_ACCOUNT_ID,
),
patch(
"laundrify_aio.LaundrifyAPI.validate_token",
return_value=True,
),
patch(
"laundrify_aio.LaundrifyAPI.exchange_auth_code",
return_value=VALID_ACCESS_TOKEN,
),
patch(
"laundrify_aio.LaundrifyAPI.get_machines",
return_value=[
LaundrifyDevice(machine, LaundrifyAPI)
for machine in json.loads(load_fixture("laundrify/machines.json"))
],
),
):
yield LaundrifyAPI(VALID_ACCESS_TOKEN, hass_client)