From 04192bbdc98fc63d6c7d8a78a0522ad6996eb273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Hjelseth=20H=C3=B8yer?= Date: Tue, 25 Mar 2025 19:42:10 +0100 Subject: [PATCH] tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel Hjelseth Høyer --- homeassistant/components/mill/coordinator.py | 2 +- tests/components/mill/test_coordinator.py | 136 ++++++++++++++++++- 2 files changed, 136 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/mill/coordinator.py b/homeassistant/components/mill/coordinator.py index faaf191b080..72396d5fc36 100644 --- a/homeassistant/components/mill/coordinator.py +++ b/homeassistant/components/mill/coordinator.py @@ -134,7 +134,7 @@ class MillHistoricDataUpdateCoordinator(DataUpdateCoordinator): for start, state in hourly_data.items(): if state is None: continue - if last_stats_time and (start < last_stats_time or start > now): + if (last_stats_time and start < last_stats_time) or start > now: continue _sum += state statistics.append( diff --git a/tests/components/mill/test_coordinator.py b/tests/components/mill/test_coordinator.py index 74e38eeef68..a2a3bd57b65 100644 --- a/tests/components/mill/test_coordinator.py +++ b/tests/components/mill/test_coordinator.py @@ -2,7 +2,7 @@ from unittest.mock import AsyncMock -from mill import Heater, Mill +from mill import Heater, Mill, Sensor from homeassistant.components.mill.const import DOMAIN from homeassistant.components.mill.coordinator import MillHistoricDataUpdateCoordinator @@ -89,3 +89,137 @@ async def test_mill_historic_data(recorder_mock: Recorder, hass: HomeAssistant) _sum += val assert stat["sum"] == _sum + + +async def test_mill_historic_data_no_heater( + recorder_mock: Recorder, hass: HomeAssistant +) -> None: + """Test historic data from Mill.""" + + data = { + dt_util.parse_datetime("2024-12-03T00:00:00+01:00"): 2, + dt_util.parse_datetime("2024-12-03T01:00:00+01:00"): 3, + dt_util.parse_datetime("2024-12-03T02:00:00+01:00"): 4, + } + + mill_data_connection = Mill("", "", websession=AsyncMock()) + mill_data_connection.fetch_heater_and_sensor_data = AsyncMock(return_value=None) + mill_data_connection.devices = {"dev_id": Sensor(name="sensor_name")} + mill_data_connection.fetch_historic_energy_usage = AsyncMock(return_value=data) + + statistic_id = f"{DOMAIN}:energy_dev_id" + + coordinator = MillHistoricDataUpdateCoordinator( + hass, mill_data_connection=mill_data_connection + ) + await coordinator._async_update_data() + await async_wait_recording_done(hass) + stats = await hass.async_add_executor_job( + statistics_during_period, + hass, + next(iter(data)), + None, + {statistic_id}, + "hour", + None, + {"start", "state", "mean", "min", "max", "last_reset", "sum"}, + ) + + assert len(stats) == 0 + + +async def test_mill_historic_data_no_data( + recorder_mock: Recorder, hass: HomeAssistant +) -> None: + """Test historic data from Mill.""" + + data = { + dt_util.parse_datetime("2024-12-03T00:00:00+01:00"): 2, + dt_util.parse_datetime("2024-12-03T01:00:00+01:00"): 3, + dt_util.parse_datetime("2024-12-03T02:00:00+01:00"): 4, + } + + mill_data_connection = Mill("", "", websession=AsyncMock()) + mill_data_connection.fetch_heater_and_sensor_data = AsyncMock(return_value=None) + mill_data_connection.devices = {"dev_id": Heater(name="heater_name")} + mill_data_connection.fetch_historic_energy_usage = AsyncMock(return_value=data) + + coordinator = MillHistoricDataUpdateCoordinator( + hass, mill_data_connection=mill_data_connection + ) + await coordinator._async_update_data() + await async_wait_recording_done(hass) + + statistic_id = f"{DOMAIN}:energy_dev_id" + + stats = await hass.async_add_executor_job( + statistics_during_period, + hass, + next(iter(data)), + None, + {statistic_id}, + "hour", + None, + {"start", "state", "mean", "min", "max", "last_reset", "sum"}, + ) + assert len(stats) == 1 + assert len(stats[statistic_id]) == 3 + + mill_data_connection.fetch_historic_energy_usage = AsyncMock(return_value=None) + + coordinator = MillHistoricDataUpdateCoordinator( + hass, mill_data_connection=mill_data_connection + ) + await coordinator._async_update_data() + await async_wait_recording_done(hass) + stats = await hass.async_add_executor_job( + statistics_during_period, + hass, + next(iter(data)), + None, + {statistic_id}, + "hour", + None, + {"start", "state", "mean", "min", "max", "last_reset", "sum"}, + ) + + assert len(stats) == 1 + assert len(stats[statistic_id]) == 3 + + +async def test_mill_historic_data_invalid_data( + recorder_mock: Recorder, hass: HomeAssistant +) -> None: + """Test historic data from Mill.""" + + data = { + dt_util.parse_datetime("2024-12-03T00:00:00+01:00"): None, + dt_util.parse_datetime("2024-12-03T01:00:00+01:00"): 3, + dt_util.parse_datetime("3024-12-03T02:00:00+01:00"): 4, + } + + mill_data_connection = Mill("", "", websession=AsyncMock()) + mill_data_connection.fetch_heater_and_sensor_data = AsyncMock(return_value=None) + mill_data_connection.devices = {"dev_id": Heater(name="heater_name")} + mill_data_connection.fetch_historic_energy_usage = AsyncMock(return_value=data) + + statistic_id = f"{DOMAIN}:energy_dev_id" + + coordinator = MillHistoricDataUpdateCoordinator( + hass, mill_data_connection=mill_data_connection + ) + await coordinator._async_update_data() + await async_wait_recording_done(hass) + stats = await hass.async_add_executor_job( + statistics_during_period, + hass, + next(iter(data)), + None, + {statistic_id}, + "hour", + None, + {"start", "state", "mean", "min", "max", "last_reset", "sum"}, + ) + + assert len(stats) == 1 + assert len(stats[statistic_id]) == 1