Improve tests of energyzero integration (#133452)

Co-authored-by: Franck Nijhof <git@frenck.dev>
This commit is contained in:
Klaas Schoute 2025-01-13 14:49:01 +01:00 committed by GitHub
parent 6060f637a8
commit 0d116ec6a2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 366 additions and 351 deletions

View File

@ -1 +1,12 @@
"""Tests for the EnergyZero integration."""
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry
async def setup_integration(hass: HomeAssistant, config_entry: MockConfigEntry) -> None:
"""Fixture for setting up the integration."""
config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(config_entry.entry_id)

View File

@ -29,7 +29,8 @@ def mock_config_entry() -> MockConfigEntry:
title="energy",
domain=DOMAIN,
data={},
unique_id="unique_thingy",
unique_id=DOMAIN,
entry_id="12345",
)

View File

@ -1,39 +0,0 @@
# serializer version: 1
# name: test_full_user_flow
FlowResultSnapshot({
'context': dict({
'source': 'user',
'unique_id': 'energyzero',
}),
'data': dict({
}),
'description': None,
'description_placeholders': None,
'flow_id': <ANY>,
'handler': 'energyzero',
'minor_version': 1,
'options': dict({
}),
'result': ConfigEntrySnapshot({
'data': dict({
}),
'disabled_by': None,
'discovery_keys': dict({
}),
'domain': 'energyzero',
'entry_id': <ANY>,
'minor_version': 1,
'options': dict({
}),
'pref_disable_new_entities': False,
'pref_disable_polling': False,
'source': 'user',
'title': 'EnergyZero',
'unique_id': 'energyzero',
'version': 1,
}),
'title': 'EnergyZero',
'type': <FlowResultType.CREATE_ENTRY: 'create_entry'>,
'version': 1,
})
# ---

View File

@ -1,26 +1,4 @@
# serializer version: 1
# name: test_diagnostics
dict({
'energy': dict({
'average_price': 0.37,
'current_hour_price': 0.49,
'highest_price_time': '2022-12-07T16:00:00+00:00',
'hours_priced_equal_or_lower': 23,
'lowest_price_time': '2022-12-07T02:00:00+00:00',
'max_price': 0.55,
'min_price': 0.26,
'next_hour_price': 0.55,
'percentage_of_max': 89.09,
}),
'entry': dict({
'title': 'energy',
}),
'gas': dict({
'current_hour_price': 1.47,
'next_hour_price': 1.47,
}),
})
# ---
# name: test_diagnostics_no_gas_today
dict({
'energy': dict({
@ -43,3 +21,25 @@
}),
})
# ---
# name: test_entry_diagnostics
dict({
'energy': dict({
'average_price': 0.37,
'current_hour_price': 0.49,
'highest_price_time': '2022-12-07T16:00:00+00:00',
'hours_priced_equal_or_lower': 23,
'lowest_price_time': '2022-12-07T02:00:00+00:00',
'max_price': 0.55,
'min_price': 0.26,
'next_hour_price': 0.55,
'percentage_of_max': 89.09,
}),
'entry': dict({
'title': 'energy',
}),
'gas': dict({
'current_hour_price': 1.47,
'next_hour_price': 1.47,
}),
})
# ---

View File

@ -1,20 +1,5 @@
# serializer version: 1
# name: test_sensor[sensor.energyzero_today_energy_average_price-today_energy_average_price-today_energy]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'friendly_name': 'Energy market price Average - today',
'unit_of_measurement': '€/kWh',
}),
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_energy_average_price',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.37',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_average_price-today_energy_average_price-today_energy].1
# name: test_sensor[sensor.energyzero_today_energy_average_price-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
@ -43,52 +28,26 @@
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'average_price',
'unique_id': '12345_today_energy_average_price',
'unit_of_measurement': '€/kWh',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_average_price-today_energy_average_price-today_energy].2
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': <DeviceEntryType.SERVICE: 'service'>,
'hw_version': None,
'id': <ANY>,
'is_new': False,
'labels': set({
}),
'manufacturer': 'EnergyZero',
'model': None,
'model_id': None,
'name': 'Energy market price',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_current_hour_price-today_energy_current_hour_price-today_energy]
# name: test_sensor[sensor.energyzero_today_energy_average_price-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'friendly_name': 'Energy market price Current hour',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'friendly_name': 'Energy market price Average - today',
'unit_of_measurement': '€/kWh',
}),
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_energy_current_hour_price',
'entity_id': 'sensor.energyzero_today_energy_average_price',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.49',
'state': '0.37',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_current_hour_price-today_energy_current_hour_price-today_energy].1
# name: test_sensor[sensor.energyzero_today_energy_current_hour_price-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
@ -119,51 +78,27 @@
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'current_hour_price',
'unique_id': '12345_today_energy_current_hour_price',
'unit_of_measurement': '€/kWh',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_current_hour_price-today_energy_current_hour_price-today_energy].2
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': <DeviceEntryType.SERVICE: 'service'>,
'hw_version': None,
'id': <ANY>,
'is_new': False,
'labels': set({
}),
'manufacturer': 'EnergyZero',
'model': None,
'model_id': None,
'name': 'Energy market price',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_highest_price_time-today_energy_highest_price_time-today_energy]
# name: test_sensor[sensor.energyzero_today_energy_current_hour_price-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'device_class': 'timestamp',
'friendly_name': 'Energy market price Time of highest price - today',
'friendly_name': 'Energy market price Current hour',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '€/kWh',
}),
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_energy_highest_price_time',
'entity_id': 'sensor.energyzero_today_energy_current_hour_price',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '2022-12-07T16:00:00+00:00',
'state': '0.49',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_highest_price_time-today_energy_highest_price_time-today_energy].1
# name: test_sensor[sensor.energyzero_today_energy_highest_price_time-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
@ -192,51 +127,26 @@
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'highest_price_time',
'unique_id': '12345_today_energy_highest_price_time',
'unit_of_measurement': None,
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_highest_price_time-today_energy_highest_price_time-today_energy].2
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': <DeviceEntryType.SERVICE: 'service'>,
'hw_version': None,
'id': <ANY>,
'is_new': False,
'labels': set({
}),
'manufacturer': 'EnergyZero',
'model': None,
'model_id': None,
'name': 'Energy market price',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_hours_priced_equal_or_lower-today_energy_hours_priced_equal_or_lower-today_energy]
# name: test_sensor[sensor.energyzero_today_energy_highest_price_time-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'friendly_name': 'Energy market price Hours priced equal or lower than current - today',
'unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
'device_class': 'timestamp',
'friendly_name': 'Energy market price Time of highest price - today',
}),
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_energy_hours_priced_equal_or_lower',
'entity_id': 'sensor.energyzero_today_energy_highest_price_time',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '23',
'state': '2022-12-07T16:00:00+00:00',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_hours_priced_equal_or_lower-today_energy_hours_priced_equal_or_lower-today_energy].1
# name: test_sensor[sensor.energyzero_today_energy_hours_priced_equal_or_lower-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
@ -265,51 +175,74 @@
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'hours_priced_equal_or_lower',
'unique_id': '12345_today_energy_hours_priced_equal_or_lower',
'unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_hours_priced_equal_or_lower-today_energy_hours_priced_equal_or_lower-today_energy].2
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': <DeviceEntryType.SERVICE: 'service'>,
'hw_version': None,
'id': <ANY>,
'is_new': False,
'labels': set({
}),
'manufacturer': 'EnergyZero',
'model': None,
'model_id': None,
'name': 'Energy market price',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_max_price-today_energy_max_price-today_energy]
# name: test_sensor[sensor.energyzero_today_energy_hours_priced_equal_or_lower-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'friendly_name': 'Energy market price Highest price - today',
'unit_of_measurement': '€/kWh',
'friendly_name': 'Energy market price Hours priced equal or lower than current - today',
'unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
}),
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_energy_max_price',
'entity_id': 'sensor.energyzero_today_energy_hours_priced_equal_or_lower',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.55',
'state': '23',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_max_price-today_energy_max_price-today_energy].1
# name: test_sensor[sensor.energyzero_today_energy_lowest_price_time-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.energyzero_today_energy_lowest_price_time',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>,
'original_icon': None,
'original_name': 'Time of lowest price - today',
'platform': 'energyzero',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'lowest_price_time',
'unique_id': '12345_today_energy_lowest_price_time',
'unit_of_measurement': None,
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_lowest_price_time-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'device_class': 'timestamp',
'friendly_name': 'Energy market price Time of lowest price - today',
}),
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_energy_lowest_price_time',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '2022-12-07T02:00:00+00:00',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_max_price-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
@ -338,52 +271,170 @@
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'max_price',
'unique_id': '12345_today_energy_max_price',
'unit_of_measurement': '€/kWh',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_max_price-today_energy_max_price-today_energy].2
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': <DeviceEntryType.SERVICE: 'service'>,
'hw_version': None,
'id': <ANY>,
'is_new': False,
'labels': set({
}),
'manufacturer': 'EnergyZero',
'model': None,
'model_id': None,
'name': 'Energy market price',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
})
# ---
# name: test_sensor[sensor.energyzero_today_gas_current_hour_price-today_gas_current_hour_price-today_gas]
# name: test_sensor[sensor.energyzero_today_energy_max_price-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'friendly_name': 'Gas market price Current hour',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '€/m³',
'friendly_name': 'Energy market price Highest price - today',
'unit_of_measurement': '€/kWh',
}),
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_gas_current_hour_price',
'entity_id': 'sensor.energyzero_today_energy_max_price',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '1.47',
'state': '0.55',
})
# ---
# name: test_sensor[sensor.energyzero_today_gas_current_hour_price-today_gas_current_hour_price-today_gas].1
# name: test_sensor[sensor.energyzero_today_energy_min_price-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.energyzero_today_energy_min_price',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Lowest price - today',
'platform': 'energyzero',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'min_price',
'unique_id': '12345_today_energy_min_price',
'unit_of_measurement': '€/kWh',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_min_price-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'friendly_name': 'Energy market price Lowest price - today',
'unit_of_measurement': '€/kWh',
}),
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_energy_min_price',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.26',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_next_hour_price-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.energyzero_today_energy_next_hour_price',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Next hour',
'platform': 'energyzero',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'next_hour_price',
'unique_id': '12345_today_energy_next_hour_price',
'unit_of_measurement': '€/kWh',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_next_hour_price-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'friendly_name': 'Energy market price Next hour',
'unit_of_measurement': '€/kWh',
}),
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_energy_next_hour_price',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.55',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_percentage_of_max-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.energyzero_today_energy_percentage_of_max',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Current percentage of highest price - today',
'platform': 'energyzero',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'percentage_of_max',
'unique_id': '12345_today_energy_percentage_of_max',
'unit_of_measurement': '%',
})
# ---
# name: test_sensor[sensor.energyzero_today_energy_percentage_of_max-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'friendly_name': 'Energy market price Current percentage of highest price - today',
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_energy_percentage_of_max',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '89.09',
})
# ---
# name: test_sensor[sensor.energyzero_today_gas_current_hour_price-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
@ -414,32 +465,71 @@
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'current_hour_price',
'unique_id': '12345_today_gas_current_hour_price',
'unit_of_measurement': '€/m³',
})
# ---
# name: test_sensor[sensor.energyzero_today_gas_current_hour_price-today_gas_current_hour_price-today_gas].2
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': None,
'connections': set({
# name: test_sensor[sensor.energyzero_today_gas_current_hour_price-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'friendly_name': 'Gas market price Current hour',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '€/m³',
}),
'disabled_by': None,
'entry_type': <DeviceEntryType.SERVICE: 'service'>,
'hw_version': None,
'id': <ANY>,
'is_new': False,
'labels': set({
}),
'manufacturer': 'EnergyZero',
'model': None,
'model_id': None,
'name': 'Gas market price',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_gas_current_hour_price',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '1.47',
})
# ---
# name: test_sensor[sensor.energyzero_today_gas_next_hour_price-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.energyzero_today_gas_next_hour_price',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Next hour',
'platform': 'energyzero',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'next_hour_price',
'unique_id': '12345_today_gas_next_hour_price',
'unit_of_measurement': '€/m³',
})
# ---
# name: test_sensor[sensor.energyzero_today_gas_next_hour_price-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'Data provided by EnergyZero',
'friendly_name': 'Gas market price Next hour',
'unit_of_measurement': '€/m³',
}),
'context': <ANY>,
'entity_id': 'sensor.energyzero_today_gas_next_hour_price',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '1.47',
})
# ---

View File

@ -2,8 +2,6 @@
from unittest.mock import MagicMock
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.energyzero.const import DOMAIN
from homeassistant.config_entries import SOURCE_USER
from homeassistant.core import HomeAssistant
@ -15,7 +13,6 @@ from tests.common import MockConfigEntry
async def test_full_user_flow(
hass: HomeAssistant,
mock_setup_entry: MagicMock,
snapshot: SnapshotAssertion,
) -> None:
"""Test the full user configuration flow."""
result = await hass.config_entries.flow.async_init(
@ -32,7 +29,8 @@ async def test_full_user_flow(
)
assert result2.get("type") is FlowResultType.CREATE_ENTRY
assert result2 == snapshot
assert result2.get("title") == "EnergyZero"
assert result2.get("data") == {}
assert len(mock_setup_entry.mock_calls) == 1

View File

@ -1,53 +1,54 @@
"""Tests for the diagnostics data provided by the EnergyZero integration."""
from unittest.mock import MagicMock
from unittest.mock import AsyncMock, MagicMock
from energyzero import EnergyZeroNoDataError
from freezegun.api import FrozenDateTimeFactory
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.homeassistant import SERVICE_UPDATE_ENTITY
from homeassistant.const import ATTR_ENTITY_ID
from homeassistant.components.energyzero.const import SCAN_INTERVAL
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry
from . import setup_integration
from tests.common import MockConfigEntry, async_fire_time_changed
from tests.components.diagnostics import get_diagnostics_for_config_entry
from tests.typing import ClientSessionGenerator
pytestmark = pytest.mark.freeze_time("2022-12-07 15:00:00")
async def test_diagnostics(
async def test_entry_diagnostics(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
init_integration: MockConfigEntry,
mock_energyzero: AsyncMock,
mock_config_entry: MockConfigEntry,
snapshot: SnapshotAssertion,
) -> None:
"""Test diagnostics."""
assert (
await get_diagnostics_for_config_entry(hass, hass_client, init_integration)
== snapshot
"""Test the EnergyZero entry diagnostics."""
await setup_integration(hass, mock_config_entry)
result = await get_diagnostics_for_config_entry(
hass, hass_client, mock_config_entry
)
assert result == snapshot
async def test_diagnostics_no_gas_today(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
mock_energyzero: MagicMock,
init_integration: MockConfigEntry,
freezer: FrozenDateTimeFactory,
snapshot: SnapshotAssertion,
) -> None:
"""Test diagnostics, no gas sensors available."""
await async_setup_component(hass, "homeassistant", {})
mock_energyzero.gas_prices.side_effect = EnergyZeroNoDataError
await hass.services.async_call(
"homeassistant",
SERVICE_UPDATE_ENTITY,
{ATTR_ENTITY_ID: ["sensor.energyzero_today_gas_current_hour_price"]},
blocking=True,
)
freezer.tick(SCAN_INTERVAL)
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert (

View File

@ -1,96 +1,49 @@
"""Tests for the sensors provided by the EnergyZero integration."""
from unittest.mock import MagicMock
from unittest.mock import AsyncMock, MagicMock, patch
from energyzero import EnergyZeroNoDataError
from freezegun.api import FrozenDateTimeFactory
import pytest
from syrupy.assertion import SnapshotAssertion
from syrupy.filters import props
from homeassistant.components.energyzero.const import DOMAIN
from homeassistant.components.homeassistant import SERVICE_UPDATE_ENTITY
from homeassistant.const import ATTR_ENTITY_ID, STATE_UNKNOWN
from homeassistant.components.energyzero.const import SCAN_INTERVAL
from homeassistant.const import STATE_UNKNOWN
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.setup import async_setup_component
from homeassistant.helpers import entity_registry as er
from tests.common import MockConfigEntry
from . import setup_integration
from tests.common import MockConfigEntry, async_fire_time_changed, snapshot_platform
pytestmark = [pytest.mark.freeze_time("2022-12-07 15:00:00")]
@pytest.mark.parametrize(
("entity_id", "entity_unique_id", "device_identifier"),
[
(
"sensor.energyzero_today_energy_current_hour_price",
"today_energy_current_hour_price",
"today_energy",
),
(
"sensor.energyzero_today_energy_average_price",
"today_energy_average_price",
"today_energy",
),
(
"sensor.energyzero_today_energy_max_price",
"today_energy_max_price",
"today_energy",
),
(
"sensor.energyzero_today_energy_highest_price_time",
"today_energy_highest_price_time",
"today_energy",
),
(
"sensor.energyzero_today_energy_hours_priced_equal_or_lower",
"today_energy_hours_priced_equal_or_lower",
"today_energy",
),
(
"sensor.energyzero_today_gas_current_hour_price",
"today_gas_current_hour_price",
"today_gas",
),
],
)
async def test_sensor(
hass: HomeAssistant,
init_integration: MockConfigEntry,
device_registry: dr.DeviceRegistry,
mock_energyzero: AsyncMock,
mock_config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
entity_id: str,
entity_unique_id: str,
device_identifier: str,
) -> None:
"""Test the EnergyZero - Energy sensors."""
entry_id = init_integration.entry_id
assert (state := hass.states.get(entity_id))
assert state == snapshot
assert (entity_entry := entity_registry.async_get(entity_id))
assert entity_entry == snapshot(exclude=props("unique_id"))
assert entity_entry.unique_id == f"{entry_id}_{entity_unique_id}"
with patch("homeassistant.components.energyzero.PLATFORMS", ["sensor"]):
await setup_integration(hass, mock_config_entry)
assert entity_entry.device_id
assert (device_entry := device_registry.async_get(entity_entry.device_id))
assert device_entry == snapshot(exclude=props("identifiers"))
assert device_entry.identifiers == {(DOMAIN, f"{entry_id}_{device_identifier}")}
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)
@pytest.mark.usefixtures("init_integration")
async def test_no_gas_today(hass: HomeAssistant, mock_energyzero: MagicMock) -> None:
async def test_no_gas_today(
hass: HomeAssistant,
mock_energyzero: MagicMock,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test the EnergyZero - No gas sensors available."""
await async_setup_component(hass, "homeassistant", {})
mock_energyzero.gas_prices.side_effect = EnergyZeroNoDataError
await hass.services.async_call(
"homeassistant",
SERVICE_UPDATE_ENTITY,
{ATTR_ENTITY_ID: ["sensor.energyzero_today_gas_current_hour_price"]},
blocking=True,
)
freezer.tick(SCAN_INTERVAL)
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert (state := hass.states.get("sensor.energyzero_today_gas_current_hour_price"))