187 lines
4.6 KiB
Python
187 lines
4.6 KiB
Python
"""Common fixtures and objects for the Switcher integration tests."""
|
|
|
|
from asyncio import Queue
|
|
from datetime import datetime
|
|
from typing import Any, Generator, Optional
|
|
|
|
from asynctest import CoroutineMock, patch
|
|
from pytest import fixture
|
|
|
|
from .consts import (
|
|
DUMMY_AUTO_OFF_SET,
|
|
DUMMY_DEVICE_ID,
|
|
DUMMY_DEVICE_NAME,
|
|
DUMMY_DEVICE_STATE,
|
|
DUMMY_ELECTRIC_CURRENT,
|
|
DUMMY_IP_ADDRESS,
|
|
DUMMY_MAC_ADDRESS,
|
|
DUMMY_PHONE_ID,
|
|
DUMMY_POWER_CONSUMPTION,
|
|
DUMMY_REMAINING_TIME,
|
|
)
|
|
|
|
|
|
@patch("aioswitcher.devices.SwitcherV2Device")
|
|
class MockSwitcherV2Device:
|
|
"""Class for mocking the aioswitcher.devices.SwitcherV2Device object."""
|
|
|
|
def __init__(self) -> None:
|
|
"""Initialize the object."""
|
|
self._last_state_change = datetime.now()
|
|
|
|
@property
|
|
def device_id(self) -> str:
|
|
"""Return the device id."""
|
|
return DUMMY_DEVICE_ID
|
|
|
|
@property
|
|
def ip_addr(self) -> str:
|
|
"""Return the ip address."""
|
|
return DUMMY_IP_ADDRESS
|
|
|
|
@property
|
|
def mac_addr(self) -> str:
|
|
"""Return the mac address."""
|
|
return DUMMY_MAC_ADDRESS
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
"""Return the device name."""
|
|
return DUMMY_DEVICE_NAME
|
|
|
|
@property
|
|
def state(self) -> str:
|
|
"""Return the device state."""
|
|
return DUMMY_DEVICE_STATE
|
|
|
|
@property
|
|
def remaining_time(self) -> Optional[str]:
|
|
"""Return the time left to auto-off."""
|
|
return DUMMY_REMAINING_TIME
|
|
|
|
@property
|
|
def auto_off_set(self) -> str:
|
|
"""Return the auto-off configuration value."""
|
|
return DUMMY_AUTO_OFF_SET
|
|
|
|
@property
|
|
def power_consumption(self) -> int:
|
|
"""Return the power consumption in watts."""
|
|
return DUMMY_POWER_CONSUMPTION
|
|
|
|
@property
|
|
def electric_current(self) -> float:
|
|
"""Return the power consumption in amps."""
|
|
return DUMMY_ELECTRIC_CURRENT
|
|
|
|
@property
|
|
def phone_id(self) -> str:
|
|
"""Return the phone id."""
|
|
return DUMMY_PHONE_ID
|
|
|
|
@property
|
|
def last_data_update(self) -> datetime:
|
|
"""Return the timestamp of the last update."""
|
|
return datetime.now()
|
|
|
|
@property
|
|
def last_state_change(self) -> datetime:
|
|
"""Return the timestamp of the state change."""
|
|
return self._last_state_change
|
|
|
|
|
|
@fixture(name="mock_bridge")
|
|
def mock_bridge_fixture() -> Generator[None, Any, None]:
|
|
"""Fixture for mocking aioswitcher.bridge.SwitcherV2Bridge."""
|
|
queue = Queue()
|
|
|
|
async def mock_queue():
|
|
"""Mock asyncio's Queue."""
|
|
await queue.put(MockSwitcherV2Device())
|
|
return await queue.get()
|
|
|
|
mock_bridge = CoroutineMock()
|
|
|
|
patchers = [
|
|
patch(
|
|
"homeassistant.components.switcher_kis.SwitcherV2Bridge.start",
|
|
new=mock_bridge,
|
|
),
|
|
patch(
|
|
"homeassistant.components.switcher_kis.SwitcherV2Bridge.stop",
|
|
new=mock_bridge,
|
|
),
|
|
patch(
|
|
"homeassistant.components.switcher_kis.SwitcherV2Bridge.queue",
|
|
get=mock_queue,
|
|
),
|
|
patch(
|
|
"homeassistant.components.switcher_kis.SwitcherV2Bridge.running",
|
|
return_value=True,
|
|
),
|
|
]
|
|
|
|
for patcher in patchers:
|
|
patcher.start()
|
|
|
|
yield
|
|
|
|
for patcher in patchers:
|
|
patcher.stop()
|
|
|
|
|
|
@fixture(name="mock_failed_bridge")
|
|
def mock_failed_bridge_fixture() -> Generator[None, Any, None]:
|
|
"""Fixture for mocking aioswitcher.bridge.SwitcherV2Bridge."""
|
|
|
|
async def mock_queue():
|
|
"""Mock asyncio's Queue."""
|
|
raise RuntimeError
|
|
|
|
patchers = [
|
|
patch(
|
|
"homeassistant.components.switcher_kis.SwitcherV2Bridge.start",
|
|
return_value=None,
|
|
),
|
|
patch(
|
|
"homeassistant.components.switcher_kis.SwitcherV2Bridge.stop",
|
|
return_value=None,
|
|
),
|
|
patch(
|
|
"homeassistant.components.switcher_kis.SwitcherV2Bridge.queue",
|
|
get=mock_queue,
|
|
),
|
|
]
|
|
|
|
for patcher in patchers:
|
|
patcher.start()
|
|
|
|
yield
|
|
|
|
for patcher in patchers:
|
|
patcher.stop()
|
|
|
|
|
|
@fixture(name="mock_api")
|
|
def mock_api_fixture() -> Generator[CoroutineMock, Any, None]:
|
|
"""Fixture for mocking aioswitcher.api.SwitcherV2Api."""
|
|
mock_api = CoroutineMock()
|
|
|
|
patchers = [
|
|
patch(
|
|
"homeassistant.components.switcher_kis.SwitcherV2Api.connect", new=mock_api
|
|
),
|
|
patch(
|
|
"homeassistant.components.switcher_kis.SwitcherV2Api.disconnect",
|
|
new=mock_api,
|
|
),
|
|
]
|
|
|
|
for patcher in patchers:
|
|
patcher.start()
|
|
|
|
yield
|
|
|
|
for patcher in patchers:
|
|
patcher.stop()
|