test_digoo_dgsp01_dual_nightlight_switch.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. """Tests for the switch entity."""
  2. from homeassistant.components.light import ColorMode, LightEntityFeature
  3. from homeassistant.components.switch import SwitchDeviceClass
  4. from ..const import DIGOO_DGSP01_SOCKET_PAYLOAD
  5. from ..helpers import assert_device_properties_set
  6. from ..mixins.switch import BasicSwitchTests
  7. from .base_device_tests import TuyaDeviceTestCase
  8. SWITCH_DPS = "1"
  9. LIGHTSW_DPS = "27"
  10. COLORMODE_DPS = "28"
  11. BRIGHTNESS_DPS = "29"
  12. RGB_DPS = "31"
  13. UNKNOWN32_DPS = "32"
  14. UNKNOWN33_DPS = "33"
  15. UNKNOWN34_DPS = "34"
  16. UNKNOWN35_DPS = "35"
  17. UNKNOWN36_DPS = "36"
  18. class TestDigooNightlightSwitch(BasicSwitchTests, TuyaDeviceTestCase):
  19. __test__ = True
  20. def setUp(self):
  21. self.setUpForConfig(
  22. "digoo_dgsp01_dual_nightlight_switch.yaml",
  23. DIGOO_DGSP01_SOCKET_PAYLOAD,
  24. )
  25. self.subject = self.entities.get("switch_outlet")
  26. self.light = self.entities.get("light_night_light")
  27. self.setUpBasicSwitch(
  28. SWITCH_DPS, self.subject, device_class=SwitchDeviceClass.OUTLET
  29. )
  30. def test_light_is_on(self):
  31. self.dps[LIGHTSW_DPS] = True
  32. self.assertTrue(self.light.is_on)
  33. self.dps[LIGHTSW_DPS] = False
  34. self.assertFalse(self.light.is_on)
  35. def test_light_brightness(self):
  36. self.dps[BRIGHTNESS_DPS] = 45
  37. self.dps[COLORMODE_DPS] = "white"
  38. self.assertEqual(self.light.brightness, 45)
  39. def test_light_color_mode(self):
  40. self.dps[COLORMODE_DPS] = "colour"
  41. self.assertEqual(self.light.color_mode, ColorMode.HS)
  42. self.dps[COLORMODE_DPS] = "white"
  43. self.assertEqual(self.light.color_mode, ColorMode.WHITE)
  44. self.dps[COLORMODE_DPS] = "scene"
  45. self.assertEqual(self.light.color_mode, ColorMode.HS)
  46. self.dps[COLORMODE_DPS] = "music"
  47. self.assertEqual(self.light.color_mode, ColorMode.HS)
  48. self.dps[COLORMODE_DPS] = "scene_1"
  49. self.assertEqual(self.light.color_mode, ColorMode.HS)
  50. self.dps[COLORMODE_DPS] = "scene_2"
  51. self.assertEqual(self.light.color_mode, ColorMode.HS)
  52. self.dps[COLORMODE_DPS] = "scene_3"
  53. self.assertEqual(self.light.color_mode, ColorMode.HS)
  54. self.dps[COLORMODE_DPS] = "scene_4"
  55. self.assertEqual(self.light.color_mode, ColorMode.HS)
  56. def test_light_hs_color(self):
  57. self.dps[RGB_DPS] = "ffff00003c6464"
  58. self.dps[BRIGHTNESS_DPS] = 255
  59. self.assertSequenceEqual(self.light.hs_color, (60, 100))
  60. def test_light_effect_list(self):
  61. self.assertCountEqual(
  62. self.light.effect_list,
  63. [
  64. "Scene",
  65. "Music",
  66. "Scene 1",
  67. "Scene 2",
  68. "Scene 3",
  69. "Scene 4",
  70. ],
  71. )
  72. def test_light_effect(self):
  73. self.dps[COLORMODE_DPS] = "scene"
  74. self.assertEqual(self.light.effect, "Scene")
  75. self.dps[COLORMODE_DPS] = "music"
  76. self.assertEqual(self.light.effect, "Music")
  77. self.dps[COLORMODE_DPS] = "scene_1"
  78. self.assertEqual(self.light.effect, "Scene 1")
  79. self.dps[COLORMODE_DPS] = "scene_2"
  80. self.assertEqual(self.light.effect, "Scene 2")
  81. self.dps[COLORMODE_DPS] = "scene_3"
  82. self.assertEqual(self.light.effect, "Scene 3")
  83. self.dps[COLORMODE_DPS] = "scene_4"
  84. self.assertEqual(self.light.effect, "Scene 4")
  85. self.dps[COLORMODE_DPS] = "white"
  86. self.assertIsNone(self.light.effect)
  87. self.dps[COLORMODE_DPS] = "colour"
  88. self.assertIsNone(self.light.effect)
  89. def test_light_supported_color_modes(self):
  90. self.assertCountEqual(
  91. self.light.supported_color_modes,
  92. {ColorMode.HS, ColorMode.WHITE},
  93. )
  94. def test_light_supported_features(self):
  95. self.assertEqual(self.light.supported_features, LightEntityFeature.EFFECT)
  96. async def test_turn_on(self):
  97. self.dps[LIGHTSW_DPS] = False
  98. async with assert_device_properties_set(
  99. self.light._device, {LIGHTSW_DPS: True}
  100. ):
  101. await self.light.async_turn_on()
  102. async def test_turn_off(self):
  103. async with assert_device_properties_set(
  104. self.light._device, {LIGHTSW_DPS: False}
  105. ):
  106. await self.light.async_turn_off()
  107. async def test_set_brightness(self):
  108. self.dps[COLORMODE_DPS] = "white"
  109. async with assert_device_properties_set(
  110. self.light._device,
  111. {
  112. BRIGHTNESS_DPS: 128,
  113. },
  114. ):
  115. await self.light.async_turn_on(brightness=128)
  116. async def test_set_hs_color(self):
  117. self.dps[RGB_DPS] = "ffffff00000064"
  118. self.dps[COLORMODE_DPS] = "colour"
  119. async with assert_device_properties_set(
  120. self.light._device,
  121. {
  122. RGB_DPS: "ff000000006464",
  123. },
  124. ):
  125. await self.light.async_turn_on(hs_color=(0, 100))
  126. def test_extra_state_attributes_set(self):
  127. self.dps[UNKNOWN32_DPS] = "32"
  128. self.dps[UNKNOWN33_DPS] = "33"
  129. self.dps[UNKNOWN34_DPS] = "34"
  130. self.dps[UNKNOWN35_DPS] = "35"
  131. self.dps[UNKNOWN36_DPS] = "36"
  132. self.assertDictEqual(
  133. self.light.extra_state_attributes,
  134. {
  135. "unknown_32": "32",
  136. "unknown_33": "33",
  137. "unknown_34": "34",
  138. "unknown_35": "35",
  139. "unknown_36": "36",
  140. },
  141. )