This commit is contained in:
Paulus Schoutsen 2019-07-31 12:25:30 -07:00
parent da05dfe708
commit 4de97abc3a
2676 changed files with 163166 additions and 140084 deletions

View file

@ -6,31 +6,41 @@ from asynctest import patch, MagicMock
from homeassistant.components import alarm_control_panel
from homeassistant.components.ness_alarm import (
DOMAIN, CONF_DEVICE_PORT, CONF_ZONE_NAME, CONF_ZONES,
CONF_ZONE_ID, SERVICE_AUX, SERVICE_PANIC,
ATTR_CODE, ATTR_OUTPUT_ID)
DOMAIN,
CONF_DEVICE_PORT,
CONF_ZONE_NAME,
CONF_ZONES,
CONF_ZONE_ID,
SERVICE_AUX,
SERVICE_PANIC,
ATTR_CODE,
ATTR_OUTPUT_ID,
)
from homeassistant.const import (
STATE_ALARM_ARMING, SERVICE_ALARM_DISARM, ATTR_ENTITY_ID,
SERVICE_ALARM_ARM_AWAY, SERVICE_ALARM_ARM_HOME, SERVICE_ALARM_TRIGGER,
STATE_ALARM_DISARMED, STATE_ALARM_ARMED_AWAY, STATE_ALARM_PENDING,
STATE_ALARM_TRIGGERED, STATE_UNKNOWN, CONF_HOST)
STATE_ALARM_ARMING,
SERVICE_ALARM_DISARM,
ATTR_ENTITY_ID,
SERVICE_ALARM_ARM_AWAY,
SERVICE_ALARM_ARM_HOME,
SERVICE_ALARM_TRIGGER,
STATE_ALARM_DISARMED,
STATE_ALARM_ARMED_AWAY,
STATE_ALARM_PENDING,
STATE_ALARM_TRIGGERED,
STATE_UNKNOWN,
CONF_HOST,
)
from homeassistant.setup import async_setup_component
from tests.common import MockDependency
VALID_CONFIG = {
DOMAIN: {
CONF_HOST: 'alarm.local',
CONF_HOST: "alarm.local",
CONF_DEVICE_PORT: 1234,
CONF_ZONES: [
{
CONF_ZONE_NAME: 'Zone 1',
CONF_ZONE_ID: 1,
},
{
CONF_ZONE_NAME: 'Zone 2',
CONF_ZONE_ID: 2,
}
]
{CONF_ZONE_NAME: "Zone 1", CONF_ZONE_ID: 1},
{CONF_ZONE_NAME: "Zone 2", CONF_ZONE_ID: 2},
],
}
}
@ -38,13 +48,13 @@ VALID_CONFIG = {
async def test_setup_platform(hass, mock_nessclient):
"""Test platform setup."""
await async_setup_component(hass, DOMAIN, VALID_CONFIG)
assert hass.services.has_service(DOMAIN, 'panic')
assert hass.services.has_service(DOMAIN, 'aux')
assert hass.services.has_service(DOMAIN, "panic")
assert hass.services.has_service(DOMAIN, "aux")
await hass.async_block_till_done()
assert hass.states.get('alarm_control_panel.alarm_panel') is not None
assert hass.states.get('binary_sensor.zone_1') is not None
assert hass.states.get('binary_sensor.zone_2') is not None
assert hass.states.get("alarm_control_panel.alarm_panel") is not None
assert hass.states.get("binary_sensor.zone_1") is not None
assert hass.states.get("binary_sensor.zone_2") is not None
assert mock_nessclient.keepalive.call_count == 1
assert mock_nessclient.update.call_count == 1
@ -54,19 +64,17 @@ async def test_panic_service(hass, mock_nessclient):
"""Test calling panic service."""
await async_setup_component(hass, DOMAIN, VALID_CONFIG)
await hass.services.async_call(
DOMAIN, SERVICE_PANIC, blocking=True, service_data={
ATTR_CODE: '1234'
})
mock_nessclient.panic.assert_awaited_once_with('1234')
DOMAIN, SERVICE_PANIC, blocking=True, service_data={ATTR_CODE: "1234"}
)
mock_nessclient.panic.assert_awaited_once_with("1234")
async def test_aux_service(hass, mock_nessclient):
"""Test calling aux service."""
await async_setup_component(hass, DOMAIN, VALID_CONFIG)
await hass.services.async_call(
DOMAIN, SERVICE_AUX, blocking=True, service_data={
ATTR_OUTPUT_ID: 1
})
DOMAIN, SERVICE_AUX, blocking=True, service_data={ATTR_OUTPUT_ID: 1}
)
mock_nessclient.aux.assert_awaited_once_with(1, True)
@ -79,8 +87,7 @@ async def test_dispatch_state_change(hass, mock_nessclient):
on_state_change(MockArmingState.ARMING)
await hass.async_block_till_done()
assert hass.states.is_state('alarm_control_panel.alarm_panel',
STATE_ALARM_ARMING)
assert hass.states.is_state("alarm_control_panel.alarm_panel", STATE_ALARM_ARMING)
async def test_alarm_disarm(hass, mock_nessclient):
@ -89,12 +96,15 @@ async def test_alarm_disarm(hass, mock_nessclient):
await hass.async_block_till_done()
await hass.services.async_call(
alarm_control_panel.DOMAIN, SERVICE_ALARM_DISARM, blocking=True,
alarm_control_panel.DOMAIN,
SERVICE_ALARM_DISARM,
blocking=True,
service_data={
ATTR_ENTITY_ID: 'alarm_control_panel.alarm_panel',
ATTR_CODE: '1234'
})
mock_nessclient.disarm.assert_called_once_with('1234')
ATTR_ENTITY_ID: "alarm_control_panel.alarm_panel",
ATTR_CODE: "1234",
},
)
mock_nessclient.disarm.assert_called_once_with("1234")
async def test_alarm_arm_away(hass, mock_nessclient):
@ -103,12 +113,15 @@ async def test_alarm_arm_away(hass, mock_nessclient):
await hass.async_block_till_done()
await hass.services.async_call(
alarm_control_panel.DOMAIN, SERVICE_ALARM_ARM_AWAY, blocking=True,
alarm_control_panel.DOMAIN,
SERVICE_ALARM_ARM_AWAY,
blocking=True,
service_data={
ATTR_ENTITY_ID: 'alarm_control_panel.alarm_panel',
ATTR_CODE: '1234'
})
mock_nessclient.arm_away.assert_called_once_with('1234')
ATTR_ENTITY_ID: "alarm_control_panel.alarm_panel",
ATTR_CODE: "1234",
},
)
mock_nessclient.arm_away.assert_called_once_with("1234")
async def test_alarm_arm_home(hass, mock_nessclient):
@ -117,12 +130,15 @@ async def test_alarm_arm_home(hass, mock_nessclient):
await hass.async_block_till_done()
await hass.services.async_call(
alarm_control_panel.DOMAIN, SERVICE_ALARM_ARM_HOME, blocking=True,
alarm_control_panel.DOMAIN,
SERVICE_ALARM_ARM_HOME,
blocking=True,
service_data={
ATTR_ENTITY_ID: 'alarm_control_panel.alarm_panel',
ATTR_CODE: '1234'
})
mock_nessclient.arm_home.assert_called_once_with('1234')
ATTR_ENTITY_ID: "alarm_control_panel.alarm_panel",
ATTR_CODE: "1234",
},
)
mock_nessclient.arm_home.assert_called_once_with("1234")
async def test_alarm_trigger(hass, mock_nessclient):
@ -131,12 +147,15 @@ async def test_alarm_trigger(hass, mock_nessclient):
await hass.async_block_till_done()
await hass.services.async_call(
alarm_control_panel.DOMAIN, SERVICE_ALARM_TRIGGER, blocking=True,
alarm_control_panel.DOMAIN,
SERVICE_ALARM_TRIGGER,
blocking=True,
service_data={
ATTR_ENTITY_ID: 'alarm_control_panel.alarm_panel',
ATTR_CODE: '1234'
})
mock_nessclient.panic.assert_called_once_with('1234')
ATTR_ENTITY_ID: "alarm_control_panel.alarm_panel",
ATTR_CODE: "1234",
},
)
mock_nessclient.panic.assert_called_once_with("1234")
async def test_dispatch_zone_change(hass, mock_nessclient):
@ -148,8 +167,8 @@ async def test_dispatch_zone_change(hass, mock_nessclient):
on_zone_change(1, True)
await hass.async_block_till_done()
assert hass.states.is_state('binary_sensor.zone_1', 'on')
assert hass.states.is_state('binary_sensor.zone_2', 'off')
assert hass.states.is_state("binary_sensor.zone_1", "on")
assert hass.states.is_state("binary_sensor.zone_2", "off")
async def test_arming_state_change(hass, mock_nessclient):
@ -166,27 +185,25 @@ async def test_arming_state_change(hass, mock_nessclient):
await async_setup_component(hass, DOMAIN, VALID_CONFIG)
await hass.async_block_till_done()
assert hass.states.is_state('alarm_control_panel.alarm_panel',
STATE_UNKNOWN)
assert hass.states.is_state("alarm_control_panel.alarm_panel", STATE_UNKNOWN)
on_state_change = mock_nessclient.on_state_change.call_args[0][0]
for arming_state, expected_state in states:
on_state_change(arming_state)
await hass.async_block_till_done()
assert hass.states.is_state('alarm_control_panel.alarm_panel',
expected_state)
assert hass.states.is_state("alarm_control_panel.alarm_panel", expected_state)
class MockArmingState(Enum):
"""Mock nessclient.ArmingState enum."""
UNKNOWN = 'UNKNOWN'
DISARMED = 'DISARMED'
ARMING = 'ARMING'
EXIT_DELAY = 'EXIT_DELAY'
ARMED = 'ARMED'
ENTRY_DELAY = 'ENTRY_DELAY'
TRIGGERED = 'TRIGGERED'
UNKNOWN = "UNKNOWN"
DISARMED = "DISARMED"
ARMING = "ARMING"
EXIT_DELAY = "EXIT_DELAY"
ARMED = "ARMED"
ENTRY_DELAY = "ENTRY_DELAY"
TRIGGERED = "TRIGGERED"
class MockClient:
@ -244,7 +261,7 @@ def mock_nessclient():
_mock_factory = MagicMock()
_mock_factory.return_value = _mock_instance
with MockDependency('nessclient'), \
patch('nessclient.Client', new=_mock_factory, create=True), \
patch('nessclient.ArmingState', new=MockArmingState):
with MockDependency("nessclient"), patch(
"nessclient.Client", new=_mock_factory, create=True
), patch("nessclient.ArmingState", new=MockArmingState):
yield _mock_instance