"""Tests for ScreenLogic climate entity.""" import logging from unittest.mock import DEFAULT, patch import pytest from screenlogicpy import ScreenLogicGateway from screenlogicpy.device_const.heat import HEAT_MODE from homeassistant.components.climate import ( ATTR_CURRENT_TEMPERATURE, ATTR_HVAC_ACTION, ATTR_HVAC_MODES, ATTR_PRESET_MODE, ATTR_PRESET_MODES, ATTR_TEMPERATURE, DOMAIN as CLIMATE_DOMAIN, HVACAction, HVACMode, ) from homeassistant.core import HomeAssistant from homeassistant.util import slugify from . import ( DATA_MISSING_VALUES_CHEM_CHLOR, GATEWAY_DISCOVERY_IMPORT_PATH, MOCK_ADAPTER_NAME, stub_async_connect, ) from tests.common import MockConfigEntry _LOGGER = logging.getLogger(__name__) @pytest.mark.parametrize( ( "tested_dataset", "expected_entity_states", ), [ ( DATA_MISSING_VALUES_CHEM_CHLOR, { f"{CLIMATE_DOMAIN}.{slugify(MOCK_ADAPTER_NAME)}_pool_heat": { "state": HVACMode.OFF, "attributes": { ATTR_CURRENT_TEMPERATURE: 27.2, ATTR_TEMPERATURE: 28.3, ATTR_HVAC_ACTION: HVACAction.OFF, ATTR_HVAC_MODES: [HVACMode.OFF, HVACMode.HEAT], ATTR_PRESET_MODE: "heater", ATTR_PRESET_MODES: [HEAT_MODE.HEATER.name.lower()], }, }, f"{CLIMATE_DOMAIN}.{slugify(MOCK_ADAPTER_NAME)}_spa_heat": { "state": HVACMode.HEAT, "attributes": { ATTR_CURRENT_TEMPERATURE: 28.9, ATTR_TEMPERATURE: 34.4, ATTR_HVAC_ACTION: HVACAction.IDLE, ATTR_HVAC_MODES: [HVACMode.OFF, HVACMode.HEAT], ATTR_PRESET_MODE: "heater", ATTR_PRESET_MODES: [HEAT_MODE.HEATER.name.lower()], }, }, }, ) ], ) async def test_climate_state( hass: HomeAssistant, mock_config_entry: MockConfigEntry, tested_dataset: dict, expected_entity_states: dict, ) -> None: """Test setup for platforms that define expected data.""" def stub_connect(*args, **kwargs): return stub_async_connect(tested_dataset, *args, **kwargs) mock_config_entry.add_to_hass(hass) with ( patch( GATEWAY_DISCOVERY_IMPORT_PATH, return_value={}, ), patch.multiple( ScreenLogicGateway, async_connect=stub_connect, is_connected=True, _async_connected_request=DEFAULT, ), ): assert await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() for entity_id, state_data in expected_entity_states.items(): assert (climate_state := hass.states.get(entity_id)) is not None assert climate_state.state == state_data["state"] for attribute, value in state_data["attributes"].items(): assert climate_state.attributes[attribute] == value