Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>
This commit is contained in:
Daniel Hjelseth Høyer 2025-03-25 19:42:10 +01:00
parent 93b0051ade
commit 04192bbdc9
2 changed files with 136 additions and 2 deletions

View File

@ -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(

View File

@ -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