Avoid retriggering HomeKit doorbells on forced updates (#74141)
This commit is contained in:
parent
ee6866b8a3
commit
629c68221e
3 changed files with 71 additions and 8 deletions
|
@ -642,11 +642,15 @@ async def test_camera_with_linked_motion_sensor(hass, run_driver, events):
|
|||
assert char
|
||||
|
||||
assert char.value is True
|
||||
broker = MagicMock()
|
||||
char.broker = broker
|
||||
|
||||
hass.states.async_set(
|
||||
motion_entity_id, STATE_OFF, {ATTR_DEVICE_CLASS: BinarySensorDeviceClass.MOTION}
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert len(broker.mock_calls) == 2
|
||||
broker.reset_mock()
|
||||
assert char.value is False
|
||||
|
||||
char.set_value(True)
|
||||
|
@ -654,8 +658,28 @@ async def test_camera_with_linked_motion_sensor(hass, run_driver, events):
|
|||
motion_entity_id, STATE_ON, {ATTR_DEVICE_CLASS: BinarySensorDeviceClass.MOTION}
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert len(broker.mock_calls) == 2
|
||||
broker.reset_mock()
|
||||
assert char.value is True
|
||||
|
||||
hass.states.async_set(
|
||||
motion_entity_id,
|
||||
STATE_ON,
|
||||
{ATTR_DEVICE_CLASS: BinarySensorDeviceClass.MOTION},
|
||||
force_update=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert len(broker.mock_calls) == 0
|
||||
broker.reset_mock()
|
||||
|
||||
hass.states.async_set(
|
||||
motion_entity_id,
|
||||
STATE_ON,
|
||||
{ATTR_DEVICE_CLASS: BinarySensorDeviceClass.MOTION, "other": "attr"},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert len(broker.mock_calls) == 0
|
||||
broker.reset_mock()
|
||||
# Ensure we do not throw when the linked
|
||||
# motion sensor is removed
|
||||
hass.states.async_remove(motion_entity_id)
|
||||
|
@ -747,7 +771,8 @@ async def test_camera_with_linked_doorbell_sensor(hass, run_driver, events):
|
|||
assert service2
|
||||
char2 = service.get_characteristic(CHAR_PROGRAMMABLE_SWITCH_EVENT)
|
||||
assert char2
|
||||
|
||||
broker = MagicMock()
|
||||
char2.broker = broker
|
||||
assert char2.value is None
|
||||
|
||||
hass.states.async_set(
|
||||
|
@ -758,9 +783,12 @@ async def test_camera_with_linked_doorbell_sensor(hass, run_driver, events):
|
|||
await hass.async_block_till_done()
|
||||
assert char.value is None
|
||||
assert char2.value is None
|
||||
assert len(broker.mock_calls) == 0
|
||||
|
||||
char.set_value(True)
|
||||
char2.set_value(True)
|
||||
broker.reset_mock()
|
||||
|
||||
hass.states.async_set(
|
||||
doorbell_entity_id,
|
||||
STATE_ON,
|
||||
|
@ -769,6 +797,31 @@ async def test_camera_with_linked_doorbell_sensor(hass, run_driver, events):
|
|||
await hass.async_block_till_done()
|
||||
assert char.value is None
|
||||
assert char2.value is None
|
||||
assert len(broker.mock_calls) == 2
|
||||
broker.reset_mock()
|
||||
|
||||
hass.states.async_set(
|
||||
doorbell_entity_id,
|
||||
STATE_ON,
|
||||
{ATTR_DEVICE_CLASS: BinarySensorDeviceClass.OCCUPANCY},
|
||||
force_update=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert char.value is None
|
||||
assert char2.value is None
|
||||
assert len(broker.mock_calls) == 0
|
||||
broker.reset_mock()
|
||||
|
||||
hass.states.async_set(
|
||||
doorbell_entity_id,
|
||||
STATE_ON,
|
||||
{ATTR_DEVICE_CLASS: BinarySensorDeviceClass.OCCUPANCY, "other": "attr"},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert char.value is None
|
||||
assert char2.value is None
|
||||
assert len(broker.mock_calls) == 0
|
||||
broker.reset_mock()
|
||||
|
||||
# Ensure we do not throw when the linked
|
||||
# doorbell sensor is removed
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue