Use freezer.tick in SamsungTV tests (#143954)

This commit is contained in:
epenet 2025-04-30 15:38:00 +02:00 committed by GitHub
parent 857db679ae
commit 8b9c4dadd0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 59 additions and 109 deletions

View File

@ -3,7 +3,6 @@
from __future__ import annotations from __future__ import annotations
from collections.abc import Awaitable, Callable, Generator from collections.abc import Awaitable, Callable, Generator
from datetime import datetime
from socket import AddressFamily # pylint: disable=no-name-in-module from socket import AddressFamily # pylint: disable=no-name-in-module
from typing import Any from typing import Any
from unittest.mock import AsyncMock, Mock, patch from unittest.mock import AsyncMock, Mock, patch
@ -21,7 +20,6 @@ from samsungtvws.exceptions import ResponseError
from samsungtvws.remote import ChannelEmitCommand from samsungtvws.remote import ChannelEmitCommand
from homeassistant.components.samsungtv.const import WEBSOCKET_SSL_PORT from homeassistant.components.samsungtv.const import WEBSOCKET_SSL_PORT
from homeassistant.util import dt as dt_util
from .const import SAMPLE_DEVICE_INFO_UE48JU6400, SAMPLE_DEVICE_INFO_WIFI from .const import SAMPLE_DEVICE_INFO_UE48JU6400, SAMPLE_DEVICE_INFO_WIFI
@ -285,12 +283,6 @@ def remoteencws_fixture() -> Generator[Mock]:
yield remoteencws yield remoteencws
@pytest.fixture
def mock_now() -> datetime:
"""Fixture for dtutil.now."""
return dt_util.utcnow()
@pytest.fixture(name="mac_address", autouse=True) @pytest.fixture(name="mac_address", autouse=True)
def mac_address_fixture() -> Generator[Mock]: def mac_address_fixture() -> Generator[Mock]:
"""Patch getmac.get_mac_address.""" """Patch getmac.get_mac_address."""

View File

@ -1,7 +1,7 @@
"""Tests for samsungtv component.""" """Tests for samsungtv component."""
from copy import deepcopy from copy import deepcopy
from datetime import datetime, timedelta from datetime import timedelta
import logging import logging
from unittest.mock import DEFAULT as DEFAULT_MOCK, AsyncMock, Mock, call, patch from unittest.mock import DEFAULT as DEFAULT_MOCK, AsyncMock, Mock, call, patch
@ -78,7 +78,6 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ServiceNotSupported from homeassistant.exceptions import ServiceNotSupported
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from homeassistant.util import dt as dt_util
from . import async_wait_config_entry_reload, setup_samsungtv_entry from . import async_wait_config_entry_reload, setup_samsungtv_entry
from .const import ( from .const import (
@ -153,7 +152,7 @@ async def test_setup_websocket(hass: HomeAssistant) -> None:
@pytest.mark.usefixtures("rest_api") @pytest.mark.usefixtures("rest_api")
async def test_setup_websocket_2( async def test_setup_websocket_2(
hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime hass: HomeAssistant, freezer: FrozenDateTimeFactory
) -> None: ) -> None:
"""Test setup of platform from config entry.""" """Test setup of platform from config entry."""
entity_id = f"{MP_DOMAIN}.fake" entity_id = f"{MP_DOMAIN}.fake"
@ -182,9 +181,8 @@ async def test_setup_websocket_2(
assert config_entries[0].data[CONF_MAC] == "aa:bb:aa:aa:aa:aa" assert config_entries[0].data[CONF_MAC] == "aa:bb:aa:aa:aa:aa"
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(entity_id) state = hass.states.get(entity_id)
@ -194,7 +192,7 @@ async def test_setup_websocket_2(
@pytest.mark.usefixtures("rest_api") @pytest.mark.usefixtures("rest_api")
async def test_setup_encrypted_websocket( async def test_setup_encrypted_websocket(
hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime hass: HomeAssistant, freezer: FrozenDateTimeFactory
) -> None: ) -> None:
"""Test setup of platform from config entry.""" """Test setup of platform from config entry."""
with patch( with patch(
@ -207,9 +205,8 @@ async def test_setup_encrypted_websocket(
await setup_samsungtv_entry(hass, MOCK_ENTRYDATA_ENCRYPTED_WS) await setup_samsungtv_entry(hass, MOCK_ENTRYDATA_ENCRYPTED_WS)
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -218,15 +215,12 @@ async def test_setup_encrypted_websocket(
@pytest.mark.usefixtures("remote") @pytest.mark.usefixtures("remote")
async def test_update_on( async def test_update_on(hass: HomeAssistant, freezer: FrozenDateTimeFactory) -> None:
hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime
) -> None:
"""Testing update tv on.""" """Testing update tv on."""
await setup_samsungtv_entry(hass, MOCK_CONFIG) await setup_samsungtv_entry(hass, MOCK_CONFIG)
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -234,9 +228,7 @@ async def test_update_on(
@pytest.mark.usefixtures("remote") @pytest.mark.usefixtures("remote")
async def test_update_off( async def test_update_off(hass: HomeAssistant, freezer: FrozenDateTimeFactory) -> None:
hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime
) -> None:
"""Testing update tv off.""" """Testing update tv off."""
await setup_samsungtv_entry(hass, MOCK_CONFIG) await setup_samsungtv_entry(hass, MOCK_CONFIG)
@ -244,9 +236,8 @@ async def test_update_off(
"homeassistant.components.samsungtv.bridge.Remote", "homeassistant.components.samsungtv.bridge.Remote",
side_effect=[OSError("Boom"), DEFAULT_MOCK], side_effect=[OSError("Boom"), DEFAULT_MOCK],
): ):
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -254,11 +245,7 @@ async def test_update_off(
async def test_update_off_ws_no_power_state( async def test_update_off_ws_no_power_state(
hass: HomeAssistant, hass: HomeAssistant, freezer: FrozenDateTimeFactory, remotews: Mock, rest_api: Mock
freezer: FrozenDateTimeFactory,
remotews: Mock,
rest_api: Mock,
mock_now: datetime,
) -> None: ) -> None:
"""Testing update tv off.""" """Testing update tv off."""
await setup_samsungtv_entry(hass, MOCK_CONFIGWS) await setup_samsungtv_entry(hass, MOCK_CONFIGWS)
@ -272,9 +259,8 @@ async def test_update_off_ws_no_power_state(
remotews.start_listening = Mock(side_effect=WebSocketException("Boom")) remotews.start_listening = Mock(side_effect=WebSocketException("Boom"))
remotews.is_alive.return_value = False remotews.is_alive.return_value = False
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -284,11 +270,7 @@ async def test_update_off_ws_no_power_state(
@pytest.mark.usefixtures("remotews") @pytest.mark.usefixtures("remotews")
async def test_update_off_ws_with_power_state( async def test_update_off_ws_with_power_state(
hass: HomeAssistant, hass: HomeAssistant, freezer: FrozenDateTimeFactory, remotews: Mock, rest_api: Mock
freezer: FrozenDateTimeFactory,
remotews: Mock,
rest_api: Mock,
mock_now: datetime,
) -> None: ) -> None:
"""Testing update tv off.""" """Testing update tv off."""
with ( with (
@ -311,9 +293,9 @@ async def test_update_off_ws_with_power_state(
device_info = deepcopy(SAMPLE_DEVICE_INFO_WIFI) device_info = deepcopy(SAMPLE_DEVICE_INFO_WIFI)
device_info["device"]["PowerState"] = "on" device_info["device"]["PowerState"] = "on"
rest_api.rest_device_info.return_value = device_info rest_api.rest_device_info.return_value = device_info
next_update = mock_now + timedelta(minutes=1)
freezer.move_to(next_update) freezer.tick(timedelta(minutes=1))
async_fire_time_changed(hass, next_update) async_fire_time_changed(hass)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
remotews.start_listening.assert_called_once() remotews.start_listening.assert_called_once()
@ -327,9 +309,9 @@ async def test_update_off_ws_with_power_state(
# Second update uses device_info(ON) # Second update uses device_info(ON)
rest_api.rest_device_info.reset_mock() rest_api.rest_device_info.reset_mock()
next_update = mock_now + timedelta(minutes=2)
freezer.move_to(next_update) freezer.tick(timedelta(minutes=1))
async_fire_time_changed(hass, next_update) async_fire_time_changed(hass)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
rest_api.rest_device_info.assert_called_once() rest_api.rest_device_info.assert_called_once()
@ -340,9 +322,9 @@ async def test_update_off_ws_with_power_state(
# Third update uses device_info (OFF) # Third update uses device_info (OFF)
rest_api.rest_device_info.reset_mock() rest_api.rest_device_info.reset_mock()
device_info["device"]["PowerState"] = "off" device_info["device"]["PowerState"] = "off"
next_update = mock_now + timedelta(minutes=3)
freezer.move_to(next_update) freezer.tick(timedelta(minutes=1))
async_fire_time_changed(hass, next_update) async_fire_time_changed(hass)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
rest_api.rest_device_info.assert_called_once() rest_api.rest_device_info.assert_called_once()
@ -358,7 +340,6 @@ async def test_update_off_encryptedws(
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
remoteencws: Mock, remoteencws: Mock,
rest_api: Mock, rest_api: Mock,
mock_now: datetime,
) -> None: ) -> None:
"""Testing update tv off.""" """Testing update tv off."""
await setup_samsungtv_entry(hass, MOCK_ENTRYDATA_ENCRYPTED_WS) await setup_samsungtv_entry(hass, MOCK_ENTRYDATA_ENCRYPTED_WS)
@ -371,9 +352,8 @@ async def test_update_off_encryptedws(
remoteencws.start_listening = Mock(side_effect=WebSocketException("Boom")) remoteencws.start_listening = Mock(side_effect=WebSocketException("Boom"))
remoteencws.is_alive.return_value = False remoteencws.is_alive.return_value = False
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -383,7 +363,7 @@ async def test_update_off_encryptedws(
@pytest.mark.usefixtures("remote") @pytest.mark.usefixtures("remote")
async def test_update_access_denied( async def test_update_access_denied(
hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime hass: HomeAssistant, freezer: FrozenDateTimeFactory
) -> None: ) -> None:
"""Testing update tv access denied exception.""" """Testing update tv access denied exception."""
await setup_samsungtv_entry(hass, MOCK_CONFIG) await setup_samsungtv_entry(hass, MOCK_CONFIG)
@ -392,14 +372,12 @@ async def test_update_access_denied(
"homeassistant.components.samsungtv.bridge.Remote", "homeassistant.components.samsungtv.bridge.Remote",
side_effect=exceptions.AccessDenied("Boom"), side_effect=exceptions.AccessDenied("Boom"),
): ):
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
next_update = mock_now + timedelta(minutes=10) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
assert [ assert [
@ -415,7 +393,6 @@ async def test_update_access_denied(
async def test_update_ws_connection_failure( async def test_update_ws_connection_failure(
hass: HomeAssistant, hass: HomeAssistant,
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
mock_now: datetime,
remotews: Mock, remotews: Mock,
caplog: pytest.LogCaptureFixture, caplog: pytest.LogCaptureFixture,
) -> None: ) -> None:
@ -430,9 +407,8 @@ async def test_update_ws_connection_failure(
), ),
patch.object(remotews, "is_alive", return_value=False), patch.object(remotews, "is_alive", return_value=False),
): ):
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
assert ( assert (
@ -447,10 +423,7 @@ async def test_update_ws_connection_failure(
@pytest.mark.usefixtures("rest_api") @pytest.mark.usefixtures("rest_api")
async def test_update_ws_connection_closed( async def test_update_ws_connection_closed(
hass: HomeAssistant, hass: HomeAssistant, freezer: FrozenDateTimeFactory, remotews: Mock
freezer: FrozenDateTimeFactory,
mock_now: datetime,
remotews: Mock,
) -> None: ) -> None:
"""Testing update tv connection failure exception.""" """Testing update tv connection failure exception."""
await setup_samsungtv_entry(hass, MOCK_CONFIGWS) await setup_samsungtv_entry(hass, MOCK_CONFIGWS)
@ -461,9 +434,8 @@ async def test_update_ws_connection_closed(
), ),
patch.object(remotews, "is_alive", return_value=False), patch.object(remotews, "is_alive", return_value=False),
): ):
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -472,10 +444,7 @@ async def test_update_ws_connection_closed(
@pytest.mark.usefixtures("rest_api") @pytest.mark.usefixtures("rest_api")
async def test_update_ws_unauthorized_error( async def test_update_ws_unauthorized_error(
hass: HomeAssistant, hass: HomeAssistant, freezer: FrozenDateTimeFactory, remotews: Mock
freezer: FrozenDateTimeFactory,
mock_now: datetime,
remotews: Mock,
) -> None: ) -> None:
"""Testing update tv unauthorized failure exception.""" """Testing update tv unauthorized failure exception."""
await setup_samsungtv_entry(hass, MOCK_CONFIGWS) await setup_samsungtv_entry(hass, MOCK_CONFIGWS)
@ -484,9 +453,8 @@ async def test_update_ws_unauthorized_error(
patch.object(remotews, "start_listening", side_effect=UnauthorizedError), patch.object(remotews, "start_listening", side_effect=UnauthorizedError),
patch.object(remotews, "is_alive", return_value=False), patch.object(remotews, "is_alive", return_value=False),
): ):
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
assert [ assert [
@ -500,7 +468,7 @@ async def test_update_ws_unauthorized_error(
@pytest.mark.usefixtures("remote") @pytest.mark.usefixtures("remote")
async def test_update_unhandled_response( async def test_update_unhandled_response(
hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime hass: HomeAssistant, freezer: FrozenDateTimeFactory
) -> None: ) -> None:
"""Testing update tv unhandled response exception.""" """Testing update tv unhandled response exception."""
await setup_samsungtv_entry(hass, MOCK_CONFIG) await setup_samsungtv_entry(hass, MOCK_CONFIG)
@ -509,9 +477,8 @@ async def test_update_unhandled_response(
"homeassistant.components.samsungtv.bridge.Remote", "homeassistant.components.samsungtv.bridge.Remote",
side_effect=[exceptions.UnhandledResponse("Boom"), DEFAULT_MOCK], side_effect=[exceptions.UnhandledResponse("Boom"), DEFAULT_MOCK],
): ):
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -520,7 +487,7 @@ async def test_update_unhandled_response(
@pytest.mark.usefixtures("remote") @pytest.mark.usefixtures("remote")
async def test_connection_closed_during_update_can_recover( async def test_connection_closed_during_update_can_recover(
hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime hass: HomeAssistant, freezer: FrozenDateTimeFactory
) -> None: ) -> None:
"""Testing update tv connection closed exception can recover.""" """Testing update tv connection closed exception can recover."""
await setup_samsungtv_entry(hass, MOCK_CONFIG) await setup_samsungtv_entry(hass, MOCK_CONFIG)
@ -529,17 +496,15 @@ async def test_connection_closed_during_update_can_recover(
"homeassistant.components.samsungtv.bridge.Remote", "homeassistant.components.samsungtv.bridge.Remote",
side_effect=[exceptions.ConnectionClosed(), DEFAULT_MOCK], side_effect=[exceptions.ConnectionClosed(), DEFAULT_MOCK],
): ):
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
assert state.state == STATE_UNAVAILABLE assert state.state == STATE_UNAVAILABLE
next_update = mock_now + timedelta(minutes=10) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -689,13 +654,12 @@ async def test_state(hass: HomeAssistant, freezer: FrozenDateTimeFactory) -> Non
# Should be STATE_UNAVAILABLE after the timer expires # Should be STATE_UNAVAILABLE after the timer expires
assert state.state == STATE_OFF assert state.state == STATE_OFF
next_update = dt_util.utcnow() + timedelta(seconds=20)
with patch( with patch(
"homeassistant.components.samsungtv.bridge.Remote", "homeassistant.components.samsungtv.bridge.Remote",
side_effect=OSError, side_effect=OSError,
): ):
freezer.move_to(next_update) freezer.tick(timedelta(seconds=20))
async_fire_time_changed(hass, next_update) async_fire_time_changed(hass)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -1390,7 +1354,6 @@ async def test_upnp_re_subscribe_events(
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
remotews: Mock, remotews: Mock,
dmr_device: Mock, dmr_device: Mock,
mock_now: datetime,
) -> None: ) -> None:
"""Test for Upnp event feedback.""" """Test for Upnp event feedback."""
await setup_samsungtv_entry(hass, MOCK_ENTRY_WS) await setup_samsungtv_entry(hass, MOCK_ENTRY_WS)
@ -1406,9 +1369,8 @@ async def test_upnp_re_subscribe_events(
), ),
patch.object(remotews, "is_alive", return_value=False), patch.object(remotews, "is_alive", return_value=False),
): ):
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -1416,9 +1378,8 @@ async def test_upnp_re_subscribe_events(
assert dmr_device.async_subscribe_services.call_count == 1 assert dmr_device.async_subscribe_services.call_count == 1
assert dmr_device.async_unsubscribe_services.call_count == 1 assert dmr_device.async_unsubscribe_services.call_count == 1
next_update = mock_now + timedelta(minutes=10) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -1437,7 +1398,6 @@ async def test_upnp_failed_re_subscribe_events(
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
remotews: Mock, remotews: Mock,
dmr_device: Mock, dmr_device: Mock,
mock_now: datetime,
caplog: pytest.LogCaptureFixture, caplog: pytest.LogCaptureFixture,
error: Exception, error: Exception,
) -> None: ) -> None:
@ -1455,9 +1415,8 @@ async def test_upnp_failed_re_subscribe_events(
), ),
patch.object(remotews, "is_alive", return_value=False), patch.object(remotews, "is_alive", return_value=False),
): ):
next_update = mock_now + timedelta(minutes=5) freezer.tick(timedelta(minutes=5))
freezer.move_to(next_update) async_fire_time_changed(hass)
async_fire_time_changed(hass, next_update)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
@ -1465,10 +1424,9 @@ async def test_upnp_failed_re_subscribe_events(
assert dmr_device.async_subscribe_services.call_count == 1 assert dmr_device.async_subscribe_services.call_count == 1
assert dmr_device.async_unsubscribe_services.call_count == 1 assert dmr_device.async_unsubscribe_services.call_count == 1
next_update = mock_now + timedelta(minutes=10)
with patch.object(dmr_device, "async_subscribe_services", side_effect=error): with patch.object(dmr_device, "async_subscribe_services", side_effect=error):
freezer.move_to(next_update) freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass, next_update) async_fire_time_changed(hass)
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)