test_beca_bhp6000_thermostat.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. def setUp(self):
  23. self.setUpForConfig(
  24. "beca_bhp6000_thermostat_f.yaml",
  25. BECA_BHP6000_PAYLOAD,
  26. )
  27. self.subject = self.entities.get("climate")
  28. self.setUpTargetTemperature(
  29. TEMPERATURE_DPS,
  30. self.subject,
  31. min=40.0,
  32. max=95.0,
  33. )
  34. self.setUpBasicLight(LIGHT_DPS, self.entities.get("light_display"))
  35. self.setUpBasicLock(LOCK_DPS, self.entities.get("lock_child_lock"))
  36. self.mark_secondary(["light_display", "lock_child_lock"])
  37. def test_supported_features(self):
  38. self.assertEqual(
  39. self.subject.supported_features,
  40. (
  41. ClimateEntityFeature.FAN_MODE
  42. | ClimateEntityFeature.PRESET_MODE
  43. | ClimateEntityFeature.TARGET_TEMPERATURE
  44. | ClimateEntityFeature.TURN_OFF
  45. ),
  46. )
  47. def test_temperature_unit_returns_configured_temperature_unit(self):
  48. self.assertEqual(
  49. self.subject.temperature_unit,
  50. UnitOfTemperature.FAHRENHEIT,
  51. )
  52. async def test_legacy_set_temperature_with_preset_mode(self):
  53. async with assert_device_properties_set(
  54. self.subject._device,
  55. {PRESET_DPS: 1},
  56. ):
  57. await self.subject.async_set_temperature(preset_mode="program")
  58. async def test_legacy_set_temperature_with_both_properties(self):
  59. async with assert_device_properties_set(
  60. self.subject._device,
  61. {
  62. TEMPERATURE_DPS: 78,
  63. PRESET_DPS: 4,
  64. },
  65. ):
  66. await self.subject.async_set_temperature(
  67. temperature=78,
  68. preset_mode="away",
  69. )
  70. def test_current_temperature(self):
  71. self.dps[CURRENTTEMP_DPS] = 70
  72. self.assertEqual(self.subject.current_temperature, 70)
  73. def test_hvac_mode(self):
  74. self.dps[HVACMODE_DPS] = "1"
  75. self.assertEqual(self.subject.hvac_mode, HVACMode.COOL)
  76. self.dps[HVACMODE_DPS] = "2"
  77. self.assertEqual(self.subject.hvac_mode, HVACMode.HEAT)
  78. self.dps[HVACMODE_DPS] = "3"
  79. self.assertEqual(self.subject.hvac_mode, HVACMode.OFF)
  80. self.dps[HVACMODE_DPS] = "4"
  81. self.assertEqual(self.subject.hvac_mode, HVACMode.HEAT_COOL)
  82. self.dps[HVACMODE_DPS] = "5"
  83. self.assertEqual(self.subject.hvac_mode, HVACMode.AUTO)
  84. def test_hvac_modes(self):
  85. self.assertCountEqual(
  86. self.subject.hvac_modes,
  87. [
  88. HVACMode.OFF,
  89. HVACMode.HEAT,
  90. HVACMode.HEAT_COOL,
  91. HVACMode.COOL,
  92. HVACMode.AUTO,
  93. ],
  94. )
  95. def test_fan_mode(self):
  96. self.dps[FAN_DPS] = False
  97. self.assertEqual(self.subject.fan_mode, "auto")
  98. self.dps[FAN_DPS] = True
  99. self.assertEqual(self.subject.fan_mode, "on")
  100. def test_fan_modes(self):
  101. self.assertCountEqual(
  102. self.subject.fan_modes,
  103. [
  104. "auto",
  105. "on",
  106. ],
  107. )
  108. async def test_set_fan_mode_to_auto(self):
  109. async with assert_device_properties_set(
  110. self.subject._device,
  111. {FAN_DPS: False},
  112. ):
  113. await self.subject.async_set_fan_mode("auto")
  114. async def test_set_fan_mode_to_on(self):
  115. async with assert_device_properties_set(
  116. self.subject._device,
  117. {FAN_DPS: True},
  118. ):
  119. await self.subject.async_set_fan_mode("on")
  120. def test_extra_state_attributes(self):
  121. self.assertEqual(self.subject.extra_state_attributes, {})
  122. class TestBecaBHP6000ThermostatC(TuyaDeviceTestCase):
  123. def setUp(self):
  124. self.setUpForConfig(
  125. "beca_bhp6000_thermostat_c.yaml",
  126. BECA_BHP6000_PAYLOAD,
  127. )
  128. self.subject = self.entities.get("climate")
  129. self.mark_secondary(["light_display", "lock_child_lock"])
  130. def test_temperature_unit_returns_configured_temperature_unit(self):
  131. self.assertEqual(
  132. self.subject.temperature_unit,
  133. UnitOfTemperature.CELSIUS,
  134. )
  135. def test_minimum_target_temperature(self):
  136. self.assertEqual(self.subject.min_temp, 5)
  137. def test_maximum_target_temperature(self):
  138. self.assertEqual(self.subject.max_temp, 35)