Add toggle service to climate (#100418)
* Add toggle service to climate * Fix mqtt test * Add comments * Fix rebase * Remove not needed properties * Fix toggle service * Fix test * Test * Mod mqtt test --------- Co-authored-by: G Johansson <goran.johansson@shiftit.se>
This commit is contained in:
parent
cb776593cf
commit
3392660537
5 changed files with 135 additions and 13 deletions
|
@ -3,7 +3,7 @@ from __future__ import annotations
|
|||
|
||||
from enum import Enum
|
||||
from types import ModuleType
|
||||
from unittest.mock import MagicMock, patch
|
||||
from unittest.mock import MagicMock, Mock, patch
|
||||
|
||||
import pytest
|
||||
import voluptuous as vol
|
||||
|
@ -110,12 +110,6 @@ class MockClimateEntity(MockEntity, ClimateEntity):
|
|||
"""
|
||||
return [HVACMode.OFF, HVACMode.HEAT]
|
||||
|
||||
def turn_on(self) -> None:
|
||||
"""Turn on."""
|
||||
|
||||
def turn_off(self) -> None:
|
||||
"""Turn off."""
|
||||
|
||||
def set_preset_mode(self, preset_mode: str) -> None:
|
||||
"""Set preset mode."""
|
||||
self._attr_preset_mode = preset_mode
|
||||
|
@ -129,9 +123,19 @@ class MockClimateEntity(MockEntity, ClimateEntity):
|
|||
self._attr_swing_mode = swing_mode
|
||||
|
||||
|
||||
class MockClimateEntityTestMethods(MockClimateEntity):
|
||||
"""Mock Climate device."""
|
||||
|
||||
def turn_on(self) -> None:
|
||||
"""Turn on."""
|
||||
|
||||
def turn_off(self) -> None:
|
||||
"""Turn off."""
|
||||
|
||||
|
||||
async def test_sync_turn_on(hass: HomeAssistant) -> None:
|
||||
"""Test if async turn_on calls sync turn_on."""
|
||||
climate = MockClimateEntity()
|
||||
climate = MockClimateEntityTestMethods()
|
||||
climate.hass = hass
|
||||
|
||||
climate.turn_on = MagicMock()
|
||||
|
@ -142,7 +146,7 @@ async def test_sync_turn_on(hass: HomeAssistant) -> None:
|
|||
|
||||
async def test_sync_turn_off(hass: HomeAssistant) -> None:
|
||||
"""Test if async turn_off calls sync turn_off."""
|
||||
climate = MockClimateEntity()
|
||||
climate = MockClimateEntityTestMethods()
|
||||
climate.hass = hass
|
||||
|
||||
climate.turn_off = MagicMock()
|
||||
|
@ -684,3 +688,80 @@ async def test_no_warning_integration_has_migrated(
|
|||
" implements HVACMode(s): off, heat and therefore implicitly supports the off, heat methods"
|
||||
not in caplog.text
|
||||
)
|
||||
|
||||
|
||||
async def test_turn_on_off_toggle(hass: HomeAssistant) -> None:
|
||||
"""Test turn_on/turn_off/toggle methods."""
|
||||
|
||||
class MockClimateEntityTest(MockClimateEntity):
|
||||
"""Mock Climate device."""
|
||||
|
||||
_attr_hvac_mode = HVACMode.OFF
|
||||
|
||||
@property
|
||||
def hvac_mode(self) -> HVACMode:
|
||||
"""Return hvac mode."""
|
||||
return self._attr_hvac_mode
|
||||
|
||||
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
|
||||
"""Set new target hvac mode."""
|
||||
self._attr_hvac_mode = hvac_mode
|
||||
|
||||
climate = MockClimateEntityTest()
|
||||
climate.hass = hass
|
||||
|
||||
await climate.async_turn_on()
|
||||
assert climate.hvac_mode == HVACMode.HEAT
|
||||
|
||||
await climate.async_turn_off()
|
||||
assert climate.hvac_mode == HVACMode.OFF
|
||||
|
||||
await climate.async_toggle()
|
||||
assert climate.hvac_mode == HVACMode.HEAT
|
||||
await climate.async_toggle()
|
||||
assert climate.hvac_mode == HVACMode.OFF
|
||||
|
||||
|
||||
async def test_sync_toggle(hass: HomeAssistant) -> None:
|
||||
"""Test if async toggle calls sync toggle."""
|
||||
|
||||
class MockClimateEntityTest(MockClimateEntity):
|
||||
"""Mock Climate device."""
|
||||
|
||||
_enable_turn_on_off_backwards_compatibility = False
|
||||
_attr_supported_features = (
|
||||
ClimateEntityFeature.TURN_OFF | ClimateEntityFeature.TURN_ON
|
||||
)
|
||||
|
||||
@property
|
||||
def hvac_mode(self) -> HVACMode:
|
||||
"""Return hvac operation ie. heat, cool mode.
|
||||
|
||||
Need to be one of HVACMode.*.
|
||||
"""
|
||||
return HVACMode.HEAT
|
||||
|
||||
@property
|
||||
def hvac_modes(self) -> list[HVACMode]:
|
||||
"""Return the list of available hvac operation modes.
|
||||
|
||||
Need to be a subset of HVAC_MODES.
|
||||
"""
|
||||
return [HVACMode.OFF, HVACMode.HEAT]
|
||||
|
||||
def turn_on(self) -> None:
|
||||
"""Turn on."""
|
||||
|
||||
def turn_off(self) -> None:
|
||||
"""Turn off."""
|
||||
|
||||
def toggle(self) -> None:
|
||||
"""Toggle."""
|
||||
|
||||
climate = MockClimateEntityTest()
|
||||
climate.hass = hass
|
||||
|
||||
climate.toggle = Mock()
|
||||
await climate.async_toggle()
|
||||
|
||||
assert climate.toggle.called
|
||||
|
|
|
@ -504,10 +504,10 @@ async def test_turn_on_and_off_without_power_command(
|
|||
assert state.state == "cool"
|
||||
mqtt_mock.async_publish.reset_mock()
|
||||
|
||||
await common.async_turn_off(hass, ENTITY_CLIMATE)
|
||||
state = hass.states.get(ENTITY_CLIMATE)
|
||||
assert climate_off is None or state.state == climate_off
|
||||
if climate_off:
|
||||
await common.async_turn_off(hass, ENTITY_CLIMATE)
|
||||
state = hass.states.get(ENTITY_CLIMATE)
|
||||
assert climate_off is None or state.state == climate_off
|
||||
assert state.state == "off"
|
||||
mqtt_mock.async_publish.assert_has_calls([call("mode-topic", "off", 0, False)])
|
||||
else:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue