diff --git a/tests/components/wled/conftest.py b/tests/components/wled/conftest.py index 824801fe44b..bbbdd4e1cbe 100644 --- a/tests/components/wled/conftest.py +++ b/tests/components/wled/conftest.py @@ -2,6 +2,7 @@ from collections.abc import Generator from unittest.mock import AsyncMock, MagicMock, patch +from freezegun.api import FrozenDateTimeFactory import pytest from wled import Device as WLEDDevice @@ -67,7 +68,10 @@ def mock_wled(device_fixture: str) -> Generator[MagicMock, None, None]: @pytest.fixture async def init_integration( - hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_wled: MagicMock + hass: HomeAssistant, + freezer: FrozenDateTimeFactory, + mock_config_entry: MockConfigEntry, + mock_wled: MagicMock, ) -> MockConfigEntry: """Set up the WLED integration for testing.""" mock_config_entry.add_to_hass(hass) @@ -75,4 +79,8 @@ async def init_integration( await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() + # Let some time pass so coordinators can be reliably triggered by bumping + # time by SCAN_INTERVAL + freezer.tick(1) + return mock_config_entry diff --git a/tests/components/wled/test_button.py b/tests/components/wled/test_button.py index c1f3165e5bc..92a13baf43c 100644 --- a/tests/components/wled/test_button.py +++ b/tests/components/wled/test_button.py @@ -13,7 +13,7 @@ from homeassistant.helpers import device_registry as dr, entity_registry as er pytestmark = [ pytest.mark.usefixtures("init_integration"), - pytest.mark.freeze_time("2021-11-04 17:37:00+01:00"), + pytest.mark.freeze_time("2021-11-04 17:36:59+01:00"), ] diff --git a/tests/components/wled/test_light.py b/tests/components/wled/test_light.py index 16aba21392b..678b4a44459 100644 --- a/tests/components/wled/test_light.py +++ b/tests/components/wled/test_light.py @@ -2,6 +2,7 @@ import json from unittest.mock import MagicMock +from freezegun.api import FrozenDateTimeFactory import pytest from wled import Device as WLEDDevice, WLEDConnectionError, WLEDError @@ -27,7 +28,6 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import entity_registry as er -import homeassistant.util.dt as dt_util from tests.common import MockConfigEntry, async_fire_time_changed, load_fixture @@ -177,6 +177,7 @@ async def test_master_change_state( @pytest.mark.parametrize("device_fixture", ["rgb_single_segment"]) async def test_dynamically_handle_segments( hass: HomeAssistant, + freezer: FrozenDateTimeFactory, mock_wled: MagicMock, ) -> None: """Test if a new/deleted segment is dynamically added/removed.""" @@ -190,7 +191,8 @@ async def test_dynamically_handle_segments( json.loads(load_fixture("wled/rgb.json")) ) - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() assert (master := hass.states.get("light.wled_rgb_light_master")) @@ -202,7 +204,8 @@ async def test_dynamically_handle_segments( # Test adding if segment shows up again, including the master entity mock_wled.update.return_value = return_value - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() assert (master := hass.states.get("light.wled_rgb_light_master")) @@ -216,6 +219,7 @@ async def test_dynamically_handle_segments( @pytest.mark.parametrize("device_fixture", ["rgb_single_segment"]) async def test_single_segment_behavior( hass: HomeAssistant, + freezer: FrozenDateTimeFactory, mock_wled: MagicMock, ) -> None: """Test the behavior of the integration with a single segment.""" @@ -228,7 +232,8 @@ async def test_single_segment_behavior( # Test segment brightness takes master into account device.state.brightness = 100 device.state.segments[0].brightness = 255 - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() assert (state := hass.states.get("light.wled_rgb_light")) @@ -236,7 +241,8 @@ async def test_single_segment_behavior( # Test segment is off when master is off device.state.on = False - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() state = hass.states.get("light.wled_rgb_light") assert state diff --git a/tests/components/wled/test_number.py b/tests/components/wled/test_number.py index 59f2fb12332..e91ec4f2e66 100644 --- a/tests/components/wled/test_number.py +++ b/tests/components/wled/test_number.py @@ -2,6 +2,7 @@ import json from unittest.mock import MagicMock +from freezegun.api import FrozenDateTimeFactory import pytest from syrupy.assertion import SnapshotAssertion from wled import Device as WLEDDevice, WLEDConnectionError, WLEDError @@ -16,7 +17,6 @@ from homeassistant.const import ATTR_ENTITY_ID, STATE_UNAVAILABLE from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import device_registry as dr, entity_registry as er -import homeassistant.util.dt as dt_util from tests.common import async_fire_time_changed, load_fixture @@ -113,6 +113,7 @@ async def test_numbers( ) async def test_speed_dynamically_handle_segments( hass: HomeAssistant, + freezer: FrozenDateTimeFactory, mock_wled: MagicMock, entity_id_segment0: str, entity_id_segment1: str, @@ -130,7 +131,8 @@ async def test_speed_dynamically_handle_segments( json.loads(load_fixture("wled/rgb.json")) ) - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() assert (segment0 := hass.states.get(entity_id_segment0)) @@ -140,7 +142,8 @@ async def test_speed_dynamically_handle_segments( # Test remove segment again... mock_wled.update.return_value = return_value - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() assert (segment0 := hass.states.get(entity_id_segment0)) diff --git a/tests/components/wled/test_select.py b/tests/components/wled/test_select.py index caf1fa24868..219ec945021 100644 --- a/tests/components/wled/test_select.py +++ b/tests/components/wled/test_select.py @@ -2,6 +2,7 @@ import json from unittest.mock import MagicMock +from freezegun.api import FrozenDateTimeFactory import pytest from syrupy.assertion import SnapshotAssertion from wled import Device as WLEDDevice, WLEDConnectionError, WLEDError @@ -17,7 +18,6 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import device_registry as dr, entity_registry as er -import homeassistant.util.dt as dt_util from tests.common import async_fire_time_changed, load_fixture @@ -125,6 +125,7 @@ async def test_color_palette_state( @pytest.mark.parametrize("device_fixture", ["rgb_single_segment"]) async def test_color_palette_dynamically_handle_segments( hass: HomeAssistant, + freezer: FrozenDateTimeFactory, mock_wled: MagicMock, ) -> None: """Test if a new/deleted segment is dynamically added/removed.""" @@ -137,7 +138,8 @@ async def test_color_palette_dynamically_handle_segments( json.loads(load_fixture("wled/rgb.json")) ) - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() assert (segment0 := hass.states.get("select.wled_rgb_light_color_palette")) @@ -149,7 +151,8 @@ async def test_color_palette_dynamically_handle_segments( # Test adding if segment shows up again, including the master entity mock_wled.update.return_value = return_value - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() assert (segment0 := hass.states.get("select.wled_rgb_light_color_palette")) @@ -175,13 +178,15 @@ async def test_playlist_unavailable_without_playlists(hass: HomeAssistant) -> No @pytest.mark.parametrize("device_fixture", ["rgbw"]) async def test_old_style_preset_active( hass: HomeAssistant, + freezer: FrozenDateTimeFactory, mock_wled: MagicMock, ) -> None: """Test unknown preset returned (when old style/unknown) preset is active.""" # Set device preset state to a random number mock_wled.update.return_value.state.preset = 99 - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() assert (state := hass.states.get("select.wled_rgbw_light_preset")) @@ -191,13 +196,15 @@ async def test_old_style_preset_active( @pytest.mark.parametrize("device_fixture", ["rgbw"]) async def test_old_style_playlist_active( hass: HomeAssistant, + freezer: FrozenDateTimeFactory, mock_wled: MagicMock, ) -> None: """Test when old style playlist cycle is active.""" # Set device playlist to 0, which meant "cycle" previously. mock_wled.update.return_value.state.playlist = 0 - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() assert (state := hass.states.get("select.wled_rgbw_light_playlist")) diff --git a/tests/components/wled/test_switch.py b/tests/components/wled/test_switch.py index 70804e07eb9..40b7783fc04 100644 --- a/tests/components/wled/test_switch.py +++ b/tests/components/wled/test_switch.py @@ -2,6 +2,7 @@ import json from unittest.mock import MagicMock +from freezegun.api import FrozenDateTimeFactory import pytest from syrupy.assertion import SnapshotAssertion from wled import Device as WLEDDevice, WLEDConnectionError, WLEDError @@ -19,7 +20,6 @@ from homeassistant.const import ( from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import device_registry as dr, entity_registry as er -import homeassistant.util.dt as dt_util from tests.common import async_fire_time_changed, load_fixture @@ -132,6 +132,7 @@ async def test_switch_state( @pytest.mark.parametrize("device_fixture", ["rgb_single_segment"]) async def test_switch_dynamically_handle_segments( hass: HomeAssistant, + freezer: FrozenDateTimeFactory, mock_wled: MagicMock, ) -> None: """Test if a new/deleted segment is dynamically added/removed.""" @@ -146,7 +147,8 @@ async def test_switch_dynamically_handle_segments( json.loads(load_fixture("wled/rgb.json")) ) - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() assert (segment0 := hass.states.get("switch.wled_rgb_light_reverse")) @@ -156,7 +158,8 @@ async def test_switch_dynamically_handle_segments( # Test remove segment again... mock_wled.update.return_value = return_value - async_fire_time_changed(hass, dt_util.utcnow() + SCAN_INTERVAL) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) await hass.async_block_till_done() assert (segment0 := hass.states.get("switch.wled_rgb_light_reverse"))