mirror of https://github.com/home-assistant/core
79 lines
2.6 KiB
Python
79 lines
2.6 KiB
Python
"""Tests for the TotalConnect buttons."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
from syrupy import SnapshotAssertion
|
|
from total_connect_client.exceptions import FailedToBypassZone
|
|
|
|
from homeassistant.components.button import DOMAIN as BUTTON, SERVICE_PRESS
|
|
from homeassistant.const import ATTR_ENTITY_ID
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import entity_registry as er
|
|
|
|
from .common import (
|
|
RESPONSE_ZONE_BYPASS_FAILURE,
|
|
RESPONSE_ZONE_BYPASS_SUCCESS,
|
|
TOTALCONNECT_REQUEST,
|
|
setup_platform,
|
|
)
|
|
|
|
from tests.common import snapshot_platform
|
|
|
|
ZONE_BYPASS_ID = "button.security_bypass"
|
|
PANEL_CLEAR_ID = "button.test_clear_bypass"
|
|
PANEL_BYPASS_ID = "button.test_bypass_all"
|
|
|
|
|
|
async def test_entity_registry(
|
|
hass: HomeAssistant, entity_registry: er.EntityRegistry, snapshot: SnapshotAssertion
|
|
) -> None:
|
|
"""Test the button is registered in entity registry."""
|
|
entry = await setup_platform(hass, BUTTON)
|
|
|
|
await snapshot_platform(hass, entity_registry, snapshot, entry.entry_id)
|
|
|
|
|
|
@pytest.mark.parametrize("entity_id", [ZONE_BYPASS_ID, PANEL_BYPASS_ID])
|
|
async def test_bypass_button(hass: HomeAssistant, entity_id: str) -> None:
|
|
"""Test pushing a bypass button."""
|
|
responses = [RESPONSE_ZONE_BYPASS_FAILURE, RESPONSE_ZONE_BYPASS_SUCCESS]
|
|
await setup_platform(hass, BUTTON)
|
|
with patch(TOTALCONNECT_REQUEST, side_effect=responses) as mock_request:
|
|
# try to bypass, but fails
|
|
with pytest.raises(FailedToBypassZone):
|
|
await hass.services.async_call(
|
|
domain=BUTTON,
|
|
service=SERVICE_PRESS,
|
|
service_data={ATTR_ENTITY_ID: entity_id},
|
|
blocking=True,
|
|
)
|
|
assert mock_request.call_count == 1
|
|
|
|
# try to bypass, works this time
|
|
await hass.services.async_call(
|
|
domain=BUTTON,
|
|
service=SERVICE_PRESS,
|
|
service_data={ATTR_ENTITY_ID: entity_id},
|
|
blocking=True,
|
|
)
|
|
assert mock_request.call_count == 2
|
|
|
|
|
|
async def test_clear_button(hass: HomeAssistant) -> None:
|
|
"""Test pushing the clear bypass button."""
|
|
data = {ATTR_ENTITY_ID: PANEL_CLEAR_ID}
|
|
await setup_platform(hass, BUTTON)
|
|
TOTALCONNECT_REQUEST = (
|
|
"total_connect_client.location.TotalConnectLocation.clear_bypass"
|
|
)
|
|
|
|
with patch(TOTALCONNECT_REQUEST) as mock_request:
|
|
await hass.services.async_call(
|
|
domain=BUTTON,
|
|
service=SERVICE_PRESS,
|
|
service_data=data,
|
|
blocking=True,
|
|
)
|
|
assert mock_request.call_count == 1
|