test_vork_vk6067aw_purifier.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. from homeassistant.components.binary_sensor import BinarySensorDeviceClass
  2. from homeassistant.components.fan import FanEntityFeature
  3. from homeassistant.const import (
  4. PERCENTAGE,
  5. TIME_MINUTES,
  6. )
  7. from ..const import VORK_VK6067_PURIFIER_PAYLOAD
  8. from ..helpers import assert_device_properties_set
  9. from ..mixins.binary_sensor import BasicBinarySensorTests
  10. from ..mixins.light import BasicLightTests
  11. from ..mixins.select import BasicSelectTests
  12. from ..mixins.sensor import MultiSensorTests
  13. from ..mixins.switch import BasicSwitchTests, SwitchableTests
  14. from .base_device_tests import TuyaDeviceTestCase
  15. SWITCH_DPS = "1"
  16. MODE_DPS = "4"
  17. FILTER_DPS = "5"
  18. LIGHT_DPS = "8"
  19. RESET_DPS = "11"
  20. TIMER_DPS = "18"
  21. COUNTDOWN_DPS = "19"
  22. AQI_DPS = "21"
  23. ERROR_DPS = "22"
  24. class TestVorkVK6267AWPurifier(
  25. BasicBinarySensorTests,
  26. BasicLightTests,
  27. BasicSelectTests,
  28. BasicSwitchTests,
  29. MultiSensorTests,
  30. SwitchableTests,
  31. TuyaDeviceTestCase,
  32. ):
  33. __test__ = True
  34. def setUp(self):
  35. self.setUpForConfig("vork_vk6067aw_purifier.yaml", VORK_VK6067_PURIFIER_PAYLOAD)
  36. self.subject = self.entities["fan"]
  37. self.setUpSwitchable(SWITCH_DPS, self.subject)
  38. self.setUpBasicBinarySensor(
  39. ERROR_DPS,
  40. self.entities.get("binary_sensor_error"),
  41. device_class=BinarySensorDeviceClass.PROBLEM,
  42. testdata=(1, 0),
  43. )
  44. self.setUpBasicLight(LIGHT_DPS, self.entities.get("light"))
  45. self.setUpBasicSelect(
  46. TIMER_DPS,
  47. self.entities.get("select_timer"),
  48. {
  49. "cancel": "off",
  50. "1h": "1 hour",
  51. "2h": "2 hours",
  52. },
  53. )
  54. self.setUpBasicSwitch(RESET_DPS, self.entities.get("switch_filter_reset"))
  55. self.setUpMultiSensors(
  56. [
  57. {
  58. "dps": AQI_DPS,
  59. "name": "sensor_air_quality",
  60. "testdata": ("great", "Great"),
  61. },
  62. {
  63. "dps": COUNTDOWN_DPS,
  64. "name": "sensor_timer",
  65. "unit": TIME_MINUTES,
  66. },
  67. {
  68. "dps": FILTER_DPS,
  69. "name": "sensor_filter",
  70. "unit": PERCENTAGE,
  71. },
  72. ]
  73. )
  74. self.mark_secondary(
  75. [
  76. "binary_sensor_error",
  77. "light",
  78. "select_timer",
  79. "sensor_air_quality",
  80. "sensor_filter",
  81. "sensor_timer",
  82. "switch_filter_reset",
  83. ]
  84. )
  85. def test_supported_features(self):
  86. self.assertEqual(
  87. self.subject.supported_features,
  88. FanEntityFeature.PRESET_MODE,
  89. )
  90. def test_preset_modes(self):
  91. self.assertCountEqual(
  92. self.subject.preset_modes,
  93. ["Low", "Mid", "High", "Auto", "Sleep"],
  94. )
  95. def test_preset_mode(self):
  96. self.dps[MODE_DPS] = "low"
  97. self.assertEqual(self.subject.preset_mode, "Low")
  98. self.dps[MODE_DPS] = "mid"
  99. self.assertEqual(self.subject.preset_mode, "Mid")
  100. self.dps[MODE_DPS] = "high"
  101. self.assertEqual(self.subject.preset_mode, "High")
  102. self.dps[MODE_DPS] = "auto"
  103. self.assertEqual(self.subject.preset_mode, "Auto")
  104. self.dps[MODE_DPS] = "sleep"
  105. self.assertEqual(self.subject.preset_mode, "Sleep")
  106. async def test_set_preset_to_low(self):
  107. async with assert_device_properties_set(
  108. self.subject._device,
  109. {MODE_DPS: "low"},
  110. ):
  111. await self.subject.async_set_preset_mode("Low")
  112. async def test_set_preset_to_auto(self):
  113. async with assert_device_properties_set(
  114. self.subject._device,
  115. {MODE_DPS: "auto"},
  116. ):
  117. await self.subject.async_set_preset_mode("Auto")
  118. async def test_set_preset_to_sleep(self):
  119. async with assert_device_properties_set(
  120. self.subject._device,
  121. {MODE_DPS: "sleep"},
  122. ):
  123. await self.subject.async_set_preset_mode("Sleep")