mirror of https://github.com/home-assistant/core
133 lines
4.0 KiB
Python
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,
|
|
)
|