mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 18:57:06 +00:00
Add test for adding a device to HomematicIP Cloud (#31224)
* Add test for adding a hmip device * refactor get_mock_hap to use config_entry setup * remove unused parameters
This commit is contained in:
parent
9d8b4de09c
commit
ec2d378a19
@ -17,7 +17,9 @@ from homeassistant.components.homematicip_cloud.const import (
|
|||||||
HMIPC_PIN,
|
HMIPC_PIN,
|
||||||
)
|
)
|
||||||
from homeassistant.components.homematicip_cloud.hap import HomematicipHAP
|
from homeassistant.components.homematicip_cloud.hap import HomematicipHAP
|
||||||
|
from homeassistant.config_entries import SOURCE_IMPORT
|
||||||
from homeassistant.helpers.typing import ConfigType, HomeAssistantType
|
from homeassistant.helpers.typing import ConfigType, HomeAssistantType
|
||||||
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from .helper import AUTH_TOKEN, HAPID, HAPPIN, HomeTemplate
|
from .helper import AUTH_TOKEN, HAPID, HAPPIN, HomeTemplate
|
||||||
|
|
||||||
@ -56,7 +58,7 @@ def hmip_config_entry_fixture() -> config_entries.ConfigEntry:
|
|||||||
title=HAPID,
|
title=HAPID,
|
||||||
unique_id=HAPID,
|
unique_id=HAPID,
|
||||||
data=entry_data,
|
data=entry_data,
|
||||||
source="import",
|
source=SOURCE_IMPORT,
|
||||||
connection_class=config_entries.CONN_CLASS_CLOUD_PUSH,
|
connection_class=config_entries.CONN_CLASS_CLOUD_PUSH,
|
||||||
system_options={"disable_new_entities": False},
|
system_options={"disable_new_entities": False},
|
||||||
)
|
)
|
||||||
@ -84,23 +86,25 @@ async def get_mock_hap(
|
|||||||
hmip_config_entry: config_entries.ConfigEntry,
|
hmip_config_entry: config_entries.ConfigEntry,
|
||||||
) -> HomematicipHAP:
|
) -> HomematicipHAP:
|
||||||
"""Create a mocked homematic access point."""
|
"""Create a mocked homematic access point."""
|
||||||
hass.config.components.add(HMIPC_DOMAIN)
|
|
||||||
hap = HomematicipHAP(hass, hmip_config_entry)
|
|
||||||
home_name = hmip_config_entry.data["name"]
|
home_name = hmip_config_entry.data["name"]
|
||||||
mock_home = (
|
mock_home = (
|
||||||
HomeTemplate(connection=mock_connection, home_name=home_name)
|
HomeTemplate(connection=mock_connection, home_name=home_name)
|
||||||
.init_home()
|
.init_home()
|
||||||
.get_async_home_mock()
|
.get_async_home_mock()
|
||||||
)
|
)
|
||||||
with patch.object(hap, "get_hap", return_value=mock_home):
|
|
||||||
assert await hap.async_setup()
|
|
||||||
mock_home.on_update(hap.async_update)
|
|
||||||
mock_home.on_create(hap.async_create_entity)
|
|
||||||
|
|
||||||
hass.data[HMIPC_DOMAIN] = {HAPID: hap}
|
hmip_config_entry.add_to_hass(hass)
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.homematicip_cloud.hap.HomematicipHAP.get_hap",
|
||||||
|
return_value=mock_home,
|
||||||
|
):
|
||||||
|
assert await async_setup_component(hass, HMIPC_DOMAIN, {}) is True
|
||||||
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
hap = hass.data[HMIPC_DOMAIN][HAPID]
|
||||||
|
mock_home.on_update(hap.async_update)
|
||||||
|
mock_home.on_create(hap.async_create_entity)
|
||||||
return hap
|
return hap
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
"""Common tests for HomematicIP devices."""
|
"""Common tests for HomematicIP devices."""
|
||||||
|
from asynctest import patch
|
||||||
|
from homematicip.base.enums import EventType
|
||||||
|
|
||||||
|
from homeassistant.components.homematicip_cloud import DOMAIN as HMIPC_DOMAIN
|
||||||
|
from homeassistant.components.homematicip_cloud.hap import HomematicipHAP
|
||||||
from homeassistant.const import STATE_ON, STATE_UNAVAILABLE
|
from homeassistant.const import STATE_ON, STATE_UNAVAILABLE
|
||||||
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
||||||
|
|
||||||
from .conftest import get_mock_hap
|
from .conftest import get_mock_hap
|
||||||
from .helper import async_manipulate_test_data, get_and_check_entity_basics
|
from .helper import HAPID, async_manipulate_test_data, get_and_check_entity_basics
|
||||||
|
|
||||||
|
|
||||||
async def test_hmip_remove_device(hass, default_mock_hap):
|
async def test_hmip_remove_device(hass, default_mock_hap):
|
||||||
@ -35,6 +40,51 @@ async def test_hmip_remove_device(hass, default_mock_hap):
|
|||||||
assert len(default_mock_hap.hmip_device_by_entity_id) == pre_mapping_count - 3
|
assert len(default_mock_hap.hmip_device_by_entity_id) == pre_mapping_count - 3
|
||||||
|
|
||||||
|
|
||||||
|
async def test_hmip_add_device(hass, default_mock_hap, hmip_config_entry):
|
||||||
|
"""Test Remove of hmip device."""
|
||||||
|
entity_id = "light.treppe"
|
||||||
|
entity_name = "Treppe"
|
||||||
|
device_model = "HmIP-BSL"
|
||||||
|
|
||||||
|
ha_state, hmip_device = get_and_check_entity_basics(
|
||||||
|
hass, default_mock_hap, entity_id, entity_name, device_model
|
||||||
|
)
|
||||||
|
|
||||||
|
assert ha_state.state == STATE_ON
|
||||||
|
assert hmip_device
|
||||||
|
|
||||||
|
device_registry = await dr.async_get_registry(hass)
|
||||||
|
entity_registry = await er.async_get_registry(hass)
|
||||||
|
|
||||||
|
pre_device_count = len(device_registry.devices)
|
||||||
|
pre_entity_count = len(entity_registry.entities)
|
||||||
|
pre_mapping_count = len(default_mock_hap.hmip_device_by_entity_id)
|
||||||
|
|
||||||
|
hmip_device.fire_remove_event()
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert len(device_registry.devices) == pre_device_count - 1
|
||||||
|
assert len(entity_registry.entities) == pre_entity_count - 3
|
||||||
|
assert len(default_mock_hap.hmip_device_by_entity_id) == pre_mapping_count - 3
|
||||||
|
|
||||||
|
reloaded_hap = HomematicipHAP(hass, hmip_config_entry)
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.homematicip_cloud.HomematicipHAP",
|
||||||
|
return_value=reloaded_hap,
|
||||||
|
), patch.object(reloaded_hap, "async_connect"), patch.object(
|
||||||
|
reloaded_hap, "get_hap", return_value=default_mock_hap.home
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.homematicip_cloud.hap.asyncio.sleep"
|
||||||
|
):
|
||||||
|
default_mock_hap.home.fire_create_event(event_type=EventType.DEVICE_ADDED)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert len(device_registry.devices) == pre_device_count
|
||||||
|
assert len(entity_registry.entities) == pre_entity_count
|
||||||
|
new_hap = hass.data[HMIPC_DOMAIN][HAPID]
|
||||||
|
assert len(new_hap.hmip_device_by_entity_id) == pre_mapping_count
|
||||||
|
|
||||||
|
|
||||||
async def test_hmip_remove_group(hass, default_mock_hap):
|
async def test_hmip_remove_group(hass, default_mock_hap):
|
||||||
"""Test Remove of hmip group."""
|
"""Test Remove of hmip group."""
|
||||||
entity_id = "switch.strom_group"
|
entity_id = "switch.strom_group"
|
||||||
@ -56,7 +106,6 @@ async def test_hmip_remove_group(hass, default_mock_hap):
|
|||||||
pre_mapping_count = len(default_mock_hap.hmip_device_by_entity_id)
|
pre_mapping_count = len(default_mock_hap.hmip_device_by_entity_id)
|
||||||
|
|
||||||
hmip_device.fire_remove_event()
|
hmip_device.fire_remove_event()
|
||||||
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert len(device_registry.devices) == pre_device_count
|
assert len(device_registry.devices) == pre_device_count
|
||||||
|
@ -17,13 +17,11 @@ from homeassistant.components.homematicip_cloud.hap import (
|
|||||||
HomematicipAuth,
|
HomematicipAuth,
|
||||||
HomematicipHAP,
|
HomematicipHAP,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ENTRY_STATE_LOADED, ENTRY_STATE_NOT_LOADED
|
from homeassistant.config_entries import ENTRY_STATE_NOT_LOADED
|
||||||
from homeassistant.exceptions import ConfigEntryNotReady
|
from homeassistant.exceptions import ConfigEntryNotReady
|
||||||
|
|
||||||
from .helper import HAPID, HAPPIN
|
from .helper import HAPID, HAPPIN
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
|
||||||
|
|
||||||
|
|
||||||
async def test_auth_setup(hass):
|
async def test_auth_setup(hass):
|
||||||
"""Test auth setup for client registration."""
|
"""Test auth setup for client registration."""
|
||||||
@ -72,7 +70,7 @@ async def test_auth_auth_check_and_register_with_exception(hass):
|
|||||||
assert await hmip_auth.async_register() is False
|
assert await hmip_auth.async_register() is False
|
||||||
|
|
||||||
|
|
||||||
async def test_hap_setup_works(aioclient_mock):
|
async def test_hap_setup_works():
|
||||||
"""Test a successful setup of a accesspoint."""
|
"""Test a successful setup of a accesspoint."""
|
||||||
hass = Mock()
|
hass = Mock()
|
||||||
entry = Mock()
|
entry = Mock()
|
||||||
@ -109,15 +107,8 @@ async def test_hap_setup_connection_error():
|
|||||||
assert not hass.config_entries.flow.async_init.mock_calls
|
assert not hass.config_entries.flow.async_init.mock_calls
|
||||||
|
|
||||||
|
|
||||||
async def test_hap_reset_unloads_entry_if_setup(hass, default_mock_hap, hmip_config):
|
async def test_hap_reset_unloads_entry_if_setup(hass, default_mock_hap):
|
||||||
"""Test calling reset while the entry has been setup."""
|
"""Test calling reset while the entry has been setup."""
|
||||||
MockConfigEntry(
|
|
||||||
domain=HMIPC_DOMAIN,
|
|
||||||
unique_id=HAPID,
|
|
||||||
data=hmip_config[HMIPC_DOMAIN][0],
|
|
||||||
state=ENTRY_STATE_LOADED,
|
|
||||||
).add_to_hass(hass)
|
|
||||||
|
|
||||||
assert hass.data[HMIPC_DOMAIN][HAPID] == default_mock_hap
|
assert hass.data[HMIPC_DOMAIN][HAPID] == default_mock_hap
|
||||||
config_entries = hass.config_entries.async_entries(HMIPC_DOMAIN)
|
config_entries = hass.config_entries.async_entries(HMIPC_DOMAIN)
|
||||||
assert len(config_entries) == 1
|
assert len(config_entries) == 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user