Speed up demo lock tests (#61425)

This commit is contained in:
Erik Montnemery 2021-12-10 11:13:44 +01:00 committed by GitHub
parent b5c5528082
commit 281b5e1c22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 24 deletions

View File

@ -10,6 +10,8 @@ from homeassistant.const import (
STATE_UNLOCKING, STATE_UNLOCKING,
) )
LOCK_UNLOCK_DELAY = 2 # Used to give a realistic lock/unlock experience in frontend
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): async def async_setup_platform(hass, config, async_add_entities, discovery_info=None):
"""Set up the Demo lock platform.""" """Set up the Demo lock platform."""
@ -72,7 +74,7 @@ class DemoLock(LockEntity):
"""Lock the device.""" """Lock the device."""
self._state = STATE_LOCKING self._state = STATE_LOCKING
self.async_write_ha_state() self.async_write_ha_state()
await asyncio.sleep(2) await asyncio.sleep(LOCK_UNLOCK_DELAY)
if self._jam_on_operation: if self._jam_on_operation:
self._state = STATE_JAMMED self._state = STATE_JAMMED
else: else:
@ -83,7 +85,7 @@ class DemoLock(LockEntity):
"""Unlock the device.""" """Unlock the device."""
self._state = STATE_UNLOCKING self._state = STATE_UNLOCKING
self.async_write_ha_state() self.async_write_ha_state()
await asyncio.sleep(2) await asyncio.sleep(LOCK_UNLOCK_DELAY)
self._state = STATE_UNLOCKED self._state = STATE_UNLOCKED
self.async_write_ha_state() self.async_write_ha_state()

View File

@ -1,9 +1,9 @@
"""The tests for the Demo lock platform.""" """The tests for the Demo lock platform."""
import asyncio from unittest.mock import patch
import pytest import pytest
from homeassistant.components.demo import DOMAIN from homeassistant.components.demo import DOMAIN, lock as demo_lock
from homeassistant.components.lock import ( from homeassistant.components.lock import (
DOMAIN as LOCK_DOMAIN, DOMAIN as LOCK_DOMAIN,
SERVICE_LOCK, SERVICE_LOCK,
@ -15,10 +15,10 @@ from homeassistant.components.lock import (
STATE_UNLOCKED, STATE_UNLOCKED,
STATE_UNLOCKING, STATE_UNLOCKING,
) )
from homeassistant.const import ATTR_ENTITY_ID from homeassistant.const import ATTR_ENTITY_ID, EVENT_STATE_CHANGED
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import async_mock_service from tests.common import async_capture_events, async_mock_service
FRONT = "lock.front_door" FRONT = "lock.front_door"
KITCHEN = "lock.kitchen_door" KITCHEN = "lock.kitchen_door"
@ -35,54 +35,64 @@ async def setup_comp(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
@patch.object(demo_lock, "LOCK_UNLOCK_DELAY", 0)
async def test_locking(hass): async def test_locking(hass):
"""Test the locking of a lock.""" """Test the locking of a lock."""
state = hass.states.get(KITCHEN) state = hass.states.get(KITCHEN)
assert state.state == STATE_UNLOCKED assert state.state == STATE_UNLOCKED
await hass.async_block_till_done()
state_changes = async_capture_events(hass, EVENT_STATE_CHANGED)
await hass.services.async_call( await hass.services.async_call(
LOCK_DOMAIN, SERVICE_LOCK, {ATTR_ENTITY_ID: KITCHEN}, blocking=False LOCK_DOMAIN, SERVICE_LOCK, {ATTR_ENTITY_ID: KITCHEN}, blocking=False
) )
await hass.async_block_till_done()
await asyncio.sleep(1) assert state_changes[0].data["entity_id"] == KITCHEN
state = hass.states.get(KITCHEN) assert state_changes[0].data["new_state"].state == STATE_LOCKING
assert state.state == STATE_LOCKING
await asyncio.sleep(2) assert state_changes[1].data["entity_id"] == KITCHEN
state = hass.states.get(KITCHEN) assert state_changes[1].data["new_state"].state == STATE_LOCKED
assert state.state == STATE_LOCKED
@patch.object(demo_lock, "LOCK_UNLOCK_DELAY", 0)
async def test_unlocking(hass): async def test_unlocking(hass):
"""Test the unlocking of a lock.""" """Test the unlocking of a lock."""
state = hass.states.get(FRONT) state = hass.states.get(FRONT)
assert state.state == STATE_LOCKED assert state.state == STATE_LOCKED
await hass.async_block_till_done()
state_changes = async_capture_events(hass, EVENT_STATE_CHANGED)
await hass.services.async_call( await hass.services.async_call(
LOCK_DOMAIN, SERVICE_UNLOCK, {ATTR_ENTITY_ID: FRONT}, blocking=False LOCK_DOMAIN, SERVICE_UNLOCK, {ATTR_ENTITY_ID: FRONT}, blocking=False
) )
await asyncio.sleep(1) await hass.async_block_till_done()
state = hass.states.get(FRONT)
assert state.state == STATE_UNLOCKING assert state_changes[0].data["entity_id"] == FRONT
await asyncio.sleep(2) assert state_changes[0].data["new_state"].state == STATE_UNLOCKING
state = hass.states.get(FRONT)
assert state.state == STATE_UNLOCKED assert state_changes[1].data["entity_id"] == FRONT
assert state_changes[1].data["new_state"].state == STATE_UNLOCKED
@patch.object(demo_lock, "LOCK_UNLOCK_DELAY", 0)
async def test_jammed_when_locking(hass): async def test_jammed_when_locking(hass):
"""Test the locking of a lock jams.""" """Test the locking of a lock jams."""
state = hass.states.get(POORLY_INSTALLED) state = hass.states.get(POORLY_INSTALLED)
assert state.state == STATE_UNLOCKED assert state.state == STATE_UNLOCKED
await hass.async_block_till_done()
state_changes = async_capture_events(hass, EVENT_STATE_CHANGED)
await hass.services.async_call( await hass.services.async_call(
LOCK_DOMAIN, SERVICE_LOCK, {ATTR_ENTITY_ID: POORLY_INSTALLED}, blocking=False LOCK_DOMAIN, SERVICE_LOCK, {ATTR_ENTITY_ID: POORLY_INSTALLED}, blocking=False
) )
await hass.async_block_till_done()
await asyncio.sleep(1) assert state_changes[0].data["entity_id"] == POORLY_INSTALLED
state = hass.states.get(POORLY_INSTALLED) assert state_changes[0].data["new_state"].state == STATE_LOCKING
assert state.state == STATE_LOCKING
await asyncio.sleep(2) assert state_changes[1].data["entity_id"] == POORLY_INSTALLED
state = hass.states.get(POORLY_INSTALLED) assert state_changes[1].data["new_state"].state == STATE_JAMMED
assert state.state == STATE_JAMMED
async def test_opening_mocked(hass): async def test_opening_mocked(hass):