2018-04-18 16:27:44 +02:00
|
|
|
"""Test deCONZ component setup process."""
|
2018-04-23 18:00:16 +02:00
|
|
|
from unittest.mock import Mock, patch
|
2018-04-18 16:27:44 +02:00
|
|
|
|
2019-03-24 19:27:32 +01:00
|
|
|
import asyncio
|
2018-11-30 21:28:35 +01:00
|
|
|
import pytest
|
|
|
|
|
2019-02-13 20:36:06 -08:00
|
|
|
from homeassistant.exceptions import ConfigEntryNotReady
|
2018-10-31 22:38:04 +01:00
|
|
|
from homeassistant.components import deconz
|
|
|
|
|
|
|
|
from tests.common import mock_coro, MockConfigEntry
|
|
|
|
|
2019-07-31 12:25:30 -07:00
|
|
|
ENTRY1_HOST = "1.2.3.4"
|
2019-04-05 02:48:24 +02:00
|
|
|
ENTRY1_PORT = 80
|
2019-07-31 12:25:30 -07:00
|
|
|
ENTRY1_API_KEY = "1234567890ABCDEF"
|
|
|
|
ENTRY1_BRIDGEID = "12345ABC"
|
2019-04-05 02:48:24 +02:00
|
|
|
|
2019-07-31 12:25:30 -07:00
|
|
|
ENTRY2_HOST = "2.3.4.5"
|
2019-04-05 02:48:24 +02:00
|
|
|
ENTRY2_PORT = 80
|
2019-07-31 12:25:30 -07:00
|
|
|
ENTRY2_API_KEY = "1234567890ABCDEF"
|
|
|
|
ENTRY2_BRIDGEID = "23456DEF"
|
2019-04-05 02:48:24 +02:00
|
|
|
|
|
|
|
|
|
|
|
async def setup_entry(hass, entry):
|
|
|
|
"""Test that setup entry works."""
|
2019-07-31 12:25:30 -07:00
|
|
|
with patch.object(
|
|
|
|
deconz.DeconzGateway, "async_setup", return_value=mock_coro(True)
|
|
|
|
), patch.object(
|
|
|
|
deconz.DeconzGateway,
|
|
|
|
"async_update_device_registry",
|
|
|
|
return_value=mock_coro(True),
|
|
|
|
):
|
2019-04-05 02:48:24 +02:00
|
|
|
assert await deconz.async_setup_entry(hass, entry) is True
|
2018-08-24 19:37:22 +02:00
|
|
|
|
2018-04-18 16:27:44 +02:00
|
|
|
|
2019-03-24 19:27:32 +01:00
|
|
|
async def test_setup_entry_fails(hass):
|
|
|
|
"""Test setup entry fails if deCONZ is not available."""
|
|
|
|
entry = Mock()
|
2019-04-05 02:48:24 +02:00
|
|
|
entry.data = {
|
2019-09-14 22:53:59 +02:00
|
|
|
deconz.config_flow.CONF_HOST: ENTRY1_HOST,
|
|
|
|
deconz.config_flow.CONF_PORT: ENTRY1_PORT,
|
|
|
|
deconz.config_flow.CONF_API_KEY: ENTRY1_API_KEY,
|
2019-04-05 02:48:24 +02:00
|
|
|
}
|
2019-07-31 12:25:30 -07:00
|
|
|
with patch("pydeconz.DeconzSession.async_load_parameters", side_effect=Exception):
|
2019-03-24 19:27:32 +01:00
|
|
|
await deconz.async_setup_entry(hass, entry)
|
|
|
|
|
|
|
|
|
2018-04-23 18:00:16 +02:00
|
|
|
async def test_setup_entry_no_available_bridge(hass):
|
|
|
|
"""Test setup entry fails if deCONZ is not available."""
|
|
|
|
entry = Mock()
|
2019-04-05 02:48:24 +02:00
|
|
|
entry.data = {
|
2019-09-14 22:53:59 +02:00
|
|
|
deconz.config_flow.CONF_HOST: ENTRY1_HOST,
|
|
|
|
deconz.config_flow.CONF_PORT: ENTRY1_PORT,
|
|
|
|
deconz.config_flow.CONF_API_KEY: ENTRY1_API_KEY,
|
2019-04-05 02:48:24 +02:00
|
|
|
}
|
2019-07-31 12:25:30 -07:00
|
|
|
with patch(
|
|
|
|
"pydeconz.DeconzSession.async_load_parameters", side_effect=asyncio.TimeoutError
|
|
|
|
), pytest.raises(ConfigEntryNotReady):
|
2019-02-13 20:36:06 -08:00
|
|
|
await deconz.async_setup_entry(hass, entry)
|
2018-04-23 18:00:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
async def test_setup_entry_successful(hass):
|
|
|
|
"""Test setup entry is successful."""
|
2019-07-31 12:25:30 -07:00
|
|
|
entry = MockConfigEntry(
|
|
|
|
domain=deconz.DOMAIN,
|
|
|
|
data={
|
2019-09-14 22:53:59 +02:00
|
|
|
deconz.config_flow.CONF_HOST: ENTRY1_HOST,
|
|
|
|
deconz.config_flow.CONF_PORT: ENTRY1_PORT,
|
|
|
|
deconz.config_flow.CONF_API_KEY: ENTRY1_API_KEY,
|
2019-07-31 12:25:30 -07:00
|
|
|
deconz.CONF_BRIDGEID: ENTRY1_BRIDGEID,
|
|
|
|
},
|
|
|
|
)
|
2018-10-31 22:38:04 +01:00
|
|
|
entry.add_to_hass(hass)
|
2019-04-05 02:48:24 +02:00
|
|
|
|
|
|
|
await setup_entry(hass, entry)
|
|
|
|
|
|
|
|
assert ENTRY1_BRIDGEID in hass.data[deconz.DOMAIN]
|
|
|
|
assert hass.data[deconz.DOMAIN][ENTRY1_BRIDGEID].master
|
|
|
|
|
|
|
|
|
|
|
|
async def test_setup_entry_multiple_gateways(hass):
|
|
|
|
"""Test setup entry is successful with multiple gateways."""
|
2019-07-31 12:25:30 -07:00
|
|
|
entry = MockConfigEntry(
|
|
|
|
domain=deconz.DOMAIN,
|
|
|
|
data={
|
2019-09-14 22:53:59 +02:00
|
|
|
deconz.config_flow.CONF_HOST: ENTRY1_HOST,
|
|
|
|
deconz.config_flow.CONF_PORT: ENTRY1_PORT,
|
|
|
|
deconz.config_flow.CONF_API_KEY: ENTRY1_API_KEY,
|
2019-07-31 12:25:30 -07:00
|
|
|
deconz.CONF_BRIDGEID: ENTRY1_BRIDGEID,
|
|
|
|
},
|
|
|
|
)
|
2019-04-05 02:48:24 +02:00
|
|
|
entry.add_to_hass(hass)
|
|
|
|
|
2019-07-31 12:25:30 -07:00
|
|
|
entry2 = MockConfigEntry(
|
|
|
|
domain=deconz.DOMAIN,
|
|
|
|
data={
|
2019-09-14 22:53:59 +02:00
|
|
|
deconz.config_flow.CONF_HOST: ENTRY2_HOST,
|
|
|
|
deconz.config_flow.CONF_PORT: ENTRY2_PORT,
|
|
|
|
deconz.config_flow.CONF_API_KEY: ENTRY2_API_KEY,
|
2019-07-31 12:25:30 -07:00
|
|
|
deconz.CONF_BRIDGEID: ENTRY2_BRIDGEID,
|
|
|
|
},
|
|
|
|
)
|
2019-04-05 02:48:24 +02:00
|
|
|
entry2.add_to_hass(hass)
|
|
|
|
|
|
|
|
await setup_entry(hass, entry)
|
|
|
|
await setup_entry(hass, entry2)
|
|
|
|
|
|
|
|
assert ENTRY1_BRIDGEID in hass.data[deconz.DOMAIN]
|
|
|
|
assert hass.data[deconz.DOMAIN][ENTRY1_BRIDGEID].master
|
|
|
|
assert ENTRY2_BRIDGEID in hass.data[deconz.DOMAIN]
|
|
|
|
assert not hass.data[deconz.DOMAIN][ENTRY2_BRIDGEID].master
|
2018-04-29 16:16:20 +02:00
|
|
|
|
|
|
|
|
|
|
|
async def test_unload_entry(hass):
|
|
|
|
"""Test being able to unload an entry."""
|
2019-07-31 12:25:30 -07:00
|
|
|
entry = MockConfigEntry(
|
|
|
|
domain=deconz.DOMAIN,
|
|
|
|
data={
|
2019-09-14 22:53:59 +02:00
|
|
|
deconz.config_flow.CONF_HOST: ENTRY1_HOST,
|
|
|
|
deconz.config_flow.CONF_PORT: ENTRY1_PORT,
|
|
|
|
deconz.config_flow.CONF_API_KEY: ENTRY1_API_KEY,
|
2019-07-31 12:25:30 -07:00
|
|
|
deconz.CONF_BRIDGEID: ENTRY1_BRIDGEID,
|
|
|
|
},
|
|
|
|
)
|
2018-10-31 22:38:04 +01:00
|
|
|
entry.add_to_hass(hass)
|
2018-08-24 19:37:22 +02:00
|
|
|
|
2019-04-05 02:48:24 +02:00
|
|
|
await setup_entry(hass, entry)
|
|
|
|
|
2019-07-31 12:25:30 -07:00
|
|
|
with patch.object(
|
|
|
|
deconz.DeconzGateway, "async_reset", return_value=mock_coro(True)
|
|
|
|
):
|
2019-04-05 02:48:24 +02:00
|
|
|
assert await deconz.async_unload_entry(hass, entry)
|
|
|
|
|
|
|
|
assert not hass.data[deconz.DOMAIN]
|
|
|
|
|
|
|
|
|
|
|
|
async def test_unload_entry_multiple_gateways(hass):
|
|
|
|
"""Test being able to unload an entry and master gateway gets moved."""
|
2019-07-31 12:25:30 -07:00
|
|
|
entry = MockConfigEntry(
|
|
|
|
domain=deconz.DOMAIN,
|
|
|
|
data={
|
2019-09-14 22:53:59 +02:00
|
|
|
deconz.config_flow.CONF_HOST: ENTRY1_HOST,
|
|
|
|
deconz.config_flow.CONF_PORT: ENTRY1_PORT,
|
|
|
|
deconz.config_flow.CONF_API_KEY: ENTRY1_API_KEY,
|
2019-07-31 12:25:30 -07:00
|
|
|
deconz.CONF_BRIDGEID: ENTRY1_BRIDGEID,
|
|
|
|
},
|
|
|
|
)
|
2019-04-05 02:48:24 +02:00
|
|
|
entry.add_to_hass(hass)
|
|
|
|
|
2019-07-31 12:25:30 -07:00
|
|
|
entry2 = MockConfigEntry(
|
|
|
|
domain=deconz.DOMAIN,
|
|
|
|
data={
|
2019-09-14 22:53:59 +02:00
|
|
|
deconz.config_flow.CONF_HOST: ENTRY2_HOST,
|
|
|
|
deconz.config_flow.CONF_PORT: ENTRY2_PORT,
|
|
|
|
deconz.config_flow.CONF_API_KEY: ENTRY2_API_KEY,
|
2019-07-31 12:25:30 -07:00
|
|
|
deconz.CONF_BRIDGEID: ENTRY2_BRIDGEID,
|
|
|
|
},
|
|
|
|
)
|
2019-04-05 02:48:24 +02:00
|
|
|
entry2.add_to_hass(hass)
|
|
|
|
|
|
|
|
await setup_entry(hass, entry)
|
|
|
|
await setup_entry(hass, entry2)
|
|
|
|
|
2019-07-31 12:25:30 -07:00
|
|
|
with patch.object(
|
|
|
|
deconz.DeconzGateway, "async_reset", return_value=mock_coro(True)
|
|
|
|
):
|
2019-04-05 02:48:24 +02:00
|
|
|
assert await deconz.async_unload_entry(hass, entry)
|
|
|
|
|
|
|
|
assert ENTRY2_BRIDGEID in hass.data[deconz.DOMAIN]
|
|
|
|
assert hass.data[deconz.DOMAIN][ENTRY2_BRIDGEID].master
|