Use freezegun in fronius tests (#99030)

This commit is contained in:
Erik Montnemery 2023-08-25 16:05:16 +02:00 committed by GitHub
parent 5617a738c0
commit 0d3663c52a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,13 +1,13 @@
"""Test the Fronius update coordinators."""
from unittest.mock import patch
from freezegun.api import FrozenDateTimeFactory
from pyfronius import BadStatusError, FroniusError
from homeassistant.components.fronius.coordinator import (
FroniusInverterUpdateCoordinator,
)
from homeassistant.core import HomeAssistant
from homeassistant.util import dt as dt_util
from . import mock_responses, setup_fronius_integration
@ -16,7 +16,9 @@ from tests.test_util.aiohttp import AiohttpClientMocker
async def test_adaptive_update_interval(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test coordinators changing their update interval when inverter not available."""
with patch("pyfronius.Fronius.current_inverter_data") as mock_inverter_data:
@ -25,9 +27,8 @@ async def test_adaptive_update_interval(
mock_inverter_data.assert_called_once()
mock_inverter_data.reset_mock()
async_fire_time_changed(
hass, dt_util.utcnow() + FroniusInverterUpdateCoordinator.default_interval
)
freezer.tick(FroniusInverterUpdateCoordinator.default_interval)
async_fire_time_changed(hass, None)
await hass.async_block_till_done()
mock_inverter_data.assert_called_once()
mock_inverter_data.reset_mock()
@ -35,33 +36,28 @@ async def test_adaptive_update_interval(
mock_inverter_data.side_effect = FroniusError()
# first 3 bad requests at default interval - 4th has different interval
for _ in range(3):
async_fire_time_changed(
hass,
dt_util.utcnow() + FroniusInverterUpdateCoordinator.default_interval,
)
freezer.tick(FroniusInverterUpdateCoordinator.default_interval)
async_fire_time_changed(hass, None)
await hass.async_block_till_done()
assert mock_inverter_data.call_count == 3
mock_inverter_data.reset_mock()
async_fire_time_changed(
hass, dt_util.utcnow() + FroniusInverterUpdateCoordinator.error_interval
)
freezer.tick(FroniusInverterUpdateCoordinator.error_interval)
async_fire_time_changed(hass, None)
await hass.async_block_till_done()
assert mock_inverter_data.call_count == 1
mock_inverter_data.reset_mock()
mock_inverter_data.side_effect = None
# next successful request resets to default interval
async_fire_time_changed(
hass, dt_util.utcnow() + FroniusInverterUpdateCoordinator.error_interval
)
freezer.tick(FroniusInverterUpdateCoordinator.error_interval)
async_fire_time_changed(hass, None)
await hass.async_block_till_done()
mock_inverter_data.assert_called_once()
mock_inverter_data.reset_mock()
async_fire_time_changed(
hass, dt_util.utcnow() + FroniusInverterUpdateCoordinator.default_interval
)
freezer.tick(FroniusInverterUpdateCoordinator.default_interval)
async_fire_time_changed(hass, None)
await hass.async_block_till_done()
mock_inverter_data.assert_called_once()
mock_inverter_data.reset_mock()
@ -70,10 +66,8 @@ async def test_adaptive_update_interval(
mock_inverter_data.side_effect = BadStatusError("mock_endpoint", 8)
# first 3 requests at default interval - 4th has different interval
for _ in range(3):
async_fire_time_changed(
hass,
dt_util.utcnow() + FroniusInverterUpdateCoordinator.default_interval,
)
freezer.tick(FroniusInverterUpdateCoordinator.default_interval)
async_fire_time_changed(hass, None)
await hass.async_block_till_done()
# BadStatusError does 3 silent retries for inverter endpoint * 3 request intervals = 9
assert mock_inverter_data.call_count == 9