core/tests/components/homematicip_cloud/test_lock.py

133 lines
4.0 KiB
Python

"""Tests for HomematicIP Cloud locks."""
from unittest.mock import patch
from homematicip.base.enums import LockState as HomematicLockState, MotorState
import pytest
from homeassistant.components.homematicip_cloud import DOMAIN as HMIPC_DOMAIN
from homeassistant.components.lock import (
DOMAIN as LOCK_DOMAIN,
LockEntityFeature,
LockState,
)
from homeassistant.const import ATTR_SUPPORTED_FEATURES
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.setup import async_setup_component
from .helper import HomeFactory, async_manipulate_test_data, get_and_check_entity_basics
async def test_manually_configured_platform(hass: HomeAssistant) -> None:
"""Test that we do not set up an access point."""
assert await async_setup_component(
hass, LOCK_DOMAIN, {LOCK_DOMAIN: {"platform": HMIPC_DOMAIN}}
)
assert not hass.data.get(HMIPC_DOMAIN)
async def test_hmip_doorlockdrive(
hass: HomeAssistant, default_mock_hap_factory: HomeFactory
) -> None:
"""Test HomematicipDoorLockDrive."""
entity_id = "lock.haustuer"
entity_name = "Haustuer"
device_model = "HmIP-DLD"
mock_hap = await default_mock_hap_factory.async_get_mock_hap(
test_devices=[entity_name]
)
ha_state, hmip_device = get_and_check_entity_basics(
hass, mock_hap, entity_id, entity_name, device_model
)
assert ha_state.attributes[ATTR_SUPPORTED_FEATURES] == LockEntityFeature.OPEN
await hass.services.async_call(
"lock",
"open",
{"entity_id": entity_id},
blocking=True,
)
assert hmip_device.mock_calls[-1][0] == "set_lock_state"
assert hmip_device.mock_calls[-1][1] == (HomematicLockState.OPEN,)
await hass.services.async_call(
"lock",
"lock",
{"entity_id": entity_id},
blocking=True,
)
assert hmip_device.mock_calls[-1][0] == "set_lock_state"
assert hmip_device.mock_calls[-1][1] == (HomematicLockState.LOCKED,)
await hass.services.async_call(
"lock",
"unlock",
{"entity_id": entity_id},
blocking=True,
)
assert hmip_device.mock_calls[-1][0] == "set_lock_state"
assert hmip_device.mock_calls[-1][1] == (HomematicLockState.UNLOCKED,)
await async_manipulate_test_data(
hass, hmip_device, "motorState", MotorState.CLOSING
)
ha_state = hass.states.get(entity_id)
assert ha_state.state == LockState.LOCKING
await async_manipulate_test_data(
hass, hmip_device, "motorState", MotorState.OPENING
)
ha_state = hass.states.get(entity_id)
assert ha_state.state == LockState.UNLOCKING
async def test_hmip_doorlockdrive_handle_errors(
hass: HomeAssistant, default_mock_hap_factory: HomeFactory
) -> None:
"""Test HomematicipDoorLockDrive."""
entity_id = "lock.haustuer"
entity_name = "Haustuer"
device_model = "HmIP-DLD"
mock_hap = await default_mock_hap_factory.async_get_mock_hap(
test_devices=[entity_name]
)
with patch(
"homematicip.aio.device.AsyncDoorLockDrive.set_lock_state",
return_value={
"errorCode": "INVALID_NUMBER_PARAMETER_VALUE",
"minValue": 0.0,
"maxValue": 1.01,
},
):
get_and_check_entity_basics(
hass, mock_hap, entity_id, entity_name, device_model
)
with pytest.raises(HomeAssistantError):
await hass.services.async_call(
"lock",
"open",
{"entity_id": entity_id},
blocking=True,
)
with pytest.raises(HomeAssistantError):
await hass.services.async_call(
"lock",
"lock",
{"entity_id": entity_id},
blocking=True,
)
with pytest.raises(HomeAssistantError):
await hass.services.async_call(
"lock",
"unlock",
{"entity_id": entity_id},
blocking=True,
)