core/tests/components/qwikswitch/test_init.py

116 lines
3.5 KiB
Python
Raw Normal View History

2018-04-08 19:59:19 +00:00
"""Test qwikswitch sensors."""
import logging
from aiohttp.client_exceptions import ClientError
2018-04-08 19:59:19 +00:00
import pytest
from homeassistant.bootstrap import async_setup_component
from homeassistant.components.qwikswitch import DOMAIN as QWIKSWITCH
from homeassistant.const import EVENT_HOMEASSISTANT_START
2018-04-08 19:59:19 +00:00
from tests.test_util.aiohttp import mock_aiohttp_client
2018-04-08 19:59:19 +00:00
_LOGGER = logging.getLogger(__name__)
class AiohttpClientMockResponseList(list):
2018-04-21 06:34:42 +00:00
"""Return multiple values for aiohttp Mocker.
aoihttp mocker uses decode to fetch the next value.
"""
2018-04-08 19:59:19 +00:00
def decode(self, _):
"""Return next item from list."""
try:
2018-04-21 06:34:42 +00:00
res = list.pop(self, 0)
2018-04-08 19:59:19 +00:00
_LOGGER.debug("MockResponseList popped %s: %s", res, self)
if isinstance(res, Exception):
raise res
2018-04-08 19:59:19 +00:00
return res
except IndexError:
2018-04-21 06:34:42 +00:00
raise AssertionError("MockResponseList empty")
2018-04-08 19:59:19 +00:00
async def wait_till_empty(self, hass):
"""Wait until empty."""
while self:
await hass.async_block_till_done()
await hass.async_block_till_done()
LISTEN = AiohttpClientMockResponseList()
@pytest.fixture
def aioclient_mock():
"""HTTP client listen and devices."""
devices = """[
{"id":"@000001","name":"Switch 1","type":"rel","val":"OFF",
"time":"1522777506","rssi":"51%"},
{"id":"@000002","name":"Light 2","type":"rel","val":"ON",
"time":"1522777507","rssi":"45%"},
{"id":"@000003","name":"Dim 3","type":"dim","val":"280c00",
"time":"1522777544","rssi":"62%"}]"""
with mock_aiohttp_client() as mock_session:
mock_session.get("http://127.0.0.1:2020/&listen", content=LISTEN)
mock_session.get("http://127.0.0.1:2020/&device", text=devices)
yield mock_session
async def test_binary_sensor_device(hass, aioclient_mock): # noqa: F811
2018-04-21 06:34:42 +00:00
"""Test a binary sensor device."""
2018-04-08 19:59:19 +00:00
config = {
2019-07-31 19:25:30 +00:00
"qwikswitch": {
"sensors": {"name": "s1", "id": "@a00001", "channel": 1, "type": "imod"}
2018-04-08 19:59:19 +00:00
}
}
await async_setup_component(hass, QWIKSWITCH, config)
await hass.async_block_till_done()
2019-07-31 19:25:30 +00:00
state_obj = hass.states.get("binary_sensor.s1")
assert state_obj.state == "off"
2018-04-21 06:34:42 +00:00
2018-04-08 19:59:19 +00:00
hass.bus.async_fire(EVENT_HOMEASSISTANT_START)
2018-04-21 06:34:42 +00:00
LISTEN.append('{"id":"@a00001","cmd":"","data":"4e0e1601","rssi":"61%"}')
LISTEN.append(ClientError()) # Will cause a sleep
2018-04-08 19:59:19 +00:00
await hass.async_block_till_done()
2019-07-31 19:25:30 +00:00
state_obj = hass.states.get("binary_sensor.s1")
assert state_obj.state == "on"
2018-04-21 06:34:42 +00:00
LISTEN.append('{"id":"@a00001","cmd":"","data":"4e0e1701","rssi":"61%"}')
hass.data[QWIKSWITCH]._sleep_task.cancel()
await LISTEN.wait_till_empty(hass)
2019-07-31 19:25:30 +00:00
state_obj = hass.states.get("binary_sensor.s1")
assert state_obj.state == "off"
2018-04-21 06:34:42 +00:00
async def test_sensor_device(hass, aioclient_mock): # noqa: F811
2018-04-21 06:34:42 +00:00
"""Test a sensor device."""
config = {
2019-07-31 19:25:30 +00:00
"qwikswitch": {
"sensors": {
"name": "ss1",
"id": "@a00001",
"channel": 1,
"type": "qwikcord",
2018-04-21 06:34:42 +00:00
}
}
}
await async_setup_component(hass, QWIKSWITCH, config)
await hass.async_block_till_done()
2019-07-31 19:25:30 +00:00
state_obj = hass.states.get("sensor.ss1")
assert state_obj.state == "None"
2018-04-21 06:34:42 +00:00
hass.bus.async_fire(EVENT_HOMEASSISTANT_START)
LISTEN.append(
2019-07-31 19:25:30 +00:00
'{"id":"@a00001","name":"ss1","type":"rel",' '"val":"4733800001a00000"}'
)
2018-04-21 06:34:42 +00:00
await hass.async_block_till_done()
2019-07-31 19:25:30 +00:00
state_obj = hass.states.get("sensor.ss1")
assert state_obj.state == "416"