test_himox_h06_purifier.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. from homeassistant.components.fan import FanEntityFeature
  2. from homeassistant.components.sensor import SensorDeviceClass
  3. from homeassistant.const import PERCENTAGE, UnitOfTime
  4. from ..const import HIMOX_H06_PURIFIER_PAYLOAD
  5. from ..helpers import assert_device_properties_set
  6. from ..mixins.button import BasicButtonTests
  7. from ..mixins.light import BasicLightTests
  8. from ..mixins.select import MultiSelectTests
  9. from ..mixins.sensor import MultiSensorTests
  10. from ..mixins.switch import SwitchableTests
  11. from .base_device_tests import TuyaDeviceTestCase
  12. SWITCH_DPS = "1"
  13. SPEED_DPS = "4"
  14. FILTER_DPS = "5"
  15. LIGHT_DPS = "8"
  16. RESET_DPS = "11"
  17. TIMER_DPS = "18"
  18. COUNTDOWN_DPS = "19"
  19. AQI_DPS = "22"
  20. MODE_DPS = "101"
  21. class TestHimoxH06Purifier(
  22. BasicButtonTests,
  23. BasicLightTests,
  24. MultiSelectTests,
  25. MultiSensorTests,
  26. SwitchableTests,
  27. TuyaDeviceTestCase,
  28. ):
  29. __test__ = True
  30. def setUp(self):
  31. self.setUpForConfig("himox_h06_purifier.yaml", HIMOX_H06_PURIFIER_PAYLOAD)
  32. self.subject = self.entities["fan"]
  33. self.setUpSwitchable(SWITCH_DPS, self.subject)
  34. self.setUpBasicButton(
  35. RESET_DPS,
  36. self.entities.get("button_filter_reset"),
  37. )
  38. self.setUpBasicLight(LIGHT_DPS, self.entities.get("light_aq_indicator"))
  39. self.setUpMultiSelect(
  40. [
  41. {
  42. "dps": TIMER_DPS,
  43. "name": "select_timer",
  44. "options": {
  45. "cancel": "cancel",
  46. "4h": "4h",
  47. "8h": "8h",
  48. },
  49. },
  50. {
  51. "dps": MODE_DPS,
  52. "name": "select_configuration",
  53. "options": {
  54. "calcle": "Auto",
  55. "1": "Medium",
  56. "2": "Severe",
  57. },
  58. },
  59. ]
  60. )
  61. self.setUpMultiSensors(
  62. [
  63. {
  64. "dps": FILTER_DPS,
  65. "name": "sensor_active_filter_life",
  66. "unit": PERCENTAGE,
  67. },
  68. {
  69. "dps": COUNTDOWN_DPS,
  70. "name": "sensor_time_remaining",
  71. "unit": UnitOfTime.MINUTES,
  72. "device_class": SensorDeviceClass.DURATION,
  73. },
  74. {
  75. "dps": AQI_DPS,
  76. "name": "sensor_air_quality",
  77. },
  78. ]
  79. )
  80. self.mark_secondary(
  81. [
  82. "button_filter_reset",
  83. "light_aq_indicator",
  84. "sensor_active_filter_life",
  85. "select_timer",
  86. "sensor_time_remaining",
  87. ]
  88. )
  89. def test_supported_features(self):
  90. self.assertEqual(
  91. self.subject.supported_features,
  92. FanEntityFeature.SET_SPEED
  93. | FanEntityFeature.TURN_OFF
  94. | FanEntityFeature.TURN_ON,
  95. )
  96. def test_speed(self):
  97. self.dps[SPEED_DPS] = "low"
  98. self.assertEqual(self.subject.percentage, 33)
  99. self.assertEqual(type(self.subject.percentage), int)
  100. def test_speed_step(self):
  101. self.assertAlmostEqual(self.subject.percentage_step, 33, 0)
  102. async def test_set_speed(self):
  103. async with assert_device_properties_set(
  104. self.subject._device, {SPEED_DPS: "mid"}
  105. ):
  106. await self.subject.async_set_percentage(67)
  107. async def test_set_speed_snaps(self):
  108. async with assert_device_properties_set(
  109. self.subject._device, {SPEED_DPS: "high"}
  110. ):
  111. await self.subject.async_set_percentage(90)