test_zx_g30_alarm.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. __test__ = True
  25. def setUp(self):
  26. self.setUpForConfig("zx_g30_alarm.yaml", ZXG30_ALARM_PAYLOAD)
  27. self.subject = self.entities["alarm_control_panel"]
  28. self.mark_secondary(
  29. [
  30. "button_disarm",
  31. "button_away_arm",
  32. "button_home_arm",
  33. "number_exit_delay",
  34. "binary_sensor_tamper",
  35. "switch_voice_prompt",
  36. "binary_sensor_plug",
  37. "binary_sensor_battery",
  38. "switch_alarm_call",
  39. "switch_alarm_sms",
  40. "switch_alarm_notification",
  41. "number_entry_delay",
  42. "switch_tick_down",
  43. "button_factory_reset",
  44. ]
  45. )
  46. def test_supported_features(self):
  47. self.assertEqual(
  48. self.subject.supported_features,
  49. Feature.ARM_AWAY | Feature.ARM_HOME,
  50. )
  51. def test_state(self):
  52. self.dps[ALARMSTATE_DP] = "disarmed"
  53. self.assertEqual(self.subject.alarm_state, AlarmControlPanelState.DISARMED)
  54. async def test_arm_home(self):
  55. async with assert_device_properties_set(
  56. self.subject._device,
  57. {ALARMSTATE_DP: "home"},
  58. ):
  59. await self.subject.async_alarm_arm_home()
  60. async def test_arm_away(self):
  61. async with assert_device_properties_set(
  62. self.subject._device,
  63. {ALARMSTATE_DP: "arm"},
  64. ):
  65. await self.subject.async_alarm_arm_away()
  66. async def test_disarm(self):
  67. async with assert_device_properties_set(
  68. self.subject._device,
  69. {ALARMSTATE_DP: "disarmed"},
  70. ):
  71. await self.subject.async_alarm_disarm()
  72. async def test_arm_vacation_fails_when_not_supported(self):
  73. with self.assertRaises(NotImplementedError):
  74. await self.subject.async_alarm_arm_vacation()
  75. async def test_trigger_fails_when_not_supported(self):
  76. with self.assertRaises(NotImplementedError):
  77. await self.subject.async_alarm_trigger()