From 10fa02a36c8b909106476fc217282bc5c98d08f9 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Sat, 14 Feb 2026 13:41:26 +0100 Subject: [PATCH] Small test cleanup for Fritz (#162993) --- homeassistant/components/fritz/const.py | 1 + homeassistant/components/fritz/coordinator.py | 3 ++- tests/components/fritz/test_binary_sensor.py | 4 ++-- tests/components/fritz/test_button.py | 9 +++++---- tests/components/fritz/test_image.py | 19 +++++++++++++------ tests/components/fritz/test_sensor.py | 16 +++++++++++----- 6 files changed, 34 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/fritz/const.py b/homeassistant/components/fritz/const.py index 32f52e68458..ab51c17d5a9 100644 --- a/homeassistant/components/fritz/const.py +++ b/homeassistant/components/fritz/const.py @@ -26,6 +26,7 @@ class MeshRoles(StrEnum): DOMAIN = "fritz" +SCAN_INTERVAL = 30 PLATFORMS = [ Platform.BINARY_SENSOR, diff --git a/homeassistant/components/fritz/coordinator.py b/homeassistant/components/fritz/coordinator.py index 2f4837e6f39..7ee5d07247e 100644 --- a/homeassistant/components/fritz/coordinator.py +++ b/homeassistant/components/fritz/coordinator.py @@ -48,6 +48,7 @@ from .const import ( DEFAULT_USERNAME, DOMAIN, FRITZ_EXCEPTIONS, + SCAN_INTERVAL, MeshRoles, ) from .helpers import _ha_is_stopping @@ -159,7 +160,7 @@ class FritzBoxTools(DataUpdateCoordinator[UpdateCoordinatorDataType]): config_entry=config_entry, logger=_LOGGER, name=f"{DOMAIN}-{host}-coordinator", - update_interval=timedelta(seconds=30), + update_interval=timedelta(seconds=SCAN_INTERVAL), ) self._devices: dict[str, FritzDevice] = {} diff --git a/tests/components/fritz/test_binary_sensor.py b/tests/components/fritz/test_binary_sensor.py index 1be1c79bdcf..2eb60408503 100644 --- a/tests/components/fritz/test_binary_sensor.py +++ b/tests/components/fritz/test_binary_sensor.py @@ -7,7 +7,7 @@ import pytest from syrupy.assertion import SnapshotAssertion from homeassistant.components.binary_sensor import STATE_ON -from homeassistant.components.fritz.const import DOMAIN +from homeassistant.components.fritz.const import DOMAIN, SCAN_INTERVAL from homeassistant.config_entries import ConfigEntryState from homeassistant.const import STATE_UNKNOWN, Platform from homeassistant.core import HomeAssistant @@ -64,7 +64,7 @@ async def test_binary_sensor_missing_state( "homeassistant.components.fritz.coordinator.FritzBoxTools._async_update_data", return_value={"entity_states": {}}, ): - freezer.tick(30) + freezer.tick(SCAN_INTERVAL) async_fire_time_changed(hass) await hass.async_block_till_done() diff --git a/tests/components/fritz/test_button.py b/tests/components/fritz/test_button.py index 068b07c4337..0bbd98b90bf 100644 --- a/tests/components/fritz/test_button.py +++ b/tests/components/fritz/test_button.py @@ -1,19 +1,18 @@ """Tests for Fritz!Tools button platform.""" from copy import deepcopy -from datetime import timedelta from unittest.mock import patch +from freezegun.api import FrozenDateTimeFactory import pytest from syrupy.assertion import SnapshotAssertion from homeassistant.components.button import DOMAIN as BUTTON_DOMAIN, SERVICE_PRESS -from homeassistant.components.fritz.const import DOMAIN, MeshRoles +from homeassistant.components.fritz.const import DOMAIN, SCAN_INTERVAL, MeshRoles from homeassistant.config_entries import ConfigEntryState from homeassistant.const import ATTR_ENTITY_ID, STATE_UNKNOWN, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import device_registry as dr, entity_registry as er -from homeassistant.util.dt import utcnow from .const import ( MOCK_HOST_ATTRIBUTES_DATA, @@ -123,6 +122,7 @@ async def test_wol_button( @pytest.mark.usefixtures("entity_registry_enabled_by_default") async def test_wol_button_new_device( hass: HomeAssistant, + freezer: FrozenDateTimeFactory, fc_class_mock, fh_class_mock, ) -> None: @@ -141,7 +141,8 @@ async def test_wol_button_new_device( mesh_data["nodes"].append(MOCK_NEW_DEVICE_NODE) fh_class_mock.get_mesh_topology.return_value = mesh_data - async_fire_time_changed(hass, utcnow() + timedelta(seconds=60)) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) assert hass.states.get("button.printer_wake_on_lan") diff --git a/tests/components/fritz/test_image.py b/tests/components/fritz/test_image.py index d8652bd6508..837539e9fce 100644 --- a/tests/components/fritz/test_image.py +++ b/tests/components/fritz/test_image.py @@ -1,20 +1,19 @@ """Tests for Fritz!Tools image platform.""" -from datetime import timedelta from http import HTTPStatus from unittest.mock import patch +from freezegun.api import FrozenDateTimeFactory import pytest from requests.exceptions import ReadTimeout from syrupy.assertion import SnapshotAssertion -from homeassistant.components.fritz.const import DOMAIN +from homeassistant.components.fritz.const import DOMAIN, SCAN_INTERVAL from homeassistant.components.image import DOMAIN as IMAGE_DOMAIN from homeassistant.config_entries import ConfigEntryState from homeassistant.const import STATE_UNKNOWN, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er -from homeassistant.util.dt import utcnow from .const import MOCK_FB_SERVICES, MOCK_USER_DATA @@ -143,6 +142,7 @@ async def test_image_update( hass: HomeAssistant, hass_client: ClientSessionGenerator, snapshot: SnapshotAssertion, + freezer: FrozenDateTimeFactory, fc_class_mock, fh_class_mock, ) -> None: @@ -166,7 +166,9 @@ async def test_image_update( assert resp.status == HTTPStatus.OK fc_class_mock().override_services({**MOCK_FB_SERVICES, **GUEST_WIFI_CHANGED}) - async_fire_time_changed(hass, utcnow() + timedelta(seconds=60)) + + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) resp = await client.get("/api/image_proxy/image.mock_title_guestwifi") @@ -179,6 +181,7 @@ async def test_image_update( @pytest.mark.parametrize(("fc_data"), [({**MOCK_FB_SERVICES, **GUEST_WIFI_ENABLED})]) async def test_image_update_unavailable( hass: HomeAssistant, + freezer: FrozenDateTimeFactory, fc_class_mock, fh_class_mock, ) -> None: @@ -201,7 +204,9 @@ async def test_image_update_unavailable( # fritzbox becomes unavailable fc_class_mock().call_action_side_effect(ReadTimeout) - async_fire_time_changed(hass, utcnow() + timedelta(seconds=60)) + + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get("image.mock_title_guestwifi") @@ -209,7 +214,9 @@ async def test_image_update_unavailable( # fritzbox is available again fc_class_mock().call_action_side_effect(None) - async_fire_time_changed(hass, utcnow() + timedelta(seconds=60)) + + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get("image.mock_title_guestwifi") diff --git a/tests/components/fritz/test_sensor.py b/tests/components/fritz/test_sensor.py index 792a5093a22..d8820eb9b0e 100644 --- a/tests/components/fritz/test_sensor.py +++ b/tests/components/fritz/test_sensor.py @@ -2,19 +2,19 @@ from __future__ import annotations -from datetime import UTC, datetime, timedelta +from datetime import UTC, datetime from unittest.mock import patch +from freezegun.api import FrozenDateTimeFactory from fritzconnection.core.exceptions import FritzConnectionException import pytest from syrupy.assertion import SnapshotAssertion -from homeassistant.components.fritz.const import DOMAIN +from homeassistant.components.fritz.const import DOMAIN, SCAN_INTERVAL from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.const import STATE_UNAVAILABLE, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er -from homeassistant.util import dt as dt_util from .const import MOCK_USER_DATA @@ -44,7 +44,11 @@ async def test_sensor_setup( async def test_sensor_update_fail( - hass: HomeAssistant, caplog: pytest.LogCaptureFixture, fc_class_mock, fh_class_mock + hass: HomeAssistant, + caplog: pytest.LogCaptureFixture, + freezer: FrozenDateTimeFactory, + fc_class_mock, + fh_class_mock, ) -> None: """Test failed update of Fritz!Tools sensors.""" @@ -55,7 +59,9 @@ async def test_sensor_update_fail( await hass.async_block_till_done() fc_class_mock().call_action_side_effect(FritzConnectionException("Boom")) - async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=300)) + + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) assert "Error while updating the data: Boom" in caplog.text