mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 13:47:35 +00:00
Introduction of deCONZ websocket fixture (#47812)
This commit is contained in:
parent
6b03c8d126
commit
786cbcc1d6
@ -1,2 +1,29 @@
|
|||||||
"""deconz conftest."""
|
"""deconz conftest."""
|
||||||
|
|
||||||
|
from typing import Optional
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from tests.components.light.conftest import mock_light_profiles # noqa: F401
|
from tests.components.light.conftest import mock_light_profiles # noqa: F401
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def mock_deconz_websocket():
|
||||||
|
"""No real websocket allowed."""
|
||||||
|
with patch("pydeconz.gateway.WSClient") as mock:
|
||||||
|
|
||||||
|
async def make_websocket_call(data: Optional[dict] = None, state: str = ""):
|
||||||
|
"""Generate a websocket call."""
|
||||||
|
pydeconz_gateway_session_handler = mock.call_args[0][3]
|
||||||
|
|
||||||
|
if data:
|
||||||
|
mock.return_value.data = data
|
||||||
|
await pydeconz_gateway_session_handler(signal="data")
|
||||||
|
elif state:
|
||||||
|
mock.return_value.state = state
|
||||||
|
await pydeconz_gateway_session_handler(signal="state")
|
||||||
|
else:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
yield make_websocket_call
|
||||||
|
@ -4,6 +4,7 @@ from copy import deepcopy
|
|||||||
from unittest.mock import Mock, patch
|
from unittest.mock import Mock, patch
|
||||||
|
|
||||||
import pydeconz
|
import pydeconz
|
||||||
|
from pydeconz.websocket import STATE_RUNNING, STATE_STARTING
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN
|
from homeassistant.components.binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN
|
||||||
@ -29,8 +30,14 @@ from homeassistant.components.ssdp import (
|
|||||||
)
|
)
|
||||||
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
|
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
|
||||||
from homeassistant.config_entries import CONN_CLASS_LOCAL_PUSH, SOURCE_SSDP
|
from homeassistant.config_entries import CONN_CLASS_LOCAL_PUSH, SOURCE_SSDP
|
||||||
from homeassistant.const import CONF_API_KEY, CONF_HOST, CONF_PORT, CONTENT_TYPE_JSON
|
from homeassistant.const import (
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
CONF_API_KEY,
|
||||||
|
CONF_HOST,
|
||||||
|
CONF_PORT,
|
||||||
|
CONTENT_TYPE_JSON,
|
||||||
|
STATE_OFF,
|
||||||
|
STATE_UNAVAILABLE,
|
||||||
|
)
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
@ -116,8 +123,7 @@ async def setup_deconz_integration(
|
|||||||
if aioclient_mock:
|
if aioclient_mock:
|
||||||
mock_deconz_request(aioclient_mock, config, get_state_response)
|
mock_deconz_request(aioclient_mock, config, get_state_response)
|
||||||
|
|
||||||
with patch("pydeconz.DeconzSession.start", return_value=True):
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||||
await hass.config_entries.async_setup(config_entry.entry_id)
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
return config_entry
|
return config_entry
|
||||||
@ -173,21 +179,35 @@ async def test_gateway_setup_fails(hass):
|
|||||||
assert not hass.data[DECONZ_DOMAIN]
|
assert not hass.data[DECONZ_DOMAIN]
|
||||||
|
|
||||||
|
|
||||||
async def test_connection_status_signalling(hass, aioclient_mock):
|
async def test_connection_status_signalling(
|
||||||
|
hass, aioclient_mock, mock_deconz_websocket
|
||||||
|
):
|
||||||
"""Make sure that connection status triggers a dispatcher send."""
|
"""Make sure that connection status triggers a dispatcher send."""
|
||||||
config_entry = await setup_deconz_integration(hass, aioclient_mock)
|
data = {
|
||||||
gateway = get_gateway_from_config_entry(hass, config_entry)
|
"sensors": {
|
||||||
|
"1": {
|
||||||
|
"name": "presence",
|
||||||
|
"type": "ZHAPresence",
|
||||||
|
"state": {"presence": False},
|
||||||
|
"config": {"on": True, "reachable": True},
|
||||||
|
"uniqueid": "00:00:00:00:00:00:00:00-00",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
with patch.dict(DECONZ_WEB_REQUEST, data):
|
||||||
|
await setup_deconz_integration(hass, aioclient_mock)
|
||||||
|
|
||||||
event_call = Mock()
|
assert hass.states.get("binary_sensor.presence").state == STATE_OFF
|
||||||
unsub = async_dispatcher_connect(hass, gateway.signal_reachable, event_call)
|
|
||||||
|
|
||||||
gateway.async_connection_status_callback(False)
|
await mock_deconz_websocket(state=STATE_STARTING)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert gateway.available is False
|
assert hass.states.get("binary_sensor.presence").state == STATE_UNAVAILABLE
|
||||||
assert len(event_call.mock_calls) == 1
|
|
||||||
|
|
||||||
unsub()
|
await mock_deconz_websocket(state=STATE_RUNNING)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert hass.states.get("binary_sensor.presence").state == STATE_OFF
|
||||||
|
|
||||||
|
|
||||||
async def test_update_address(hass, aioclient_mock):
|
async def test_update_address(hass, aioclient_mock):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user