Update Flo test to address review comment (#109604)

* Update Flo test to address review comment

* update comment

* clean up

* cleanup

* change mock

* remove unnecessary assert

* review comment
This commit is contained in:
David F. Mulcahey 2024-02-04 11:05:51 -05:00 committed by GitHub
parent 3db0331378
commit 8a9478b714
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -3,15 +3,13 @@ from datetime import timedelta
from unittest.mock import patch
from aioflo.errors import RequestError
import pytest
from freezegun.api import FrozenDateTimeFactory
from homeassistant.components.flo.const import DOMAIN as FLO_DOMAIN
from homeassistant.components.flo.device import FloDeviceDataUpdateCoordinator
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, STATE_UNAVAILABLE
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import UpdateFailed
from homeassistant.setup import async_setup_component
from homeassistant.util import dt as dt_util
from .common import TEST_PASSWORD, TEST_USER_ID
@ -24,6 +22,7 @@ async def test_device(
config_entry,
aioclient_mock_fixture,
aioclient_mock: AiohttpClientMocker,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test Flo by Moen devices."""
config_entry.add_to_hass(hass)
@ -83,18 +82,47 @@ async def test_device(
call_count = aioclient_mock.call_count
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=90))
freezer.tick(timedelta(seconds=90))
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert aioclient_mock.call_count == call_count + 6
# test error sending device ping
async def test_device_failures(
hass: HomeAssistant,
config_entry,
aioclient_mock_fixture,
aioclient_mock: AiohttpClientMocker,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test Flo by Moen devices buffer API failures."""
config_entry.add_to_hass(hass)
assert await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
def assert_state(state: str) -> None:
assert (
hass.states.get("sensor.smart_water_shutoff_current_system_mode").state
== state
)
assert_state("home")
async def move_time_and_assert_state(state: str) -> None:
freezer.tick(timedelta(seconds=65))
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert_state(state)
aioclient_mock.clear_requests()
with patch(
"homeassistant.components.flo.device.FloDeviceDataUpdateCoordinator.send_presence_ping",
side_effect=RequestError,
), pytest.raises(UpdateFailed):
# simulate 4 updates failing
await valve._async_update_data()
await valve._async_update_data()
await valve._async_update_data()
await valve._async_update_data()
):
# simulate 4 updates failing. The failures should be buffered so that it takes 4
# consecutive failures to mark the device and entities as unavailable.
await move_time_and_assert_state("home")
await move_time_and_assert_state("home")
await move_time_and_assert_state("home")
await move_time_and_assert_state(STATE_UNAVAILABLE)