hass-core/tests/components/homekit_controller/test_lock.py
Jc2k 995758b8ac Add more HomeKit controller tests (#20515)
* homekit_controller tests: automatically find entity ids in tests

Some entities use dynamic ids because of the nature of the test fakes it is
hard to predict the name of the entity that will be created. This inspects the
EntityComponent of the domain to find the freshly created entity.

* homekit_controller: Tests can now define their own Service models.

All existing tests use models as defined upstream. But upstream only defines a
few service models. This adds a generic model helper for creating test
service/characteristic models.

* homekit_controller: Add cover tests

* homekit_controller: Add lock tests

* homekit_controller: Add alarm_control_panel tests

* homekit_controller: Update light tests for color_temp.

* Revert "homekit_controller tests: automatically find entity ids in tests"

This reverts commit 506caa4c3e.

* homekit_controller: Mock entity name so entity_id is consistent.

Also remove spurious subclass overrides that are identical to parent class.

* homekit_controler: Make tests less awkward as allowed top level imports
2019-01-28 13:20:32 +01:00

59 lines
2.2 KiB
Python

"""Basic checks for HomeKitLock."""
from tests.components.homekit_controller.common import (
FakeService, 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():
"""Define a lock characteristics as per page 219 of HAP spec."""
service = FakeService('public.hap.service.lock-mechanism')
cur_state = service.add_characteristic('lock-mechanism.current-state')
cur_state.value = 0
targ_state = service.add_characteristic('lock-mechanism.target-state')
targ_state.value = 0
# According to the spec, a battery-level characteristic is normally
# part of a seperate service. However as the code was written (which
# predates this test) the battery level would have to be part of the lock
# service as it is here.
targ_state = service.add_characteristic('battery-level')
targ_state.value = 50
return service
async def test_switch_change_lock_state(hass, utcnow):
"""Test that we can turn a HomeKit lock on and off again."""
lock = create_lock_service()
helper = await setup_test_component(hass, [lock])
await hass.services.async_call('lock', 'lock', {
'entity_id': 'lock.testdevice',
}, blocking=True)
assert helper.characteristics[LOCK_TARGET_STATE].value == 1
await hass.services.async_call('lock', 'unlock', {
'entity_id': 'lock.testdevice',
}, blocking=True)
assert helper.characteristics[LOCK_TARGET_STATE].value == 0
async def test_switch_read_lock_state(hass, utcnow):
"""Test that we can read the state of a HomeKit lock accessory."""
lock = create_lock_service()
helper = await setup_test_component(hass, [lock])
helper.characteristics[LOCK_CURRENT_STATE].value = 0
helper.characteristics[LOCK_TARGET_STATE].value = 0
state = await helper.poll_and_get_state()
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()
assert state.state == 'locked'