diff --git a/tests/components/samsungtv/conftest.py b/tests/components/samsungtv/conftest.py index e59c0cc0126..4b3ad59defd 100644 --- a/tests/components/samsungtv/conftest.py +++ b/tests/components/samsungtv/conftest.py @@ -3,7 +3,6 @@ from __future__ import annotations from collections.abc import Awaitable, Callable, Generator -from datetime import datetime from socket import AddressFamily # pylint: disable=no-name-in-module from typing import Any from unittest.mock import AsyncMock, Mock, patch @@ -21,7 +20,6 @@ from samsungtvws.exceptions import ResponseError from samsungtvws.remote import ChannelEmitCommand 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 @@ -285,12 +283,6 @@ def remoteencws_fixture() -> Generator[Mock]: yield remoteencws -@pytest.fixture -def mock_now() -> datetime: - """Fixture for dtutil.now.""" - return dt_util.utcnow() - - @pytest.fixture(name="mac_address", autouse=True) def mac_address_fixture() -> Generator[Mock]: """Patch getmac.get_mac_address.""" diff --git a/tests/components/samsungtv/test_media_player.py b/tests/components/samsungtv/test_media_player.py index ac9214dd1bd..1ddc2928394 100644 --- a/tests/components/samsungtv/test_media_player.py +++ b/tests/components/samsungtv/test_media_player.py @@ -1,7 +1,7 @@ """Tests for samsungtv component.""" from copy import deepcopy -from datetime import datetime, timedelta +from datetime import timedelta import logging 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.exceptions import ServiceNotSupported 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 .const import ( @@ -153,7 +152,7 @@ async def test_setup_websocket(hass: HomeAssistant) -> None: @pytest.mark.usefixtures("rest_api") async def test_setup_websocket_2( - hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime + hass: HomeAssistant, freezer: FrozenDateTimeFactory ) -> None: """Test setup of platform from config entry.""" 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" - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(entity_id) @@ -194,7 +192,7 @@ async def test_setup_websocket_2( @pytest.mark.usefixtures("rest_api") async def test_setup_encrypted_websocket( - hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime + hass: HomeAssistant, freezer: FrozenDateTimeFactory ) -> None: """Test setup of platform from config entry.""" with patch( @@ -207,9 +205,8 @@ async def test_setup_encrypted_websocket( await setup_samsungtv_entry(hass, MOCK_ENTRYDATA_ENCRYPTED_WS) - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(ENTITY_ID) @@ -218,15 +215,12 @@ async def test_setup_encrypted_websocket( @pytest.mark.usefixtures("remote") -async def test_update_on( - hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime -) -> None: +async def test_update_on(hass: HomeAssistant, freezer: FrozenDateTimeFactory) -> None: """Testing update tv on.""" await setup_samsungtv_entry(hass, MOCK_CONFIG) - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(ENTITY_ID) @@ -234,9 +228,7 @@ async def test_update_on( @pytest.mark.usefixtures("remote") -async def test_update_off( - hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime -) -> None: +async def test_update_off(hass: HomeAssistant, freezer: FrozenDateTimeFactory) -> None: """Testing update tv off.""" await setup_samsungtv_entry(hass, MOCK_CONFIG) @@ -244,9 +236,8 @@ async def test_update_off( "homeassistant.components.samsungtv.bridge.Remote", side_effect=[OSError("Boom"), DEFAULT_MOCK], ): - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(ENTITY_ID) @@ -254,11 +245,7 @@ async def test_update_off( async def test_update_off_ws_no_power_state( - hass: HomeAssistant, - freezer: FrozenDateTimeFactory, - remotews: Mock, - rest_api: Mock, - mock_now: datetime, + hass: HomeAssistant, freezer: FrozenDateTimeFactory, remotews: Mock, rest_api: Mock ) -> None: """Testing update tv off.""" 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.is_alive.return_value = False - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(ENTITY_ID) @@ -284,11 +270,7 @@ async def test_update_off_ws_no_power_state( @pytest.mark.usefixtures("remotews") async def test_update_off_ws_with_power_state( - hass: HomeAssistant, - freezer: FrozenDateTimeFactory, - remotews: Mock, - rest_api: Mock, - mock_now: datetime, + hass: HomeAssistant, freezer: FrozenDateTimeFactory, remotews: Mock, rest_api: Mock ) -> None: """Testing update tv off.""" with ( @@ -311,9 +293,9 @@ async def test_update_off_ws_with_power_state( device_info = deepcopy(SAMPLE_DEVICE_INFO_WIFI) device_info["device"]["PowerState"] = "on" rest_api.rest_device_info.return_value = device_info - next_update = mock_now + timedelta(minutes=1) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + + freezer.tick(timedelta(minutes=1)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) 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) rest_api.rest_device_info.reset_mock() - next_update = mock_now + timedelta(minutes=2) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + + freezer.tick(timedelta(minutes=1)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) 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) rest_api.rest_device_info.reset_mock() device_info["device"]["PowerState"] = "off" - next_update = mock_now + timedelta(minutes=3) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + + freezer.tick(timedelta(minutes=1)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) rest_api.rest_device_info.assert_called_once() @@ -358,7 +340,6 @@ async def test_update_off_encryptedws( freezer: FrozenDateTimeFactory, remoteencws: Mock, rest_api: Mock, - mock_now: datetime, ) -> None: """Testing update tv off.""" 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.is_alive.return_value = False - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(ENTITY_ID) @@ -383,7 +363,7 @@ async def test_update_off_encryptedws( @pytest.mark.usefixtures("remote") async def test_update_access_denied( - hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime + hass: HomeAssistant, freezer: FrozenDateTimeFactory ) -> None: """Testing update tv access denied exception.""" await setup_samsungtv_entry(hass, MOCK_CONFIG) @@ -392,14 +372,12 @@ async def test_update_access_denied( "homeassistant.components.samsungtv.bridge.Remote", side_effect=exceptions.AccessDenied("Boom"), ): - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) - next_update = mock_now + timedelta(minutes=10) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) assert [ @@ -415,7 +393,6 @@ async def test_update_access_denied( async def test_update_ws_connection_failure( hass: HomeAssistant, freezer: FrozenDateTimeFactory, - mock_now: datetime, remotews: Mock, caplog: pytest.LogCaptureFixture, ) -> None: @@ -430,9 +407,8 @@ async def test_update_ws_connection_failure( ), patch.object(remotews, "is_alive", return_value=False), ): - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) assert ( @@ -447,10 +423,7 @@ async def test_update_ws_connection_failure( @pytest.mark.usefixtures("rest_api") async def test_update_ws_connection_closed( - hass: HomeAssistant, - freezer: FrozenDateTimeFactory, - mock_now: datetime, - remotews: Mock, + hass: HomeAssistant, freezer: FrozenDateTimeFactory, remotews: Mock ) -> None: """Testing update tv connection failure exception.""" 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), ): - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(ENTITY_ID) @@ -472,10 +444,7 @@ async def test_update_ws_connection_closed( @pytest.mark.usefixtures("rest_api") async def test_update_ws_unauthorized_error( - hass: HomeAssistant, - freezer: FrozenDateTimeFactory, - mock_now: datetime, - remotews: Mock, + hass: HomeAssistant, freezer: FrozenDateTimeFactory, remotews: Mock ) -> None: """Testing update tv unauthorized failure exception.""" 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, "is_alive", return_value=False), ): - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) assert [ @@ -500,7 +468,7 @@ async def test_update_ws_unauthorized_error( @pytest.mark.usefixtures("remote") async def test_update_unhandled_response( - hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime + hass: HomeAssistant, freezer: FrozenDateTimeFactory ) -> None: """Testing update tv unhandled response exception.""" await setup_samsungtv_entry(hass, MOCK_CONFIG) @@ -509,9 +477,8 @@ async def test_update_unhandled_response( "homeassistant.components.samsungtv.bridge.Remote", side_effect=[exceptions.UnhandledResponse("Boom"), DEFAULT_MOCK], ): - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(ENTITY_ID) @@ -520,7 +487,7 @@ async def test_update_unhandled_response( @pytest.mark.usefixtures("remote") async def test_connection_closed_during_update_can_recover( - hass: HomeAssistant, freezer: FrozenDateTimeFactory, mock_now: datetime + hass: HomeAssistant, freezer: FrozenDateTimeFactory ) -> None: """Testing update tv connection closed exception can recover.""" 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", side_effect=[exceptions.ConnectionClosed(), DEFAULT_MOCK], ): - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(ENTITY_ID) assert state.state == STATE_UNAVAILABLE - next_update = mock_now + timedelta(minutes=10) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) 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 assert state.state == STATE_OFF - next_update = dt_util.utcnow() + timedelta(seconds=20) with patch( "homeassistant.components.samsungtv.bridge.Remote", side_effect=OSError, ): - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(seconds=20)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(ENTITY_ID) @@ -1390,7 +1354,6 @@ async def test_upnp_re_subscribe_events( freezer: FrozenDateTimeFactory, remotews: Mock, dmr_device: Mock, - mock_now: datetime, ) -> None: """Test for Upnp event feedback.""" 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), ): - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) 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_unsubscribe_services.call_count == 1 - next_update = mock_now + timedelta(minutes=10) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(ENTITY_ID) @@ -1437,7 +1398,6 @@ async def test_upnp_failed_re_subscribe_events( freezer: FrozenDateTimeFactory, remotews: Mock, dmr_device: Mock, - mock_now: datetime, caplog: pytest.LogCaptureFixture, error: Exception, ) -> None: @@ -1455,9 +1415,8 @@ async def test_upnp_failed_re_subscribe_events( ), patch.object(remotews, "is_alive", return_value=False), ): - next_update = mock_now + timedelta(minutes=5) - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) 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_unsubscribe_services.call_count == 1 - next_update = mock_now + timedelta(minutes=10) with patch.object(dmr_device, "async_subscribe_services", side_effect=error): - freezer.move_to(next_update) - async_fire_time_changed(hass, next_update) + freezer.tick(timedelta(minutes=5)) + async_fire_time_changed(hass) await hass.async_block_till_done(wait_background_tasks=True) state = hass.states.get(ENTITY_ID)