"""Tests for the sensors provided by the EnergyZero integration.""" from unittest.mock import MagicMock from energyzero import EnergyZeroNoDataError 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.core import HomeAssistant from homeassistant.helpers import device_registry as dr, entity_registry as er from homeassistant.setup import async_setup_component from tests.common import MockConfigEntry 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, 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}" 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}")} @pytest.mark.usefixtures("init_integration") async def test_no_gas_today(hass: HomeAssistant, mock_energyzero: MagicMock) -> 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, ) await hass.async_block_till_done() assert (state := hass.states.get("sensor.energyzero_today_gas_current_hour_price")) assert state.state == STATE_UNKNOWN