test_beca_bhp6000_thermostat.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. from homeassistant.components.climate.const import (
  2. ClimateEntityFeature,
  3. HVACMode,
  4. )
  5. from homeassistant.const import UnitOfTemperature
  6. from ..const import BECA_BHP6000_PAYLOAD
  7. from ..helpers import assert_device_properties_set
  8. from ..mixins.climate import TargetTemperatureTests
  9. from ..mixins.light import BasicLightTests
  10. from ..mixins.lock import BasicLockTests
  11. from .base_device_tests import TuyaDeviceTestCase
  12. LIGHT_DPS = "1"
  13. TEMPERATURE_DPS = "2"
  14. CURRENTTEMP_DPS = "3"
  15. PRESET_DPS = "4"
  16. HVACMODE_DPS = "5"
  17. FAN_DPS = "6"
  18. LOCK_DPS = "7"
  19. class TestBecaBHP6000Thermostat(
  20. BasicLightTests,
  21. BasicLockTests,
  22. TargetTemperatureTests,
  23. TuyaDeviceTestCase,
  24. ):
  25. __test__ = True
  26. def setUp(self):
  27. self.setUpForConfig("beca_bhp6000_thermostat_f.yaml", BECA_BHP6000_PAYLOAD)
  28. self.subject = self.entities.get("climate")
  29. self.setUpTargetTemperature(
  30. TEMPERATURE_DPS,
  31. self.subject,
  32. min=40,
  33. max=95,
  34. )
  35. self.setUpBasicLight(LIGHT_DPS, self.entities.get("light_display"))
  36. self.setUpBasicLock(LOCK_DPS, self.entities.get("lock_child_lock"))
  37. self.mark_secondary(["light_display", "lock_child_lock"])
  38. def test_supported_features(self):
  39. self.assertEqual(
  40. self.subject.supported_features,
  41. (
  42. ClimateEntityFeature.FAN_MODE
  43. | ClimateEntityFeature.PRESET_MODE
  44. | ClimateEntityFeature.TARGET_TEMPERATURE
  45. ),
  46. )
  47. def test_temperature_unit_returns_configured_temperature_unit(self):
  48. self.assertEqual(self.subject.temperature_unit, UnitOfTemperature.FAHRENHEIT)
  49. async def test_legacy_set_temperature_with_preset_mode(self):
  50. async with assert_device_properties_set(self.subject._device, {PRESET_DPS: 1}):
  51. await self.subject.async_set_temperature(preset_mode="Schedule")
  52. async def test_legacy_set_temperature_with_both_properties(self):
  53. async with assert_device_properties_set(
  54. self.subject._device,
  55. {
  56. TEMPERATURE_DPS: 78,
  57. PRESET_DPS: 4,
  58. },
  59. ):
  60. await self.subject.async_set_temperature(
  61. temperature=78, preset_mode="Holiday Hold"
  62. )
  63. def test_current_temperature(self):
  64. self.dps[CURRENTTEMP_DPS] = 70
  65. self.assertEqual(self.subject.current_temperature, 70)
  66. def test_hvac_mode(self):
  67. self.dps[HVACMODE_DPS] = "1"
  68. self.assertEqual(self.subject.hvac_mode, HVACMode.COOL)
  69. self.dps[HVACMODE_DPS] = "2"
  70. self.assertEqual(self.subject.hvac_mode, HVACMode.HEAT)
  71. self.dps[HVACMODE_DPS] = "3"
  72. self.assertEqual(self.subject.hvac_mode, HVACMode.OFF)
  73. self.dps[HVACMODE_DPS] = "4"
  74. self.assertEqual(self.subject.hvac_mode, HVACMode.HEAT_COOL)
  75. self.dps[HVACMODE_DPS] = "5"
  76. self.assertEqual(self.subject.hvac_mode, HVACMode.AUTO)
  77. def test_hvac_modes(self):
  78. self.assertCountEqual(
  79. self.subject.hvac_modes,
  80. [
  81. HVACMode.OFF,
  82. HVACMode.HEAT,
  83. HVACMode.HEAT_COOL,
  84. HVACMode.COOL,
  85. HVACMode.AUTO,
  86. ],
  87. )
  88. def test_fan_mode(self):
  89. self.dps[FAN_DPS] = False
  90. self.assertEqual(self.subject.fan_mode, "auto")
  91. self.dps[FAN_DPS] = True
  92. self.assertEqual(self.subject.fan_mode, "on")
  93. def test_fan_modes(self):
  94. self.assertCountEqual(
  95. self.subject.fan_modes,
  96. [
  97. "auto",
  98. "on",
  99. ],
  100. )
  101. async def test_set_fan_mode_to_auto(self):
  102. async with assert_device_properties_set(
  103. self.subject._device,
  104. {FAN_DPS: False},
  105. ):
  106. await self.subject.async_set_fan_mode("auto")
  107. async def test_set_fan_mode_to_on(self):
  108. async with assert_device_properties_set(
  109. self.subject._device,
  110. {FAN_DPS: True},
  111. ):
  112. await self.subject.async_set_fan_mode("on")
  113. def test_extra_state_attributes(self):
  114. self.assertEqual(self.subject.extra_state_attributes, {})
  115. def test_icons(self):
  116. self.dps[HVACMODE_DPS] = 1
  117. self.assertEqual(self.subject.icon, "mdi:snowflake")
  118. self.dps[HVACMODE_DPS] = 2
  119. self.assertEqual(self.subject.icon, "mdi:fire")
  120. self.dps[HVACMODE_DPS] = 3
  121. self.assertEqual(self.subject.icon, "mdi:hvac-off")
  122. self.dps[HVACMODE_DPS] = 4
  123. self.assertEqual(self.subject.icon, "mdi:fire-alert")
  124. self.dps[HVACMODE_DPS] = 5
  125. self.assertEqual(self.subject.icon, "mdi:hvac")
  126. self.dps[LIGHT_DPS] = True
  127. self.assertEqual(self.basicLight.icon, "mdi:led-on")
  128. self.dps[LIGHT_DPS] = False
  129. self.assertEqual(self.basicLight.icon, "mdi:led-off")
  130. class TestBecaBHP6000ThermostatC(TuyaDeviceTestCase):
  131. __test__ = True
  132. def setUp(self):
  133. self.setUpForConfig("beca_bhp6000_thermostat_c.yaml", BECA_BHP6000_PAYLOAD)
  134. self.subject = self.entities.get("climate")
  135. self.mark_secondary(["light_display", "lock_child_lock"])
  136. def test_temperature_unit_returns_configured_temperature_unit(self):
  137. self.assertEqual(self.subject.temperature_unit, UnitOfTemperature.CELSIUS)
  138. def test_minimum_target_temperature(self):
  139. self.assertEqual(self.subject.min_temp, 5)
  140. def test_maximum_target_temperature(self):
  141. self.assertEqual(self.subject.max_temp, 35)