test_zx_g30_alarm.py 2.6 KB

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