From 824de2ef4cdcdd59e8827ebffdaf26c0ffb58904 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 28 Jun 2022 10:29:56 +0200 Subject: [PATCH] Modify behavior of lock groups (#74055) --- homeassistant/components/group/lock.py | 2 +- tests/components/group/test_lock.py | 28 +++++++++----------------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/homeassistant/components/group/lock.py b/homeassistant/components/group/lock.py index fe9503137c6..610e15f3ecc 100644 --- a/homeassistant/components/group/lock.py +++ b/homeassistant/components/group/lock.py @@ -166,7 +166,7 @@ class LockGroup(GroupEntity, LockEntity): if (state := self.hass.states.get(entity_id)) is not None ] - valid_state = all( + valid_state = any( state not in (STATE_UNKNOWN, STATE_UNAVAILABLE) for state in states ) diff --git a/tests/components/group/test_lock.py b/tests/components/group/test_lock.py index e76e47577c6..4b12bcfbd7c 100644 --- a/tests/components/group/test_lock.py +++ b/tests/components/group/test_lock.py @@ -90,28 +90,10 @@ async def test_state_reporting(hass): await hass.async_block_till_done() assert hass.states.get("lock.lock_group").state == STATE_UNAVAILABLE - # At least one member unknown or unavailable -> group unknown + # The group state is unknown if all group members are unknown or unavailable. for state_1 in ( - STATE_JAMMED, - STATE_LOCKED, - STATE_LOCKING, - STATE_UNKNOWN, - STATE_UNLOCKED, - STATE_UNLOCKING, - ): - hass.states.async_set("lock.test1", state_1) - hass.states.async_set("lock.test2", STATE_UNAVAILABLE) - await hass.async_block_till_done() - assert hass.states.get("lock.lock_group").state == STATE_UNKNOWN - - for state_1 in ( - STATE_JAMMED, - STATE_LOCKED, - STATE_LOCKING, STATE_UNAVAILABLE, STATE_UNKNOWN, - STATE_UNLOCKED, - STATE_UNLOCKING, ): hass.states.async_set("lock.test1", state_1) hass.states.async_set("lock.test2", STATE_UNKNOWN) @@ -123,6 +105,8 @@ async def test_state_reporting(hass): STATE_JAMMED, STATE_LOCKED, STATE_LOCKING, + STATE_UNAVAILABLE, + STATE_UNKNOWN, STATE_UNLOCKED, STATE_UNLOCKING, ): @@ -135,6 +119,8 @@ async def test_state_reporting(hass): for state_1 in ( STATE_LOCKED, STATE_LOCKING, + STATE_UNAVAILABLE, + STATE_UNKNOWN, STATE_UNLOCKED, STATE_UNLOCKING, ): @@ -146,6 +132,8 @@ async def test_state_reporting(hass): # At least one member unlocking -> group unlocking for state_1 in ( STATE_LOCKED, + STATE_UNAVAILABLE, + STATE_UNKNOWN, STATE_UNLOCKED, STATE_UNLOCKING, ): @@ -157,6 +145,8 @@ async def test_state_reporting(hass): # At least one member unlocked -> group unlocked for state_1 in ( STATE_LOCKED, + STATE_UNAVAILABLE, + STATE_UNKNOWN, STATE_UNLOCKED, ): hass.states.async_set("lock.test1", state_1)