"""Helper method tests.""" from unittest.mock import patch from homeassistant.components.tado import TadoConnector from homeassistant.components.tado.const import ( CONST_OVERLAY_MANUAL, CONST_OVERLAY_TADO_DEFAULT, CONST_OVERLAY_TADO_MODE, CONST_OVERLAY_TIMER, ) from homeassistant.components.tado.helper import decide_duration, decide_overlay_mode from homeassistant.core import HomeAssistant def dummy_tado_connector(hass: HomeAssistant, fallback) -> TadoConnector: """Return dummy tado connector.""" return TadoConnector(hass, username="dummy", password="dummy", fallback=fallback) async def test_overlay_mode_duration_set(hass: HomeAssistant) -> None: """Test overlay method selection when duration is set.""" tado = dummy_tado_connector(hass=hass, fallback=CONST_OVERLAY_TADO_MODE) overlay_mode = decide_overlay_mode(tado=tado, duration=3600, zone_id=1) # Must select TIMER overlay assert overlay_mode == CONST_OVERLAY_TIMER async def test_overlay_mode_next_time_block_fallback(hass: HomeAssistant) -> None: """Test overlay method selection when duration is not set.""" integration_fallback = CONST_OVERLAY_TADO_MODE tado = dummy_tado_connector(hass=hass, fallback=integration_fallback) overlay_mode = decide_overlay_mode(tado=tado, duration=None, zone_id=1) # Must fallback to integration wide setting assert overlay_mode == integration_fallback async def test_overlay_mode_tado_default_fallback(hass: HomeAssistant) -> None: """Test overlay method selection when tado default is selected.""" integration_fallback = CONST_OVERLAY_TADO_DEFAULT zone_fallback = CONST_OVERLAY_MANUAL tado = dummy_tado_connector(hass=hass, fallback=integration_fallback) class MockZoneData: def __init__(self) -> None: self.default_overlay_termination_type = zone_fallback zone_id = 1 zone_data = {"zone": {zone_id: MockZoneData()}} with patch.dict(tado.data, zone_data): overlay_mode = decide_overlay_mode(tado=tado, duration=None, zone_id=zone_id) # Must fallback to zone setting assert overlay_mode == zone_fallback async def test_duration_enabled_without_tado_default(hass: HomeAssistant) -> None: """Test duration decide method when overlay is timer and duration is set.""" overlay = CONST_OVERLAY_TIMER expected_duration = 600 tado = dummy_tado_connector(hass=hass, fallback=CONST_OVERLAY_MANUAL) duration = decide_duration( tado=tado, duration=expected_duration, overlay_mode=overlay, zone_id=0 ) # Should return the same duration value assert duration == expected_duration async def test_duration_enabled_with_tado_default(hass: HomeAssistant) -> None: """Test overlay method selection when ended up with timer overlay and None duration.""" zone_fallback = CONST_OVERLAY_TIMER expected_duration = 45000 tado = dummy_tado_connector(hass=hass, fallback=zone_fallback) class MockZoneData: def __init__(self) -> None: self.default_overlay_termination_duration = expected_duration zone_id = 1 zone_data = {"zone": {zone_id: MockZoneData()}} with patch.dict(tado.data, zone_data): duration = decide_duration( tado=tado, duration=None, zone_id=zone_id, overlay_mode=zone_fallback ) # Must fallback to zone timer setting assert duration == expected_duration