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