test_alarm_control_panel.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. """Tests for the alarm_control_panel entity."""
  2. from unittest.mock import AsyncMock, Mock
  3. import pytest
  4. from pytest_homeassistant_custom_component.common import MockConfigEntry
  5. from custom_components.tuya_local.alarm_control_panel import (
  6. TuyaLocalAlarmControlPanel,
  7. async_setup_entry,
  8. )
  9. from custom_components.tuya_local.const import (
  10. CONF_DEVICE_ID,
  11. CONF_PROTOCOL_VERSION,
  12. CONF_TYPE,
  13. DOMAIN,
  14. )
  15. @pytest.mark.asyncio
  16. async def test_init_entry(hass):
  17. """Test initialisation"""
  18. entry = MockConfigEntry(
  19. domain=DOMAIN,
  20. data={
  21. CONF_TYPE: "zx_g30_alarm",
  22. CONF_DEVICE_ID: "dummy",
  23. CONF_PROTOCOL_VERSION: "auto",
  24. },
  25. )
  26. m_add_entities = Mock()
  27. m_device = AsyncMock()
  28. hass.data[DOMAIN] = {"dummy": {"device": m_device}}
  29. await async_setup_entry(hass, entry, m_add_entities)
  30. assert (
  31. type(hass.data[DOMAIN]["dummy"]["alarm_control_panel"])
  32. is TuyaLocalAlarmControlPanel
  33. )
  34. m_add_entities.assert_called_once()
  35. @pytest.mark.asyncio
  36. async def test_init_entry_as_secondary(hass):
  37. """Test initialisation when alarm_control_panel is a secondary entity"""
  38. entry = MockConfigEntry(
  39. domain=DOMAIN,
  40. data={
  41. CONF_TYPE: "zx_db11_doorbell_alarm",
  42. CONF_DEVICE_ID: "dummy",
  43. CONF_PROTOCOL_VERSION: "auto",
  44. },
  45. )
  46. m_add_entities = Mock()
  47. m_device = AsyncMock()
  48. hass.data[DOMAIN] = {"dummy": {"device": m_device}}
  49. await async_setup_entry(hass, entry, m_add_entities)
  50. assert (
  51. type(hass.data[DOMAIN]["dummy"]["alarm_control_panel_alarm"])
  52. is TuyaLocalAlarmControlPanel
  53. )
  54. m_add_entities.assert_called_once()
  55. @pytest.mark.asyncio
  56. async def test_init_entry_fails_if_device_has_no_alarm_control_panel(hass):
  57. """Test initialisation when device has no matching entity"""
  58. entry = MockConfigEntry(
  59. domain=DOMAIN,
  60. data={
  61. CONF_TYPE: "kogan_heater",
  62. CONF_DEVICE_ID: "dummy",
  63. CONF_PROTOCOL_VERSION: "auto",
  64. },
  65. )
  66. m_add_entities = Mock()
  67. m_device = AsyncMock()
  68. hass.data[DOMAIN] = {"dummy": {"device": m_device}}
  69. try:
  70. await async_setup_entry(hass, entry, m_add_entities)
  71. assert False
  72. except ValueError:
  73. pass
  74. m_add_entities.assert_not_called()
  75. @pytest.mark.asyncio
  76. async def test_init_entry_fails_if_config_is_missing(hass):
  77. """Test initialisation when device has no matching entity"""
  78. entry = MockConfigEntry(
  79. domain=DOMAIN,
  80. data={
  81. CONF_TYPE: "non_existing",
  82. CONF_DEVICE_ID: "dummy",
  83. CONF_PROTOCOL_VERSION: "auto",
  84. },
  85. )
  86. m_add_entities = Mock()
  87. m_device = AsyncMock()
  88. hass.data[DOMAIN] = {"dummy": {"device": m_device}}
  89. try:
  90. await async_setup_entry(hass, entry, m_add_entities)
  91. assert False
  92. except ValueError:
  93. pass
  94. m_add_entities.assert_not_called()