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 unittest.mock import patch
from aioflo.errors import RequestError 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.const import DOMAIN as FLO_DOMAIN
from homeassistant.components.flo.device import FloDeviceDataUpdateCoordinator 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.core import HomeAssistant
from homeassistant.helpers.update_coordinator import UpdateFailed
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from homeassistant.util import dt as dt_util
from .common import TEST_PASSWORD, TEST_USER_ID from .common import TEST_PASSWORD, TEST_USER_ID
@ -24,6 +22,7 @@ async def test_device(
config_entry, config_entry,
aioclient_mock_fixture, aioclient_mock_fixture,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
freezer: FrozenDateTimeFactory,
) -> None: ) -> None:
"""Test Flo by Moen devices.""" """Test Flo by Moen devices."""
config_entry.add_to_hass(hass) config_entry.add_to_hass(hass)
@ -83,18 +82,47 @@ async def test_device(
call_count = aioclient_mock.call_count 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() await hass.async_block_till_done()
assert aioclient_mock.call_count == call_count + 6 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( with patch(
"homeassistant.components.flo.device.FloDeviceDataUpdateCoordinator.send_presence_ping", "homeassistant.components.flo.device.FloDeviceDataUpdateCoordinator.send_presence_ping",
side_effect=RequestError, side_effect=RequestError,
), pytest.raises(UpdateFailed): ):
# simulate 4 updates failing # simulate 4 updates failing. The failures should be buffered so that it takes 4
await valve._async_update_data() # consecutive failures to mark the device and entities as unavailable.
await valve._async_update_data() await move_time_and_assert_state("home")
await valve._async_update_data() await move_time_and_assert_state("home")
await valve._async_update_data() await move_time_and_assert_state("home")
await move_time_and_assert_state(STATE_UNAVAILABLE)