mirror of
https://github.com/home-assistant/core.git
synced 2025-04-26 18:27:51 +00:00
Try to fix flaky Risco test (#44788)
This commit is contained in:
parent
3a32e16f4d
commit
e9f7e67f4c
@ -60,10 +60,16 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
|
|||||||
EVENTS_COORDINATOR: events_coordinator,
|
EVENTS_COORDINATOR: events_coordinator,
|
||||||
}
|
}
|
||||||
|
|
||||||
for component in PLATFORMS:
|
async def start_platforms():
|
||||||
hass.async_create_task(
|
await asyncio.gather(
|
||||||
hass.config_entries.async_forward_entry_setup(entry, component)
|
*[
|
||||||
|
hass.config_entries.async_forward_entry_setup(entry, component)
|
||||||
|
for component in PLATFORMS
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
await events_coordinator.async_refresh()
|
||||||
|
|
||||||
|
hass.async_create_task(start_platforms())
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -73,7 +73,6 @@ class RiscoSensor(CoordinatorEntity):
|
|||||||
self.async_on_remove(
|
self.async_on_remove(
|
||||||
self.coordinator.async_add_listener(self._refresh_from_coordinator)
|
self.coordinator.async_add_listener(self._refresh_from_coordinator)
|
||||||
)
|
)
|
||||||
await self.coordinator.async_request_refresh()
|
|
||||||
|
|
||||||
def _refresh_from_coordinator(self):
|
def _refresh_from_coordinator(self):
|
||||||
events = self.coordinator.data
|
events = self.coordinator.data
|
||||||
|
@ -167,7 +167,7 @@ async def _check_state(hass, alarm, property, state, entity_id, partition_id):
|
|||||||
|
|
||||||
async def test_states(hass, two_part_alarm):
|
async def test_states(hass, two_part_alarm):
|
||||||
"""Test the various alarm states."""
|
"""Test the various alarm states."""
|
||||||
await setup_risco(hass, CUSTOM_MAPPING_OPTIONS)
|
await setup_risco(hass, [], CUSTOM_MAPPING_OPTIONS)
|
||||||
|
|
||||||
assert hass.states.get(FIRST_ENTITY_ID).state == STATE_UNKNOWN
|
assert hass.states.get(FIRST_ENTITY_ID).state == STATE_UNKNOWN
|
||||||
for partition_id, entity_id in {0: FIRST_ENTITY_ID, 1: SECOND_ENTITY_ID}.items():
|
for partition_id, entity_id in {0: FIRST_ENTITY_ID, 1: SECOND_ENTITY_ID}.items():
|
||||||
@ -249,7 +249,7 @@ async def _call_alarm_service(hass, service, entity_id, **kwargs):
|
|||||||
|
|
||||||
async def test_sets_custom_mapping(hass, two_part_alarm):
|
async def test_sets_custom_mapping(hass, two_part_alarm):
|
||||||
"""Test settings the various modes when mapping some states."""
|
"""Test settings the various modes when mapping some states."""
|
||||||
await setup_risco(hass, CUSTOM_MAPPING_OPTIONS)
|
await setup_risco(hass, [], CUSTOM_MAPPING_OPTIONS)
|
||||||
|
|
||||||
registry = await hass.helpers.entity_registry.async_get_registry()
|
registry = await hass.helpers.entity_registry.async_get_registry()
|
||||||
entity = registry.async_get(FIRST_ENTITY_ID)
|
entity = registry.async_get(FIRST_ENTITY_ID)
|
||||||
@ -275,7 +275,7 @@ async def test_sets_custom_mapping(hass, two_part_alarm):
|
|||||||
|
|
||||||
async def test_sets_full_custom_mapping(hass, two_part_alarm):
|
async def test_sets_full_custom_mapping(hass, two_part_alarm):
|
||||||
"""Test settings the various modes when mapping all states."""
|
"""Test settings the various modes when mapping all states."""
|
||||||
await setup_risco(hass, FULL_CUSTOM_MAPPING)
|
await setup_risco(hass, [], FULL_CUSTOM_MAPPING)
|
||||||
|
|
||||||
registry = await hass.helpers.entity_registry.async_get_registry()
|
registry = await hass.helpers.entity_registry.async_get_registry()
|
||||||
entity = registry.async_get(FIRST_ENTITY_ID)
|
entity = registry.async_get(FIRST_ENTITY_ID)
|
||||||
@ -309,7 +309,7 @@ async def test_sets_full_custom_mapping(hass, two_part_alarm):
|
|||||||
|
|
||||||
async def test_sets_with_correct_code(hass, two_part_alarm):
|
async def test_sets_with_correct_code(hass, two_part_alarm):
|
||||||
"""Test settings the various modes when code is required."""
|
"""Test settings the various modes when code is required."""
|
||||||
await setup_risco(hass, {**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS})
|
await setup_risco(hass, [], {**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS})
|
||||||
|
|
||||||
code = {"code": 1234}
|
code = {"code": 1234}
|
||||||
await _test_service_call(
|
await _test_service_call(
|
||||||
@ -351,7 +351,7 @@ async def test_sets_with_correct_code(hass, two_part_alarm):
|
|||||||
|
|
||||||
async def test_sets_with_incorrect_code(hass, two_part_alarm):
|
async def test_sets_with_incorrect_code(hass, two_part_alarm):
|
||||||
"""Test settings the various modes when code is required and incorrect."""
|
"""Test settings the various modes when code is required and incorrect."""
|
||||||
await setup_risco(hass, {**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS})
|
await setup_risco(hass, [], {**CUSTOM_MAPPING_OPTIONS, **CODES_REQUIRED_OPTIONS})
|
||||||
|
|
||||||
code = {"code": 4321}
|
code = {"code": 4321}
|
||||||
await _test_no_service_call(
|
await _test_no_service_call(
|
||||||
|
@ -1,17 +1,19 @@
|
|||||||
"""Tests for the Risco event sensors."""
|
"""Tests for the Risco event sensors."""
|
||||||
from unittest.mock import MagicMock, patch
|
from datetime import timedelta
|
||||||
|
from unittest.mock import MagicMock, PropertyMock, patch
|
||||||
|
|
||||||
from homeassistant.components.risco import (
|
from homeassistant.components.risco import (
|
||||||
LAST_EVENT_TIMESTAMP_KEY,
|
LAST_EVENT_TIMESTAMP_KEY,
|
||||||
CannotConnectError,
|
CannotConnectError,
|
||||||
UnauthorizedError,
|
UnauthorizedError,
|
||||||
)
|
)
|
||||||
from homeassistant.components.risco.const import DOMAIN, EVENTS_COORDINATOR
|
from homeassistant.components.risco.const import DOMAIN
|
||||||
|
from homeassistant.util import dt
|
||||||
|
|
||||||
from .util import TEST_CONFIG, setup_risco
|
from .util import TEST_CONFIG, TEST_SITE_UUID, setup_risco
|
||||||
from .util import two_zone_alarm # noqa: F401
|
from .util import two_zone_alarm # noqa: F401
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry, async_fire_time_changed
|
||||||
|
|
||||||
ENTITY_IDS = {
|
ENTITY_IDS = {
|
||||||
"Alarm": "sensor.risco_test_site_name_alarm_events",
|
"Alarm": "sensor.risco_test_site_name_alarm_events",
|
||||||
@ -171,31 +173,28 @@ async def test_setup(hass, two_zone_alarm): # noqa: F811
|
|||||||
assert not registry.async_is_registered(id)
|
assert not registry.async_is_registered(id)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.risco.RiscoAPI.get_events",
|
"homeassistant.components.risco.RiscoAPI.site_uuid",
|
||||||
return_value=TEST_EVENTS,
|
new_callable=PropertyMock(return_value=TEST_SITE_UUID),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.risco.Store.async_save",
|
"homeassistant.components.risco.Store.async_save",
|
||||||
) as save_mock:
|
) as save_mock:
|
||||||
entry = await setup_risco(hass)
|
await setup_risco(hass, TEST_EVENTS)
|
||||||
await hass.async_block_till_done()
|
for id in ENTITY_IDS.values():
|
||||||
|
assert registry.async_is_registered(id)
|
||||||
|
|
||||||
save_mock.assert_awaited_once_with(
|
save_mock.assert_awaited_once_with(
|
||||||
{LAST_EVENT_TIMESTAMP_KEY: TEST_EVENTS[0].time}
|
{LAST_EVENT_TIMESTAMP_KEY: TEST_EVENTS[0].time}
|
||||||
)
|
)
|
||||||
|
for category, entity_id in ENTITY_IDS.items():
|
||||||
|
_check_state(hass, category, entity_id)
|
||||||
|
|
||||||
for id in ENTITY_IDS.values():
|
|
||||||
assert registry.async_is_registered(id)
|
|
||||||
|
|
||||||
for category, entity_id in ENTITY_IDS.items():
|
|
||||||
_check_state(hass, category, entity_id)
|
|
||||||
|
|
||||||
coordinator = hass.data[DOMAIN][entry.entry_id][EVENTS_COORDINATOR]
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.risco.RiscoAPI.get_events", return_value=[]
|
"homeassistant.components.risco.RiscoAPI.get_events", return_value=[]
|
||||||
) as events_mock, patch(
|
) as events_mock, patch(
|
||||||
"homeassistant.components.risco.Store.async_load",
|
"homeassistant.components.risco.Store.async_load",
|
||||||
return_value={LAST_EVENT_TIMESTAMP_KEY: TEST_EVENTS[0].time},
|
return_value={LAST_EVENT_TIMESTAMP_KEY: TEST_EVENTS[0].time},
|
||||||
):
|
):
|
||||||
await coordinator.async_refresh()
|
async_fire_time_changed(hass, dt.utcnow() + timedelta(seconds=65))
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
events_mock.assert_awaited_once_with(TEST_EVENTS[0].time, 10)
|
events_mock.assert_awaited_once_with(TEST_EVENTS[0].time, 10)
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ TEST_SITE_UUID = "test-site-uuid"
|
|||||||
TEST_SITE_NAME = "test-site-name"
|
TEST_SITE_NAME = "test-site-name"
|
||||||
|
|
||||||
|
|
||||||
async def setup_risco(hass, options={}):
|
async def setup_risco(hass, events=[], options={}):
|
||||||
"""Set up a Risco integration for testing."""
|
"""Set up a Risco integration for testing."""
|
||||||
config_entry = MockConfigEntry(domain=DOMAIN, data=TEST_CONFIG, options=options)
|
config_entry = MockConfigEntry(domain=DOMAIN, data=TEST_CONFIG, options=options)
|
||||||
config_entry.add_to_hass(hass)
|
config_entry.add_to_hass(hass)
|
||||||
@ -33,6 +33,9 @@ async def setup_risco(hass, options={}):
|
|||||||
new_callable=PropertyMock(return_value=TEST_SITE_NAME),
|
new_callable=PropertyMock(return_value=TEST_SITE_NAME),
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.risco.RiscoAPI.close"
|
"homeassistant.components.risco.RiscoAPI.close"
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.risco.RiscoAPI.get_events",
|
||||||
|
return_value=events,
|
||||||
):
|
):
|
||||||
await hass.config_entries.async_setup(config_entry.entry_id)
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user