* Added component named switcher_kis switcher water heater integration. * Fixed conflicts. * Updated requirements. * Added manifest.json file and updated CODEOWNERS. * Fixed requirements_all.txt. * Better component tests. * Removed unnecessary parameter from fixture function. * Removed tests section from mypy.ini. * Remove unused ENTITY_ID_FORMAT. * Stop udp bridge when failed to setup the component. * Replace DISCOVERY_ constants prefix with DATA_. * Various change requests. * Fixed constant name change remifications. * Added explicit name to fixture. * Various change requests. * More various change requests. * Added EventType for homeassistant.core.Event. * Switched from event driven data distribution to dispatcher type plus clean-ups. * Removed name and icon keys from the component configuration. * Various change requests. * Various change reqeusts and clean-ups. * Removed unnecessary DEPENDENCIES constant from swith platform. * Replaced configuration data guard with assert. * Removed unused constants. * Removed confusing type casting for mypy sake. * Refactor property device_name to name. * Removed None guard effecting mypy only. * Removed unnecessary function from switch entity. * Removed None guard in use by mypy only. * Removed unused constant. * Removed unnecessary context manager. * Stopped messing around with mypy.ini. * Referring to typing.TYPE_CHECKING for non-runtime imports. * Added test requierment correctyly. * Replaced queue.get() with queue.get_nowait() to avoid backing up intervals requests. * Revert changes in mypy.ini. * Changed attributes content to device properties instead of entity properties. * Fixed typo in constant name. * Remove unnecessary async keyword from callable. * Waiting for tasks on event loop to end. * Added callback decorator to callable.
110 lines
3 KiB
Python
110 lines
3 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() # type: Queue
|
|
|
|
async def mock_queue():
|
|
"""Mock asyncio's Queue."""
|
|
await queue.put(MockSwitcherV2Device())
|
|
return await queue.get()
|
|
|
|
mock_bridge = CoroutineMock()
|
|
|
|
patchers = [
|
|
patch('aioswitcher.bridge.SwitcherV2Bridge.start', new=mock_bridge),
|
|
patch('aioswitcher.bridge.SwitcherV2Bridge.stop', new=mock_bridge),
|
|
patch('aioswitcher.bridge.SwitcherV2Bridge.queue', get=mock_queue)
|
|
]
|
|
|
|
for patcher in patchers:
|
|
patcher.start()
|
|
|
|
yield
|
|
|
|
for patcher in patchers:
|
|
patcher.stop()
|