"""Unit test for CCM15 coordinator component.""" from datetime import timedelta from unittest.mock import AsyncMock, patch from ccm15 import CCM15DeviceState from freezegun.api import FrozenDateTimeFactory from syrupy.assertion import SnapshotAssertion from homeassistant.components.ccm15.const import DOMAIN from homeassistant.components.climate import ( ATTR_FAN_MODE, ATTR_HVAC_MODE, ATTR_TEMPERATURE, DOMAIN as CLIMATE_DOMAIN, FAN_HIGH, SERVICE_SET_FAN_MODE, SERVICE_SET_HVAC_MODE, SERVICE_SET_TEMPERATURE, SERVICE_TURN_ON, HVACMode, ) from homeassistant.const import ATTR_ENTITY_ID, CONF_HOST, CONF_PORT, SERVICE_TURN_OFF from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er from tests.common import MockConfigEntry, async_fire_time_changed async def test_climate_state( hass: HomeAssistant, snapshot: SnapshotAssertion, entity_registry: er.EntityRegistry, ccm15_device: AsyncMock, freezer: FrozenDateTimeFactory, ) -> None: """Test the coordinator.""" entry = MockConfigEntry( domain=DOMAIN, unique_id="1.1.1.1", data={ CONF_HOST: "1.1.1.1", CONF_PORT: 80, }, ) entry.add_to_hass(hass) assert await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() assert entity_registry.async_get("climate.midea_0") == snapshot assert entity_registry.async_get("climate.midea_1") == snapshot assert hass.states.get("climate.midea_0") == snapshot assert hass.states.get("climate.midea_1") == snapshot with patch( "homeassistant.components.ccm15.coordinator.CCM15Device.async_set_state" ) as mock_set_state: await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_FAN_MODE, {ATTR_ENTITY_ID: ["climate.midea_0"], ATTR_FAN_MODE: FAN_HIGH}, blocking=True, ) await hass.async_block_till_done() mock_set_state.assert_called_once() with patch( "homeassistant.components.ccm15.coordinator.CCM15Device.async_set_state" ) as mock_set_state: await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, {ATTR_ENTITY_ID: ["climate.midea_0"], ATTR_HVAC_MODE: HVACMode.COOL}, blocking=True, ) await hass.async_block_till_done() mock_set_state.assert_called_once() with patch( "homeassistant.components.ccm15.coordinator.CCM15Device.async_set_state" ) as mock_set_state: await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_TEMPERATURE, {ATTR_ENTITY_ID: ["climate.midea_0"], ATTR_TEMPERATURE: 25}, blocking=True, ) await hass.async_block_till_done() mock_set_state.assert_called_once() with patch( "homeassistant.components.ccm15.coordinator.CCM15Device.async_set_state" ) as mock_set_state: await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_TURN_ON, {ATTR_ENTITY_ID: ["climate.midea_0"]}, blocking=True, ) await hass.async_block_till_done() mock_set_state.assert_called_once() with patch( "homeassistant.components.ccm15.coordinator.CCM15Device.async_set_state" ) as mock_set_state: await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_TURN_OFF, {ATTR_ENTITY_ID: ["climate.midea_0"]}, blocking=True, ) await hass.async_block_till_done() mock_set_state.assert_called_once() # Create an instance of the CCM15DeviceState class device_state = CCM15DeviceState(devices={}) with patch( "ccm15.CCM15Device.CCM15Device.get_status_async", return_value=device_state, ): freezer.tick(timedelta(minutes=15)) async_fire_time_changed(hass) await hass.async_block_till_done() assert entity_registry.async_get("climate.midea_0") == snapshot assert entity_registry.async_get("climate.midea_1") == snapshot assert hass.states.get("climate.midea_0") == snapshot assert hass.states.get("climate.midea_1") == snapshot