Improve homekit_controller tests (#65266)

This commit is contained in:
Jc2k 2022-01-30 22:59:39 +00:00 committed by GitHub
parent eb94fe1ca7
commit 58b8c30221
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 1487 additions and 650 deletions

View file

@ -4,9 +4,6 @@ from aiohomekit.model.services import ServicesTypes
from tests.components.homekit_controller.common import setup_test_component
LOCK_CURRENT_STATE = ("lock-mechanism", "lock-mechanism.current-state")
LOCK_TARGET_STATE = ("lock-mechanism", "lock-mechanism.target-state")
def create_lock_service(accessory):
"""Define a lock characteristics as per page 219 of HAP spec."""
@ -35,45 +32,83 @@ async def test_switch_change_lock_state(hass, utcnow):
await hass.services.async_call(
"lock", "lock", {"entity_id": "lock.testdevice"}, blocking=True
)
assert helper.characteristics[LOCK_TARGET_STATE].value == 1
helper.async_assert_service_values(
ServicesTypes.LOCK_MECHANISM,
{
CharacteristicsTypes.LOCK_MECHANISM_TARGET_STATE: 1,
},
)
await hass.services.async_call(
"lock", "unlock", {"entity_id": "lock.testdevice"}, blocking=True
)
assert helper.characteristics[LOCK_TARGET_STATE].value == 0
helper.async_assert_service_values(
ServicesTypes.LOCK_MECHANISM,
{
CharacteristicsTypes.LOCK_MECHANISM_TARGET_STATE: 0,
},
)
async def test_switch_read_lock_state(hass, utcnow):
"""Test that we can read the state of a HomeKit lock accessory."""
helper = await setup_test_component(hass, create_lock_service)
helper.characteristics[LOCK_CURRENT_STATE].value = 0
helper.characteristics[LOCK_TARGET_STATE].value = 0
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.LOCK_MECHANISM,
{
CharacteristicsTypes.LOCK_MECHANISM_CURRENT_STATE: 0,
CharacteristicsTypes.LOCK_MECHANISM_TARGET_STATE: 0,
},
)
assert state.state == "unlocked"
assert state.attributes["battery_level"] == 50
helper.characteristics[LOCK_CURRENT_STATE].value = 1
helper.characteristics[LOCK_TARGET_STATE].value = 1
state = await helper.poll_and_get_state()
state = await helper.async_update(
ServicesTypes.LOCK_MECHANISM,
{
CharacteristicsTypes.LOCK_MECHANISM_CURRENT_STATE: 1,
CharacteristicsTypes.LOCK_MECHANISM_TARGET_STATE: 1,
},
)
assert state.state == "locked"
helper.characteristics[LOCK_CURRENT_STATE].value = 2
helper.characteristics[LOCK_TARGET_STATE].value = 1
await helper.async_update(
ServicesTypes.LOCK_MECHANISM,
{
CharacteristicsTypes.LOCK_MECHANISM_CURRENT_STATE: 2,
CharacteristicsTypes.LOCK_MECHANISM_TARGET_STATE: 1,
},
)
state = await helper.poll_and_get_state()
assert state.state == "jammed"
helper.characteristics[LOCK_CURRENT_STATE].value = 3
helper.characteristics[LOCK_TARGET_STATE].value = 1
await helper.async_update(
ServicesTypes.LOCK_MECHANISM,
{
CharacteristicsTypes.LOCK_MECHANISM_CURRENT_STATE: 3,
CharacteristicsTypes.LOCK_MECHANISM_TARGET_STATE: 1,
},
)
state = await helper.poll_and_get_state()
assert state.state == "unknown"
helper.characteristics[LOCK_CURRENT_STATE].value = 0
helper.characteristics[LOCK_TARGET_STATE].value = 1
await helper.async_update(
ServicesTypes.LOCK_MECHANISM,
{
CharacteristicsTypes.LOCK_MECHANISM_CURRENT_STATE: 0,
CharacteristicsTypes.LOCK_MECHANISM_TARGET_STATE: 1,
},
)
state = await helper.poll_and_get_state()
assert state.state == "locking"
helper.characteristics[LOCK_CURRENT_STATE].value = 1
helper.characteristics[LOCK_TARGET_STATE].value = 0
await helper.async_update(
ServicesTypes.LOCK_MECHANISM,
{
CharacteristicsTypes.LOCK_MECHANISM_CURRENT_STATE: 1,
CharacteristicsTypes.LOCK_MECHANISM_TARGET_STATE: 0,
},
)
state = await helper.poll_and_get_state()
assert state.state == "unlocking"