Skip to content

Commit

Permalink
Mod mqtt tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gjohansson-ST committed Mar 22, 2024
1 parent ac27fe5 commit e3e9f03
Showing 1 changed file with 107 additions and 54 deletions.
161 changes: 107 additions & 54 deletions tests/components/mqtt/test_alarm_control_panel.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"""The tests the MQTT alarm control panel component."""

from contextlib import AbstractContextManager, contextmanager
import copy
import json
from typing import Any
Expand Down Expand Up @@ -145,6 +146,12 @@
}


@contextmanager
def does_not_raise():
"""Do not raise error."""
yield


@pytest.mark.parametrize(
("hass_config", "valid"),
[
Expand Down Expand Up @@ -353,43 +360,55 @@ async def test_publish_mqtt_no_code(


@pytest.mark.parametrize(
("hass_config", "service", "payload", "can_raise"),
("hass_config", "service", "payload", "raises"),
[
(DEFAULT_CONFIG_CODE, SERVICE_ALARM_ARM_HOME, "ARM_HOME", True),
(DEFAULT_CONFIG_CODE, SERVICE_ALARM_ARM_AWAY, "ARM_AWAY", True),
(DEFAULT_CONFIG_CODE, SERVICE_ALARM_ARM_NIGHT, "ARM_NIGHT", True),
(DEFAULT_CONFIG_CODE, SERVICE_ALARM_ARM_VACATION, "ARM_VACATION", True),
(
DEFAULT_CONFIG_CODE,
SERVICE_ALARM_ARM_HOME,
"ARM_HOME",
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_CODE,
SERVICE_ALARM_ARM_AWAY,
"ARM_AWAY",
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_CODE,
SERVICE_ALARM_ARM_NIGHT,
"ARM_NIGHT",
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_CODE,
SERVICE_ALARM_ARM_VACATION,
"ARM_VACATION",
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_CODE,
SERVICE_ALARM_ARM_CUSTOM_BYPASS,
"ARM_CUSTOM_BYPASS",
True,
pytest.raises(ServiceValidationError),
),
(DEFAULT_CONFIG_CODE, SERVICE_ALARM_DISARM, "DISARM", False),
(DEFAULT_CONFIG_CODE, SERVICE_ALARM_TRIGGER, "TRIGGER", False),
(DEFAULT_CONFIG_CODE, SERVICE_ALARM_DISARM, "DISARM", does_not_raise()),
(DEFAULT_CONFIG_CODE, SERVICE_ALARM_TRIGGER, "TRIGGER", does_not_raise()),
],
)
async def test_publish_mqtt_with_code(
hass: HomeAssistant,
mqtt_mock_entry: MqttMockHAClientGenerator,
service: str,
payload: str,
can_raise: bool,
raises: AbstractContextManager,
) -> None:
"""Test publishing of MQTT messages when code is configured."""
mqtt_mock = await mqtt_mock_entry()
call_count = mqtt_mock.async_publish.call_count

# No code provided, should not publish
if can_raise:
with pytest.raises(ServiceValidationError):
await hass.services.async_call(
alarm_control_panel.DOMAIN,
service,
{ATTR_ENTITY_ID: "alarm_control_panel.test"},
blocking=True,
)
else:
with raises:
await hass.services.async_call(
alarm_control_panel.DOMAIN,
service,
Expand Down Expand Up @@ -418,43 +437,60 @@ async def test_publish_mqtt_with_code(


@pytest.mark.parametrize(
("hass_config", "service", "payload", "can_raise"),
("hass_config", "service", "payload", "raises"),
[
(DEFAULT_CONFIG_REMOTE_CODE, SERVICE_ALARM_ARM_HOME, "ARM_HOME", True),
(DEFAULT_CONFIG_REMOTE_CODE, SERVICE_ALARM_ARM_AWAY, "ARM_AWAY", True),
(DEFAULT_CONFIG_REMOTE_CODE, SERVICE_ALARM_ARM_NIGHT, "ARM_NIGHT", True),
(DEFAULT_CONFIG_REMOTE_CODE, SERVICE_ALARM_ARM_VACATION, "ARM_VACATION", True),
(
DEFAULT_CONFIG_REMOTE_CODE,
SERVICE_ALARM_ARM_HOME,
"ARM_HOME",
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_REMOTE_CODE,
SERVICE_ALARM_ARM_AWAY,
"ARM_AWAY",
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_REMOTE_CODE,
SERVICE_ALARM_ARM_NIGHT,
"ARM_NIGHT",
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_REMOTE_CODE,
SERVICE_ALARM_ARM_VACATION,
"ARM_VACATION",
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_REMOTE_CODE,
SERVICE_ALARM_ARM_CUSTOM_BYPASS,
"ARM_CUSTOM_BYPASS",
True,
pytest.raises(ServiceValidationError),
),
(DEFAULT_CONFIG_REMOTE_CODE, SERVICE_ALARM_DISARM, "DISARM", does_not_raise()),
(
DEFAULT_CONFIG_REMOTE_CODE,
SERVICE_ALARM_TRIGGER,
"TRIGGER",
does_not_raise(),
),
(DEFAULT_CONFIG_REMOTE_CODE, SERVICE_ALARM_DISARM, "DISARM", False),
(DEFAULT_CONFIG_REMOTE_CODE, SERVICE_ALARM_TRIGGER, "TRIGGER", False),
],
)
async def test_publish_mqtt_with_remote_code(
hass: HomeAssistant,
mqtt_mock_entry: MqttMockHAClientGenerator,
service: str,
payload: str,
can_raise: bool,
raises: AbstractContextManager,
) -> None:
"""Test publishing of MQTT messages when remode code is configured."""
mqtt_mock = await mqtt_mock_entry()
call_count = mqtt_mock.async_publish.call_count

# No code provided, should not publish
if can_raise:
with pytest.raises(ServiceValidationError):
await hass.services.async_call(
alarm_control_panel.DOMAIN,
service,
{ATTR_ENTITY_ID: "alarm_control_panel.test"},
blocking=True,
)
else:
with raises:
await hass.services.async_call(
alarm_control_panel.DOMAIN,
service,
Expand All @@ -474,48 +510,65 @@ async def test_publish_mqtt_with_remote_code(


@pytest.mark.parametrize(
("hass_config", "service", "payload", "can_raise"),
("hass_config", "service", "payload", "raises"),
[
(DEFAULT_CONFIG_REMOTE_CODE_TEXT, SERVICE_ALARM_ARM_HOME, "ARM_HOME", True),
(DEFAULT_CONFIG_REMOTE_CODE_TEXT, SERVICE_ALARM_ARM_AWAY, "ARM_AWAY", True),
(DEFAULT_CONFIG_REMOTE_CODE_TEXT, SERVICE_ALARM_ARM_NIGHT, "ARM_NIGHT", True),
(
DEFAULT_CONFIG_REMOTE_CODE_TEXT,
SERVICE_ALARM_ARM_HOME,
"ARM_HOME",
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_REMOTE_CODE_TEXT,
SERVICE_ALARM_ARM_AWAY,
"ARM_AWAY",
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_REMOTE_CODE_TEXT,
SERVICE_ALARM_ARM_NIGHT,
"ARM_NIGHT",
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_REMOTE_CODE_TEXT,
SERVICE_ALARM_ARM_VACATION,
"ARM_VACATION",
True,
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_REMOTE_CODE_TEXT,
SERVICE_ALARM_ARM_CUSTOM_BYPASS,
"ARM_CUSTOM_BYPASS",
True,
pytest.raises(ServiceValidationError),
),
(
DEFAULT_CONFIG_REMOTE_CODE_TEXT,
SERVICE_ALARM_DISARM,
"DISARM",
does_not_raise(),
),
(
DEFAULT_CONFIG_REMOTE_CODE_TEXT,
SERVICE_ALARM_TRIGGER,
"TRIGGER",
does_not_raise(),
),
(DEFAULT_CONFIG_REMOTE_CODE_TEXT, SERVICE_ALARM_DISARM, "DISARM", False),
(DEFAULT_CONFIG_REMOTE_CODE_TEXT, SERVICE_ALARM_TRIGGER, "TRIGGER", False),
],
)
async def test_publish_mqtt_with_remote_code_text(
hass: HomeAssistant,
mqtt_mock_entry: MqttMockHAClientGenerator,
service: str,
payload: str,
can_raise: bool,
raises: AbstractContextManager,
) -> None:
"""Test publishing of MQTT messages when remote text code is configured."""
mqtt_mock = await mqtt_mock_entry()
call_count = mqtt_mock.async_publish.call_count

# No code provided, should not publish
if can_raise:
with pytest.raises(ServiceValidationError):
await hass.services.async_call(
alarm_control_panel.DOMAIN,
service,
{ATTR_ENTITY_ID: "alarm_control_panel.test"},
blocking=True,
)
else:
with raises:
await hass.services.async_call(
alarm_control_panel.DOMAIN,
service,
Expand Down

0 comments on commit e3e9f03

Please sign in to comment.