"""Tests for EQ3 Max! component.""" from unittest.mock import create_autospec, patch from maxcube.device import MAX_DEVICE_MODE_AUTOMATIC, MAX_DEVICE_MODE_MANUAL from maxcube.room import MaxRoom from maxcube.thermostat import MaxThermostat from maxcube.wallthermostat import MaxWallThermostat from maxcube.windowshutter import MaxWindowShutter import pytest from homeassistant.components.maxcube import DOMAIN from homeassistant.core import HomeAssistant from homeassistant.helpers.typing import ConfigType from homeassistant.setup import async_setup_component from homeassistant.util.dt import now @pytest.fixture def room(): """Create a test MAX! room.""" r = MaxRoom() r.id = 1 r.name = "TestRoom" return r @pytest.fixture def thermostat(): """Create test MAX! thermostat.""" t = create_autospec(MaxThermostat) t.name = "TestThermostat" t.serial = "AABBCCDD01" t.rf_address = "abc1" t.room_id = 1 t.is_thermostat.return_value = True t.is_wallthermostat.return_value = False t.is_windowshutter.return_value = False t.mode = MAX_DEVICE_MODE_AUTOMATIC t.comfort_temperature = 19.0 t.eco_temperature = 14.0 t.target_temperature = 20.5 t.actual_temperature = 19.0 t.max_temperature = None t.min_temperature = None t.valve_position = 25 # 25% t.battery = 1 return t @pytest.fixture def wallthermostat(): """Create test MAX! wall thermostat.""" t = create_autospec(MaxWallThermostat) t.name = "TestWallThermostat" t.serial = "AABBCCDD02" t.rf_address = "abc2" t.room_id = 1 t.is_thermostat.return_value = False t.is_wallthermostat.return_value = True t.is_windowshutter.return_value = False t.mode = MAX_DEVICE_MODE_MANUAL t.comfort_temperature = 19.0 t.eco_temperature = 14.0 t.target_temperature = 4.5 t.actual_temperature = 19.0 t.max_temperature = 29.0 t.min_temperature = 4.5 t.battery = 1 return t @pytest.fixture def windowshutter(): """Create test MAX! window shutter.""" shutter = create_autospec(MaxWindowShutter) shutter.name = "TestShutter" shutter.serial = "AABBCCDD03" shutter.rf_address = "abc3" shutter.room_id = 1 shutter.is_open = True shutter.is_thermostat.return_value = False shutter.is_wallthermostat.return_value = False shutter.is_windowshutter.return_value = True shutter.battery = 1 return shutter @pytest.fixture def hass_config(): """Return test HASS configuration.""" return { DOMAIN: { "gateways": [ { "host": "1.2.3.4", } ] } } @pytest.fixture async def cube( hass: HomeAssistant, hass_config: ConfigType, room, thermostat, wallthermostat, windowshutter, ): """Build and setup a cube mock with a single room and some devices.""" with patch("homeassistant.components.maxcube.MaxCube") as mock: cube = mock.return_value cube.rooms = [room] cube.devices = [thermostat, wallthermostat, windowshutter] cube.room_by_id.return_value = room cube.devices_by_room.return_value = [thermostat, wallthermostat, windowshutter] assert await async_setup_component(hass, DOMAIN, hass_config) await hass.async_block_till_done() gateway = hass_config[DOMAIN]["gateways"][0] mock.assert_called_with(gateway["host"], gateway.get("port", 62910), now=now) return cube