mirror of
https://github.com/home-assistant/core.git
synced 2025-12-24 12:59:34 +00:00
Improve group tests (#73630)
This commit is contained in:
@@ -57,7 +57,16 @@ async def test_default_state(hass):
|
||||
|
||||
|
||||
async def test_state_reporting(hass):
|
||||
"""Test the state reporting."""
|
||||
"""Test the state reporting.
|
||||
|
||||
The group state is unavailable if all group members are unavailable.
|
||||
Otherwise, the group state is unknown if at least one group member is unknown or unavailable.
|
||||
Otherwise, the group state is jammed if at least one group member is jammed.
|
||||
Otherwise, the group state is locking if at least one group member is locking.
|
||||
Otherwise, the group state is unlocking if at least one group member is unlocking.
|
||||
Otherwise, the group state is unlocked if at least one group member is unlocked.
|
||||
Otherwise, the group state is locked.
|
||||
"""
|
||||
await async_setup_component(
|
||||
hass,
|
||||
LOCK_DOMAIN,
|
||||
@@ -72,43 +81,98 @@ async def test_state_reporting(hass):
|
||||
await hass.async_start()
|
||||
await hass.async_block_till_done()
|
||||
|
||||
hass.states.async_set("lock.test1", STATE_LOCKED)
|
||||
# Initial state with no group member in the state machine -> unavailable
|
||||
assert hass.states.get("lock.lock_group").state == STATE_UNAVAILABLE
|
||||
|
||||
# All group members unavailable -> unavailable
|
||||
hass.states.async_set("lock.test1", STATE_UNAVAILABLE)
|
||||
hass.states.async_set("lock.test2", STATE_UNAVAILABLE)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_UNKNOWN
|
||||
assert hass.states.get("lock.lock_group").state == STATE_UNAVAILABLE
|
||||
|
||||
hass.states.async_set("lock.test1", STATE_LOCKED)
|
||||
hass.states.async_set("lock.test2", STATE_UNLOCKED)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_UNLOCKED
|
||||
# At least one member unknown or unavailable -> group unknown
|
||||
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)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_UNKNOWN
|
||||
|
||||
# At least one member jammed -> group jammed
|
||||
for state_1 in (
|
||||
STATE_JAMMED,
|
||||
STATE_LOCKED,
|
||||
STATE_LOCKING,
|
||||
STATE_UNLOCKED,
|
||||
STATE_UNLOCKING,
|
||||
):
|
||||
hass.states.async_set("lock.test1", state_1)
|
||||
hass.states.async_set("lock.test2", STATE_JAMMED)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_JAMMED
|
||||
|
||||
# At least one member locking -> group unlocking
|
||||
for state_1 in (
|
||||
STATE_LOCKED,
|
||||
STATE_LOCKING,
|
||||
STATE_UNLOCKED,
|
||||
STATE_UNLOCKING,
|
||||
):
|
||||
hass.states.async_set("lock.test1", state_1)
|
||||
hass.states.async_set("lock.test2", STATE_LOCKING)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_LOCKING
|
||||
|
||||
# At least one member unlocking -> group unlocking
|
||||
for state_1 in (
|
||||
STATE_LOCKED,
|
||||
STATE_UNLOCKED,
|
||||
STATE_UNLOCKING,
|
||||
):
|
||||
hass.states.async_set("lock.test1", state_1)
|
||||
hass.states.async_set("lock.test2", STATE_UNLOCKING)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_UNLOCKING
|
||||
|
||||
# At least one member unlocked -> group unlocked
|
||||
for state_1 in (
|
||||
STATE_LOCKED,
|
||||
STATE_UNLOCKED,
|
||||
):
|
||||
hass.states.async_set("lock.test1", state_1)
|
||||
hass.states.async_set("lock.test2", STATE_UNLOCKED)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_UNLOCKED
|
||||
|
||||
# Otherwise -> locked
|
||||
hass.states.async_set("lock.test1", STATE_LOCKED)
|
||||
hass.states.async_set("lock.test2", STATE_LOCKED)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_LOCKED
|
||||
|
||||
hass.states.async_set("lock.test1", STATE_UNLOCKED)
|
||||
hass.states.async_set("lock.test2", STATE_UNLOCKED)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_UNLOCKED
|
||||
|
||||
hass.states.async_set("lock.test1", STATE_UNLOCKED)
|
||||
hass.states.async_set("lock.test2", STATE_JAMMED)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_JAMMED
|
||||
|
||||
hass.states.async_set("lock.test1", STATE_LOCKED)
|
||||
hass.states.async_set("lock.test2", STATE_UNLOCKING)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_UNLOCKING
|
||||
|
||||
hass.states.async_set("lock.test1", STATE_UNLOCKED)
|
||||
hass.states.async_set("lock.test2", STATE_LOCKING)
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_LOCKING
|
||||
|
||||
hass.states.async_set("lock.test1", STATE_UNAVAILABLE)
|
||||
hass.states.async_set("lock.test2", STATE_UNAVAILABLE)
|
||||
# All group members removed from the state machine -> unavailable
|
||||
hass.states.async_remove("lock.test1")
|
||||
hass.states.async_remove("lock.test2")
|
||||
await hass.async_block_till_done()
|
||||
assert hass.states.get("lock.lock_group").state == STATE_UNAVAILABLE
|
||||
|
||||
|
||||
Reference in New Issue
Block a user