mirror of
https://github.com/home-assistant/core.git
synced 2025-07-12 15:57:06 +00:00
Add canary alarm_control_panel tests (#40029)
* add canary alarm_control_panel tests * Update .coveragerc * Create test_alarm_control_panel.py * Update __init__.py * Update __init__.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py * Update __init__.py * Update __init__.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py * Update test_alarm_control_panel.py
This commit is contained in:
parent
46f9c0fb8a
commit
00acb180d6
@ -121,7 +121,6 @@ omit =
|
|||||||
homeassistant/components/buienradar/util.py
|
homeassistant/components/buienradar/util.py
|
||||||
homeassistant/components/buienradar/weather.py
|
homeassistant/components/buienradar/weather.py
|
||||||
homeassistant/components/caldav/calendar.py
|
homeassistant/components/caldav/calendar.py
|
||||||
homeassistant/components/canary/alarm_control_panel.py
|
|
||||||
homeassistant/components/canary/camera.py
|
homeassistant/components/canary/camera.py
|
||||||
homeassistant/components/cast/*
|
homeassistant/components/cast/*
|
||||||
homeassistant/components/cert_expiry/helper.py
|
homeassistant/components/cert_expiry/helper.py
|
||||||
|
@ -3,24 +3,6 @@ from unittest.mock import MagicMock, PropertyMock
|
|||||||
|
|
||||||
from canary.api import SensorType
|
from canary.api import SensorType
|
||||||
|
|
||||||
from homeassistant.components.homeassistant import (
|
|
||||||
DOMAIN as HA_DOMAIN,
|
|
||||||
SERVICE_UPDATE_ENTITY,
|
|
||||||
)
|
|
||||||
from homeassistant.const import ATTR_ENTITY_ID
|
|
||||||
from homeassistant.core import HomeAssistant
|
|
||||||
|
|
||||||
|
|
||||||
async def update_entity(hass: HomeAssistant, entity_id: str) -> None:
|
|
||||||
"""Run an update action for an entity."""
|
|
||||||
await hass.services.async_call(
|
|
||||||
HA_DOMAIN,
|
|
||||||
SERVICE_UPDATE_ENTITY,
|
|
||||||
{ATTR_ENTITY_ID: entity_id},
|
|
||||||
blocking=True,
|
|
||||||
)
|
|
||||||
await hass.async_block_till_done()
|
|
||||||
|
|
||||||
|
|
||||||
def mock_device(device_id, name, is_online=True, device_type_name=None):
|
def mock_device(device_id, name, is_online=True, device_type_name=None):
|
||||||
"""Mock Canary Device class."""
|
"""Mock Canary Device class."""
|
||||||
@ -34,13 +16,17 @@ def mock_device(device_id, name, is_online=True, device_type_name=None):
|
|||||||
return device
|
return device
|
||||||
|
|
||||||
|
|
||||||
def mock_location(location_id, name, is_celsius=True, devices=None):
|
def mock_location(
|
||||||
|
location_id, name, is_celsius=True, devices=None, mode=None, is_private=False
|
||||||
|
):
|
||||||
"""Mock Canary Location class."""
|
"""Mock Canary Location class."""
|
||||||
location = MagicMock()
|
location = MagicMock()
|
||||||
type(location).location_id = PropertyMock(return_value=location_id)
|
type(location).location_id = PropertyMock(return_value=location_id)
|
||||||
type(location).name = PropertyMock(return_value=name)
|
type(location).name = PropertyMock(return_value=name)
|
||||||
type(location).is_celsius = PropertyMock(return_value=is_celsius)
|
type(location).is_celsius = PropertyMock(return_value=is_celsius)
|
||||||
|
type(location).is_private = PropertyMock(return_value=is_private)
|
||||||
type(location).devices = PropertyMock(return_value=devices or [])
|
type(location).devices = PropertyMock(return_value=devices or [])
|
||||||
|
type(location).mode = PropertyMock(return_value=mode)
|
||||||
return location
|
return location
|
||||||
|
|
||||||
|
|
||||||
|
170
tests/components/canary/test_alarm_control_panel.py
Normal file
170
tests/components/canary/test_alarm_control_panel.py
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
"""The tests for the Canary alarm_control_panel platform."""
|
||||||
|
from canary.api import LOCATION_MODE_AWAY, LOCATION_MODE_HOME, LOCATION_MODE_NIGHT
|
||||||
|
|
||||||
|
from homeassistant.components.alarm_control_panel import DOMAIN as ALARM_DOMAIN
|
||||||
|
from homeassistant.components.canary import DOMAIN
|
||||||
|
from homeassistant.const import (
|
||||||
|
SERVICE_ALARM_ARM_AWAY,
|
||||||
|
SERVICE_ALARM_ARM_HOME,
|
||||||
|
SERVICE_ALARM_ARM_NIGHT,
|
||||||
|
SERVICE_ALARM_DISARM,
|
||||||
|
STATE_ALARM_ARMED_AWAY,
|
||||||
|
STATE_ALARM_ARMED_HOME,
|
||||||
|
STATE_ALARM_ARMED_NIGHT,
|
||||||
|
STATE_ALARM_DISARMED,
|
||||||
|
STATE_UNKNOWN,
|
||||||
|
)
|
||||||
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
|
from . import mock_device, mock_location, mock_mode
|
||||||
|
|
||||||
|
from tests.async_mock import PropertyMock, patch
|
||||||
|
from tests.common import mock_registry
|
||||||
|
|
||||||
|
|
||||||
|
async def test_alarm_control_panel(hass, canary) -> None:
|
||||||
|
"""Test the creation and values of the alarm_control_panel for Canary."""
|
||||||
|
await async_setup_component(hass, "persistent_notification", {})
|
||||||
|
|
||||||
|
registry = mock_registry(hass)
|
||||||
|
online_device_at_home = mock_device(20, "Dining Room", True, "Canary Pro")
|
||||||
|
|
||||||
|
mocked_location = mock_location(
|
||||||
|
location_id=100,
|
||||||
|
name="Home",
|
||||||
|
is_celsius=True,
|
||||||
|
is_private=False,
|
||||||
|
mode=mock_mode(7, "standby"),
|
||||||
|
devices=[online_device_at_home],
|
||||||
|
)
|
||||||
|
|
||||||
|
instance = canary.return_value
|
||||||
|
instance.get_locations.return_value = [mocked_location]
|
||||||
|
|
||||||
|
config = {DOMAIN: {"username": "test-username", "password": "test-password"}}
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.canary.CANARY_COMPONENTS", ["alarm_control_panel"]
|
||||||
|
):
|
||||||
|
assert await async_setup_component(hass, DOMAIN, config)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
entity_id = "alarm_control_panel.home"
|
||||||
|
entity_entry = registry.async_get(entity_id)
|
||||||
|
assert not entity_entry
|
||||||
|
|
||||||
|
state = hass.states.get(entity_id)
|
||||||
|
assert state
|
||||||
|
assert state.state == STATE_UNKNOWN
|
||||||
|
assert not state.attributes["private"]
|
||||||
|
|
||||||
|
# test private system
|
||||||
|
type(mocked_location).is_private = PropertyMock(return_value=True)
|
||||||
|
|
||||||
|
await hass.helpers.entity_component.async_update_entity(entity_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
state = hass.states.get(entity_id)
|
||||||
|
assert state
|
||||||
|
assert state.state == STATE_ALARM_DISARMED
|
||||||
|
assert state.attributes["private"]
|
||||||
|
|
||||||
|
type(mocked_location).is_private = PropertyMock(return_value=False)
|
||||||
|
|
||||||
|
# test armed home
|
||||||
|
type(mocked_location).mode = PropertyMock(
|
||||||
|
return_value=mock_mode(4, LOCATION_MODE_HOME)
|
||||||
|
)
|
||||||
|
|
||||||
|
await hass.helpers.entity_component.async_update_entity(entity_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
state = hass.states.get(entity_id)
|
||||||
|
assert state
|
||||||
|
assert state.state == STATE_ALARM_ARMED_HOME
|
||||||
|
|
||||||
|
# test armed away
|
||||||
|
type(mocked_location).mode = PropertyMock(
|
||||||
|
return_value=mock_mode(5, LOCATION_MODE_AWAY)
|
||||||
|
)
|
||||||
|
|
||||||
|
await hass.helpers.entity_component.async_update_entity(entity_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
state = hass.states.get(entity_id)
|
||||||
|
assert state
|
||||||
|
assert state.state == STATE_ALARM_ARMED_AWAY
|
||||||
|
|
||||||
|
# test armed night
|
||||||
|
type(mocked_location).mode = PropertyMock(
|
||||||
|
return_value=mock_mode(6, LOCATION_MODE_NIGHT)
|
||||||
|
)
|
||||||
|
|
||||||
|
await hass.helpers.entity_component.async_update_entity(entity_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
state = hass.states.get(entity_id)
|
||||||
|
assert state
|
||||||
|
assert state.state == STATE_ALARM_ARMED_NIGHT
|
||||||
|
|
||||||
|
|
||||||
|
async def test_alarm_control_panel_services(hass, canary) -> None:
|
||||||
|
"""Test the services of the alarm_control_panel for Canary."""
|
||||||
|
await async_setup_component(hass, "persistent_notification", {})
|
||||||
|
|
||||||
|
online_device_at_home = mock_device(20, "Dining Room", True, "Canary Pro")
|
||||||
|
|
||||||
|
mocked_location = mock_location(
|
||||||
|
location_id=100,
|
||||||
|
name="Home",
|
||||||
|
is_celsius=True,
|
||||||
|
mode=mock_mode(1, "disarmed"),
|
||||||
|
devices=[online_device_at_home],
|
||||||
|
)
|
||||||
|
|
||||||
|
instance = canary.return_value
|
||||||
|
instance.get_locations.return_value = [mocked_location]
|
||||||
|
|
||||||
|
config = {DOMAIN: {"username": "test-username", "password": "test-password"}}
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.canary.CANARY_COMPONENTS", ["alarm_control_panel"]
|
||||||
|
):
|
||||||
|
assert await async_setup_component(hass, DOMAIN, config)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
entity_id = "alarm_control_panel.home"
|
||||||
|
|
||||||
|
# test arm away
|
||||||
|
await hass.services.async_call(
|
||||||
|
ALARM_DOMAIN,
|
||||||
|
SERVICE_ALARM_ARM_AWAY,
|
||||||
|
service_data={"entity_id": entity_id},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
instance.set_location_mode.assert_called_with(100, LOCATION_MODE_AWAY, False)
|
||||||
|
|
||||||
|
# test arm home
|
||||||
|
await hass.services.async_call(
|
||||||
|
ALARM_DOMAIN,
|
||||||
|
SERVICE_ALARM_ARM_HOME,
|
||||||
|
service_data={"entity_id": entity_id},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
instance.set_location_mode.assert_called_with(100, LOCATION_MODE_HOME, False)
|
||||||
|
|
||||||
|
# test arm night
|
||||||
|
await hass.services.async_call(
|
||||||
|
ALARM_DOMAIN,
|
||||||
|
SERVICE_ALARM_ARM_NIGHT,
|
||||||
|
service_data={"entity_id": entity_id},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
instance.set_location_mode.assert_called_with(100, LOCATION_MODE_NIGHT, False)
|
||||||
|
|
||||||
|
# test disarm
|
||||||
|
await hass.services.async_call(
|
||||||
|
ALARM_DOMAIN,
|
||||||
|
SERVICE_ALARM_DISARM,
|
||||||
|
service_data={"entity_id": entity_id},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
instance.set_location_mode.assert_called_with(100, "disarmed", True)
|
Loading…
x
Reference in New Issue
Block a user