test_ble_water_valve.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. """Tests for the BLE water valve."""
  2. from homeassistant.components.valve import ValveDeviceClass, ValveEntityFeature
  3. from ..const import BLE_WATERVALVE_PAYLOAD
  4. from ..helpers import assert_device_properties_set
  5. from .base_device_tests import TuyaDeviceTestCase
  6. VALVE_DP = "1"
  7. PROBLEM_DP = "4"
  8. BATTERY_DP = "7"
  9. TOTALUSE_DP = "9"
  10. WEATHERDELAY_DP = "10"
  11. IRRIGTIME = "11"
  12. OPERATION_DP = "12"
  13. WEATHER_DP = "13"
  14. WEATHERSW_DP = "14"
  15. LASTUSE_DP = "15"
  16. SOAKSCHED_DP = "16"
  17. IRRIGSCHED_DP = "17"
  18. class TestBLEValve(TuyaDeviceTestCase):
  19. __test__ = True
  20. def setUp(self):
  21. self.setUpForConfig("ble_water_valve.yaml", BLE_WATERVALVE_PAYLOAD)
  22. self.subject = self.entities["valve_water"]
  23. self.mark_secondary(
  24. [
  25. "switch",
  26. "sensor_battery",
  27. "binary_sensor_problem",
  28. "sensor_operation",
  29. "sensor_accumulated_use_time",
  30. "sensor_last_use_time",
  31. "select_weather_delay",
  32. "number_irrigation_time",
  33. "switch_smart_weather_switch",
  34. ]
  35. )
  36. def test_device_class_is_water(self):
  37. self.assertEqual(self.subject.device_class, ValveDeviceClass.WATER)
  38. def test_supported_features(self):
  39. self.assertEqual(
  40. self.subject.supported_features,
  41. ValveEntityFeature.OPEN | ValveEntityFeature.CLOSE,
  42. )
  43. def test_is_closed(self):
  44. self.dps[VALVE_DP] = True
  45. self.assertFalse(self.subject.is_closed)
  46. self.dps[VALVE_DP] = False
  47. self.assertTrue(self.subject.is_closed)
  48. async def test_open_valve(self):
  49. async with assert_device_properties_set(
  50. self.subject._device,
  51. {VALVE_DP: True},
  52. ):
  53. await self.subject.async_open_valve()
  54. async def test_close_valve(self):
  55. async with assert_device_properties_set(
  56. self.subject._device,
  57. {VALVE_DP: False},
  58. ):
  59. await self.subject.async_close_valve()
  60. def test_extra_state_attributes(self):
  61. self.dps[WEATHER_DP] = "Sunny"
  62. self.dps[SOAKSCHED_DP] = "soaktest"
  63. self.dps[IRRIGSCHED_DP] = "irrigationtest"
  64. self.assertDictEqual(
  65. self.subject.extra_state_attributes,
  66. {
  67. "weather": "Sunny",
  68. "soak_schedule": "soaktest",
  69. "irrigation_schedule": "irrigationtest",
  70. },
  71. )