test_ble_water_valve.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. "time_irrigation_time",
  34. "switch_smart_weather_switch",
  35. ]
  36. )
  37. def test_device_class_is_water(self):
  38. self.assertEqual(self.subject.device_class, ValveDeviceClass.WATER)
  39. def test_supported_features(self):
  40. self.assertEqual(
  41. self.subject.supported_features,
  42. ValveEntityFeature.OPEN | ValveEntityFeature.CLOSE,
  43. )
  44. def test_is_closed(self):
  45. self.dps[VALVE_DP] = True
  46. self.assertFalse(self.subject.is_closed)
  47. self.dps[VALVE_DP] = False
  48. self.assertTrue(self.subject.is_closed)
  49. async def test_open_valve(self):
  50. async with assert_device_properties_set(
  51. self.subject._device,
  52. {VALVE_DP: True},
  53. ):
  54. await self.subject.async_open_valve()
  55. async def test_close_valve(self):
  56. async with assert_device_properties_set(
  57. self.subject._device,
  58. {VALVE_DP: False},
  59. ):
  60. await self.subject.async_close_valve()
  61. def test_extra_state_attributes(self):
  62. self.dps[WEATHER_DP] = "Sunny"
  63. self.dps[SOAKSCHED_DP] = "soaktest"
  64. self.dps[IRRIGSCHED_DP] = "irrigationtest"
  65. self.assertDictEqual(
  66. self.subject.extra_state_attributes,
  67. {
  68. "weather": "Sunny",
  69. "soak_schedule": "soaktest",
  70. "irrigation_schedule": "irrigationtest",
  71. },
  72. )
  73. def test_available(self):
  74. """Override to ignore dynamic availability."""
  75. pass