core/tests/components/ista_ecotrend/test_statistics.py

87 lines
3.0 KiB
Python

"""Tests for the ista EcoTrend Statistics import."""
import datetime
from unittest.mock import MagicMock
from freezegun.api import FrozenDateTimeFactory
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.recorder.statistics import statistics_during_period
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from .conftest import extend_statistics
from tests.common import MockConfigEntry, async_fire_time_changed
from tests.components.recorder.common import async_wait_recording_done
@pytest.mark.usefixtures("recorder_mock", "entity_registry_enabled_by_default")
async def test_statistics_import(
hass: HomeAssistant,
ista_config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
mock_ista: MagicMock,
snapshot: SnapshotAssertion,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test setup of ista EcoTrend sensor platform."""
ista_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(ista_config_entry.entry_id)
await hass.async_block_till_done()
assert ista_config_entry.state is ConfigEntryState.LOADED
entities = er.async_entries_for_config_entry(
entity_registry, ista_config_entry.entry_id
)
await async_wait_recording_done(hass)
# Test that consumption statistics for 2 months have been added
for entity in entities:
statistic_id = f"ista_ecotrend:{entity.entity_id.removeprefix("sensor.")}"
stats = await hass.async_add_executor_job(
statistics_during_period,
hass,
datetime.datetime.fromtimestamp(0, tz=datetime.UTC),
None,
{statistic_id},
"month",
None,
{"state", "sum"},
)
assert stats[statistic_id] == snapshot(name=f"{statistic_id}_2months")
assert len(stats[statistic_id]) == 2
# Add another monthly consumption and forward
# 1 day and test if the new values have been
# appended to the statistics
mock_ista.get_consumption_data = extend_statistics
freezer.tick(datetime.timedelta(days=1))
async_fire_time_changed(hass)
await hass.async_block_till_done()
await async_wait_recording_done(hass)
freezer.tick(datetime.timedelta(days=1))
async_fire_time_changed(hass)
await hass.async_block_till_done()
await async_wait_recording_done(hass)
for entity in entities:
statistic_id = f"ista_ecotrend:{entity.entity_id.removeprefix("sensor.")}"
stats = await hass.async_add_executor_job(
statistics_during_period,
hass,
datetime.datetime.fromtimestamp(0, tz=datetime.UTC),
None,
{statistic_id},
"month",
None,
{"state", "sum"},
)
assert stats[statistic_id] == snapshot(name=f"{statistic_id}_3months")
assert len(stats[statistic_id]) == 3