test_zx_g30_alarm.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. """Tests for the ZX G30 Alarm Control Panel."""
  2. from homeassistant.components.alarm_control_panel import (
  3. AlarmControlPanelEntityFeature as Feature,
  4. )
  5. from homeassistant.components.alarm_control_panel import (
  6. AlarmControlPanelState,
  7. )
  8. from ..const import ZXG30_ALARM_PAYLOAD
  9. from ..helpers import assert_device_properties_set
  10. from .base_device_tests import TuyaDeviceTestCase
  11. ALARMSTATE_DP = "1"
  12. EXITDELAY_DP = "2"
  13. SIRENDURATION_DP = "3"
  14. SIRENTONE_DP = "4"
  15. TAMPER_DP = "9"
  16. VOICE_DP = "10"
  17. POWER_DP = "15"
  18. BATTERY_DP = "16"
  19. LOWBATT_DP = "17"
  20. NOTIFY_DP = "27"
  21. ENTRYDELAY_DP = "28"
  22. TICKDOWN_DP = "29"
  23. class TestZXG30Alarm(TuyaDeviceTestCase):
  24. def setUp(self):
  25. self.setUpForConfig("zx_g30_alarm.yaml", ZXG30_ALARM_PAYLOAD)
  26. self.subject = self.entities["alarm_control_panel"]
  27. self.mark_secondary(
  28. [
  29. "button_disarm",
  30. "button_away_arm",
  31. "button_home_arm",
  32. "number_exit_delay",
  33. "binary_sensor_tamper",
  34. "switch_voice_prompt",
  35. "binary_sensor_plug",
  36. "binary_sensor_battery",
  37. "switch_alarm_call",
  38. "switch_alarm_sms",
  39. "switch_alarm_notification",
  40. "number_entry_delay",
  41. "switch_tick_down",
  42. "button_factory_reset",
  43. ]
  44. )
  45. def test_supported_features(self):
  46. self.assertEqual(
  47. self.subject.supported_features,
  48. Feature.ARM_AWAY | Feature.ARM_HOME,
  49. )
  50. def test_state(self):
  51. self.dps[ALARMSTATE_DP] = "disarmed"
  52. self.assertEqual(self.subject.alarm_state, AlarmControlPanelState.DISARMED)
  53. async def test_arm_home(self):
  54. async with assert_device_properties_set(
  55. self.subject._device,
  56. {ALARMSTATE_DP: "home"},
  57. ):
  58. await self.subject.async_alarm_arm_home()
  59. async def test_arm_away(self):
  60. async with assert_device_properties_set(
  61. self.subject._device,
  62. {ALARMSTATE_DP: "arm"},
  63. ):
  64. await self.subject.async_alarm_arm_away()
  65. async def test_disarm(self):
  66. async with assert_device_properties_set(
  67. self.subject._device,
  68. {ALARMSTATE_DP: "disarmed"},
  69. ):
  70. await self.subject.async_alarm_disarm()
  71. async def test_arm_vacation_fails_when_not_supported(self):
  72. with self.assertRaises(NotImplementedError):
  73. await self.subject.async_alarm_arm_vacation()
  74. async def test_trigger_fails_when_not_supported(self):
  75. with self.assertRaises(NotImplementedError):
  76. await self.subject.async_alarm_trigger()