test_beca_bhp6000_thermostat.py 5.2 KB

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