2022-01-31 09:31:57 +00:00
""" The tests for the MQTT siren platform. """
import copy
2023-02-09 14:22:30 +00:00
from typing import Any
2022-01-31 09:31:57 +00:00
from unittest . mock import patch
import pytest
2022-09-06 09:03:02 +00:00
from homeassistant . components import mqtt , siren
2022-09-19 13:22:23 +00:00
from homeassistant . components . siren import ATTR_VOLUME_LEVEL
2022-01-31 09:31:57 +00:00
from homeassistant . const import (
ATTR_ASSUMED_STATE ,
ATTR_ENTITY_ID ,
ENTITY_MATCH_ALL ,
SERVICE_TURN_OFF ,
SERVICE_TURN_ON ,
STATE_OFF ,
STATE_ON ,
STATE_UNKNOWN ,
2022-06-13 20:17:10 +00:00
Platform ,
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
from homeassistant . core import HomeAssistant
2022-01-31 09:31:57 +00:00
from . test_common import (
2023-03-23 18:16:54 +00:00
help_custom_config ,
2022-01-31 09:31:57 +00:00
help_test_availability_when_connection_lost ,
help_test_availability_without_topic ,
help_test_custom_availability_payload ,
help_test_default_availability_payload ,
help_test_discovery_broken ,
help_test_discovery_removal ,
help_test_discovery_update ,
help_test_discovery_update_attr ,
help_test_discovery_update_unchanged ,
help_test_encoding_subscribable_topics ,
help_test_entity_debug_info_message ,
help_test_entity_device_info_remove ,
help_test_entity_device_info_update ,
help_test_entity_device_info_with_connection ,
help_test_entity_device_info_with_identifier ,
help_test_entity_id_update_discovery_update ,
help_test_entity_id_update_subscriptions ,
help_test_publishing_with_custom_encoding ,
help_test_reloadable ,
help_test_setting_attribute_via_mqtt_json_message ,
help_test_setting_attribute_with_template ,
help_test_setting_blocked_attribute_via_mqtt_json_message ,
help_test_unique_id ,
2022-07-12 09:07:18 +00:00
help_test_unload_config_entry_with_platform ,
2022-09-09 09:15:48 +00:00
help_test_update_with_json_attrs_bad_json ,
2022-01-31 09:31:57 +00:00
help_test_update_with_json_attrs_not_dict ,
)
from tests . common import async_fire_mqtt_message
2023-03-16 14:57:01 +00:00
from tests . typing import MqttMockHAClientGenerator , MqttMockPahoClient
2022-01-31 09:31:57 +00:00
DEFAULT_CONFIG = {
2022-09-06 09:03:02 +00:00
mqtt . DOMAIN : { siren . DOMAIN : { " name " : " test " , " command_topic " : " test-topic " } }
2022-01-31 09:31:57 +00:00
}
2022-06-13 20:17:10 +00:00
@pytest.fixture ( autouse = True )
def siren_platform_only ( ) :
""" Only setup the siren platform to speed up tests. """
with patch ( " homeassistant.components.mqtt.PLATFORMS " , [ Platform . SIREN ] ) :
yield
2023-02-09 14:22:30 +00:00
async def async_turn_on (
hass : HomeAssistant ,
entity_id : str = ENTITY_MATCH_ALL ,
parameters : dict [ str , Any ] = { } ,
) - > None :
2022-01-31 09:31:57 +00:00
""" Turn all or specified siren on. """
data = { ATTR_ENTITY_ID : entity_id } if entity_id else { }
data . update ( parameters )
await hass . services . async_call ( siren . DOMAIN , SERVICE_TURN_ON , data , blocking = True )
2023-02-09 14:22:30 +00:00
async def async_turn_off (
hass : HomeAssistant , entity_id : str = ENTITY_MATCH_ALL
) - > None :
2022-01-31 09:31:57 +00:00
""" Turn all or specified siren off. """
data = { ATTR_ENTITY_ID : entity_id } if entity_id else { }
await hass . services . async_call ( siren . DOMAIN , SERVICE_TURN_OFF , data , blocking = True )
2023-03-23 18:16:54 +00:00
@pytest.mark.parametrize (
" hass_config " ,
[
2022-01-31 09:31:57 +00:00
{
2022-09-06 09:03:02 +00:00
mqtt . DOMAIN : {
siren . DOMAIN : {
" name " : " test " ,
" state_topic " : " state-topic " ,
" command_topic " : " command-topic " ,
" payload_on " : 1 ,
" payload_off " : 0 ,
}
2022-01-31 09:31:57 +00:00
}
2023-03-23 18:16:54 +00:00
}
] ,
)
async def test_controlling_state_via_topic (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-03-23 18:16:54 +00:00
) - > None :
""" Test the controlling state via topic. """
2023-04-12 07:43:03 +00:00
await mqtt_mock_entry ( )
2022-01-31 09:31:57 +00:00
state = hass . states . get ( " siren.test " )
assert state . state == STATE_UNKNOWN
assert not state . attributes . get ( ATTR_ASSUMED_STATE )
async_fire_mqtt_message ( hass , " state-topic " , " 1 " )
state = hass . states . get ( " siren.test " )
assert state . state == STATE_ON
async_fire_mqtt_message ( hass , " state-topic " , " 0 " )
state = hass . states . get ( " siren.test " )
assert state . state == STATE_OFF
2023-03-23 18:16:54 +00:00
@pytest.mark.parametrize (
" hass_config " ,
[
2022-01-31 09:31:57 +00:00
{
2022-09-06 09:03:02 +00:00
mqtt . DOMAIN : {
siren . DOMAIN : {
" name " : " test " ,
" command_topic " : " command-topic " ,
" payload_on " : " beer on " ,
" payload_off " : " beer off " ,
" qos " : " 2 " ,
}
2022-01-31 09:31:57 +00:00
}
2023-03-23 18:16:54 +00:00
}
] ,
)
async def test_sending_mqtt_commands_and_optimistic (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-03-23 18:16:54 +00:00
) - > None :
""" Test the sending MQTT commands in optimistic mode. """
2022-01-31 09:31:57 +00:00
await hass . async_block_till_done ( )
2023-04-12 07:43:03 +00:00
mqtt_mock = await mqtt_mock_entry ( )
2022-01-31 09:31:57 +00:00
state = hass . states . get ( " siren.test " )
assert state . state == STATE_OFF
assert state . attributes . get ( ATTR_ASSUMED_STATE )
await async_turn_on ( hass , entity_id = " siren.test " )
mqtt_mock . async_publish . assert_called_once_with (
2022-06-23 12:29:09 +00:00
" command-topic " , ' { " state " : " beer on " } ' , 2 , False
2022-01-31 09:31:57 +00:00
)
mqtt_mock . async_publish . reset_mock ( )
state = hass . states . get ( " siren.test " )
assert state . state == STATE_ON
await async_turn_off ( hass , entity_id = " siren.test " )
mqtt_mock . async_publish . assert_called_once_with (
2022-06-23 12:29:09 +00:00
" command-topic " , ' { " state " : " beer off " } ' , 2 , False
2022-01-31 09:31:57 +00:00
)
state = hass . states . get ( " siren.test " )
assert state . state == STATE_OFF
2023-03-23 18:16:54 +00:00
@pytest.mark.parametrize (
" hass_config " ,
[
2022-01-31 09:31:57 +00:00
{
2022-09-06 09:03:02 +00:00
mqtt . DOMAIN : {
siren . DOMAIN : {
" name " : " test " ,
" state_topic " : " state-topic " ,
" command_topic " : " command-topic " ,
" payload_on " : " beer on " ,
" payload_off " : " beer off " ,
" state_value_template " : " {{ value_json.val }} " ,
}
2022-01-31 09:31:57 +00:00
}
2023-03-23 18:16:54 +00:00
}
] ,
)
async def test_controlling_state_via_topic_and_json_message (
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-03-23 18:16:54 +00:00
caplog : pytest . LogCaptureFixture ,
) - > None :
""" Test the controlling state via topic and JSON message. """
2023-04-12 07:43:03 +00:00
await mqtt_mock_entry ( )
2022-01-31 09:31:57 +00:00
state = hass . states . get ( " siren.test " )
assert state . state == STATE_UNKNOWN
async_fire_mqtt_message ( hass , " state-topic " , ' { " val " : " beer on " } ' )
state = hass . states . get ( " siren.test " )
assert state . state == STATE_ON
async_fire_mqtt_message ( hass , " state-topic " , ' { " val " : null } ' )
state = hass . states . get ( " siren.test " )
assert state . state == STATE_UNKNOWN
async_fire_mqtt_message ( hass , " state-topic " , ' { " val " : " beer off " } ' )
state = hass . states . get ( " siren.test " )
assert state . state == STATE_OFF
2023-03-23 18:16:54 +00:00
@pytest.mark.parametrize (
" hass_config " ,
[
2022-01-31 09:31:57 +00:00
{
2022-09-06 09:03:02 +00:00
mqtt . DOMAIN : {
siren . DOMAIN : {
" name " : " test " ,
" state_topic " : " state-topic " ,
" command_topic " : " command-topic " ,
" payload_on " : " beer on " ,
" payload_off " : " beer off " ,
" available_tones " : [ " ping " , " siren " , " bell " ] ,
}
2022-01-31 09:31:57 +00:00
}
2023-03-23 18:16:54 +00:00
}
] ,
)
async def test_controlling_state_and_attributes_with_json_message_without_template (
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-03-23 18:16:54 +00:00
caplog : pytest . LogCaptureFixture ,
) - > None :
""" Test the controlling state via topic and JSON message without a value template. """
2023-04-12 07:43:03 +00:00
await mqtt_mock_entry ( )
2022-01-31 09:31:57 +00:00
state = hass . states . get ( " siren.test " )
assert state . state == STATE_UNKNOWN
assert state . attributes . get ( siren . ATTR_TONE ) is None
assert state . attributes . get ( siren . ATTR_DURATION ) is None
assert state . attributes . get ( siren . ATTR_VOLUME_LEVEL ) is None
async_fire_mqtt_message (
hass ,
" state-topic " ,
' { " state " : " beer on " , " tone " : " bell " , " duration " : 10, " volume_level " : 0.5 } ' ,
)
state = hass . states . get ( " siren.test " )
assert state . state == STATE_ON
assert state . attributes . get ( siren . ATTR_TONE ) == " bell "
assert state . attributes . get ( siren . ATTR_DURATION ) == 10
assert state . attributes . get ( siren . ATTR_VOLUME_LEVEL ) == 0.5
async_fire_mqtt_message (
hass ,
" state-topic " ,
' { " state " : " beer off " , " duration " : 5, " volume_level " : 0.6} ' ,
)
state = hass . states . get ( " siren.test " )
assert state . state == STATE_OFF
assert state . attributes . get ( siren . ATTR_TONE ) == " bell "
assert state . attributes . get ( siren . ATTR_DURATION ) == 5
assert state . attributes . get ( siren . ATTR_VOLUME_LEVEL ) == 0.6
# Test validation of received attributes, invalid
async_fire_mqtt_message (
hass ,
" state-topic " ,
' { " state " : " beer on " , " duration " : 6, " volume_level " : 2 } ' ,
)
state = hass . states . get ( " siren.test " )
assert (
" Unable to update siren state attributes from payload ' { ' duration ' : 6, ' volume_level ' : 2} ' : value must be at most 1 for dictionary value @ data[ ' volume_level ' ] "
in caplog . text
)
assert state . state == STATE_OFF
assert state . attributes . get ( siren . ATTR_TONE ) == " bell "
assert state . attributes . get ( siren . ATTR_DURATION ) == 5
assert state . attributes . get ( siren . ATTR_VOLUME_LEVEL ) == 0.6
async_fire_mqtt_message (
hass ,
" state-topic " ,
" {} " ,
)
assert state . state == STATE_OFF
assert state . attributes . get ( siren . ATTR_TONE ) == " bell "
assert state . attributes . get ( siren . ATTR_DURATION ) == 5
assert state . attributes . get ( siren . ATTR_VOLUME_LEVEL ) == 0.6
2023-03-23 18:16:54 +00:00
@pytest.mark.parametrize (
" hass_config " ,
[
help_custom_config (
siren . DOMAIN ,
{
mqtt . DOMAIN : {
siren . DOMAIN : {
" command_topic " : " command-topic " ,
}
}
} ,
(
{
" name " : " test1 " ,
" available_tones " : [ " ping " , " siren " , " bell " ] ,
" support_duration " : False ,
} ,
{
" name " : " test2 " ,
" available_tones " : [ " ping " , " siren " , " bell " ] ,
" support_volume_set " : False ,
} ,
{
" name " : " test3 " ,
} ,
) ,
)
] ,
)
2022-06-02 12:24:46 +00:00
async def test_filtering_not_supported_attributes_optimistic (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test setting attributes with support flags optimistic. """
2023-04-12 07:43:03 +00:00
await mqtt_mock_entry ( )
2022-01-31 09:31:57 +00:00
state1 = hass . states . get ( " siren.test1 " )
assert state1 . state == STATE_OFF
assert siren . ATTR_DURATION not in state1 . attributes
assert siren . ATTR_AVAILABLE_TONES in state1 . attributes
assert siren . ATTR_TONE in state1 . attributes
assert siren . ATTR_VOLUME_LEVEL in state1 . attributes
await async_turn_on (
hass ,
entity_id = " siren.test1 " ,
parameters = {
siren . ATTR_DURATION : 22 ,
siren . ATTR_TONE : " ping " ,
ATTR_VOLUME_LEVEL : 0.88 ,
} ,
)
state1 = hass . states . get ( " siren.test1 " )
assert state1 . attributes . get ( siren . ATTR_TONE ) == " ping "
assert state1 . attributes . get ( siren . ATTR_DURATION ) is None
assert state1 . attributes . get ( siren . ATTR_VOLUME_LEVEL ) == 0.88
state2 = hass . states . get ( " siren.test2 " )
assert siren . ATTR_DURATION in state2 . attributes
assert siren . ATTR_AVAILABLE_TONES in state2 . attributes
assert siren . ATTR_TONE in state2 . attributes
assert siren . ATTR_VOLUME_LEVEL not in state2 . attributes
await async_turn_on (
hass ,
entity_id = " siren.test2 " ,
parameters = {
siren . ATTR_DURATION : 22 ,
siren . ATTR_TONE : " ping " ,
ATTR_VOLUME_LEVEL : 0.88 ,
} ,
)
state2 = hass . states . get ( " siren.test2 " )
assert state2 . attributes . get ( siren . ATTR_TONE ) == " ping "
assert state2 . attributes . get ( siren . ATTR_DURATION ) == 22
assert state2 . attributes . get ( siren . ATTR_VOLUME_LEVEL ) is None
state3 = hass . states . get ( " siren.test3 " )
assert siren . ATTR_DURATION in state3 . attributes
assert siren . ATTR_AVAILABLE_TONES not in state3 . attributes
assert siren . ATTR_TONE not in state3 . attributes
assert siren . ATTR_VOLUME_LEVEL in state3 . attributes
await async_turn_on (
hass ,
entity_id = " siren.test3 " ,
parameters = {
siren . ATTR_DURATION : 22 ,
siren . ATTR_TONE : " ping " ,
ATTR_VOLUME_LEVEL : 0.88 ,
} ,
)
state3 = hass . states . get ( " siren.test3 " )
assert state3 . attributes . get ( siren . ATTR_TONE ) is None
assert state3 . attributes . get ( siren . ATTR_DURATION ) == 22
assert state3 . attributes . get ( siren . ATTR_VOLUME_LEVEL ) == 0.88
2023-03-23 18:16:54 +00:00
@pytest.mark.parametrize (
" hass_config " ,
[
help_custom_config (
siren . DOMAIN ,
{
mqtt . DOMAIN : {
siren . DOMAIN : {
" command_topic " : " command-topic " ,
}
}
} ,
(
{
" name " : " test1 " ,
" state_topic " : " state-topic1 " ,
" available_tones " : [ " ping " , " siren " , " bell " ] ,
" support_duration " : False ,
} ,
{
" name " : " test2 " ,
" state_topic " : " state-topic2 " ,
" available_tones " : [ " ping " , " siren " , " bell " ] ,
" support_volume_set " : False ,
} ,
{
" name " : " test3 " ,
" state_topic " : " state-topic3 " ,
} ,
) ,
)
] ,
)
2022-06-02 12:24:46 +00:00
async def test_filtering_not_supported_attributes_via_state (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test setting attributes with support flags via state. """
2023-04-12 07:43:03 +00:00
await mqtt_mock_entry ( )
2022-01-31 09:31:57 +00:00
state1 = hass . states . get ( " siren.test1 " )
assert state1 . state == STATE_UNKNOWN
assert siren . ATTR_DURATION not in state1 . attributes
assert siren . ATTR_AVAILABLE_TONES in state1 . attributes
assert siren . ATTR_TONE in state1 . attributes
assert siren . ATTR_VOLUME_LEVEL in state1 . attributes
async_fire_mqtt_message (
hass ,
" state-topic1 " ,
' { " state " : " ON " , " duration " : 22, " tone " : " ping " , " volume_level " : 0.88} ' ,
)
await hass . async_block_till_done ( )
state1 = hass . states . get ( " siren.test1 " )
assert state1 . attributes . get ( siren . ATTR_TONE ) == " ping "
assert state1 . attributes . get ( siren . ATTR_DURATION ) is None
assert state1 . attributes . get ( siren . ATTR_VOLUME_LEVEL ) == 0.88
state2 = hass . states . get ( " siren.test2 " )
assert siren . ATTR_DURATION in state2 . attributes
assert siren . ATTR_AVAILABLE_TONES in state2 . attributes
assert siren . ATTR_TONE in state2 . attributes
assert siren . ATTR_VOLUME_LEVEL not in state2 . attributes
async_fire_mqtt_message (
hass ,
" state-topic2 " ,
' { " state " : " ON " , " duration " : 22, " tone " : " ping " , " volume_level " : 0.88} ' ,
)
await hass . async_block_till_done ( )
state2 = hass . states . get ( " siren.test2 " )
assert state2 . attributes . get ( siren . ATTR_TONE ) == " ping "
assert state2 . attributes . get ( siren . ATTR_DURATION ) == 22
assert state2 . attributes . get ( siren . ATTR_VOLUME_LEVEL ) is None
state3 = hass . states . get ( " siren.test3 " )
assert siren . ATTR_DURATION in state3 . attributes
assert siren . ATTR_AVAILABLE_TONES not in state3 . attributes
assert siren . ATTR_TONE not in state3 . attributes
assert siren . ATTR_VOLUME_LEVEL in state3 . attributes
async_fire_mqtt_message (
hass ,
" state-topic3 " ,
' { " state " : " ON " , " duration " : 22, " tone " : " ping " , " volume_level " : 0.88} ' ,
)
await hass . async_block_till_done ( )
state3 = hass . states . get ( " siren.test3 " )
assert state3 . attributes . get ( siren . ATTR_TONE ) is None
assert state3 . attributes . get ( siren . ATTR_DURATION ) == 22
assert state3 . attributes . get ( siren . ATTR_VOLUME_LEVEL ) == 0.88
2023-03-21 07:20:37 +00:00
@pytest.mark.parametrize ( " hass_config " , [ DEFAULT_CONFIG ] )
2022-06-02 12:24:46 +00:00
async def test_availability_when_connection_lost (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test availability after MQTT disconnection. """
await help_test_availability_when_connection_lost (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , siren . DOMAIN
2022-01-31 09:31:57 +00:00
)
2023-03-21 07:20:37 +00:00
@pytest.mark.parametrize ( " hass_config " , [ DEFAULT_CONFIG ] )
2023-02-08 17:08:03 +00:00
async def test_availability_without_topic (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test availability without defined availability topic. """
await help_test_availability_without_topic (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , siren . DOMAIN , DEFAULT_CONFIG
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
async def test_default_availability_payload (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test availability by default payload with defined topic. """
config = {
2022-09-09 09:15:48 +00:00
mqtt . DOMAIN : {
siren . DOMAIN : {
" name " : " test " ,
" state_topic " : " state-topic " ,
" command_topic " : " command-topic " ,
" payload_on " : 1 ,
" payload_off " : 0 ,
}
2022-01-31 09:31:57 +00:00
}
}
await help_test_default_availability_payload (
2022-06-02 12:24:46 +00:00
hass ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry ,
2022-06-02 12:24:46 +00:00
siren . DOMAIN ,
config ,
True ,
" state-topic " ,
" 1 " ,
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
async def test_custom_availability_payload (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test availability by custom payload with defined topic. """
config = {
2022-09-09 09:15:48 +00:00
mqtt . DOMAIN : {
siren . DOMAIN : {
" name " : " test " ,
" state_topic " : " state-topic " ,
" command_topic " : " command-topic " ,
" payload_on " : 1 ,
" payload_off " : 0 ,
}
2022-01-31 09:31:57 +00:00
}
}
await help_test_custom_availability_payload (
2022-06-02 12:24:46 +00:00
hass ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry ,
2022-06-02 12:24:46 +00:00
siren . DOMAIN ,
config ,
True ,
" state-topic " ,
" 1 " ,
2022-01-31 09:31:57 +00:00
)
2023-03-23 18:16:54 +00:00
@pytest.mark.parametrize (
" hass_config " ,
[
2022-01-31 09:31:57 +00:00
{
2022-09-06 09:03:02 +00:00
mqtt . DOMAIN : {
siren . DOMAIN : {
" name " : " test " ,
" state_topic " : " state-topic " ,
" command_topic " : " command-topic " ,
" payload_on " : 1 ,
" payload_off " : 0 ,
" state_on " : " HIGH " ,
" state_off " : " LOW " ,
}
2022-01-31 09:31:57 +00:00
}
2023-03-23 18:16:54 +00:00
}
] ,
)
async def test_custom_state_payload (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-03-23 18:16:54 +00:00
) - > None :
""" Test the state payload. """
2023-04-12 07:43:03 +00:00
await mqtt_mock_entry ( )
2022-01-31 09:31:57 +00:00
state = hass . states . get ( " siren.test " )
assert state . state == STATE_UNKNOWN
assert not state . attributes . get ( ATTR_ASSUMED_STATE )
async_fire_mqtt_message ( hass , " state-topic " , " HIGH " )
state = hass . states . get ( " siren.test " )
assert state . state == STATE_ON
async_fire_mqtt_message ( hass , " state-topic " , " LOW " )
state = hass . states . get ( " siren.test " )
assert state . state == STATE_OFF
2022-06-02 12:24:46 +00:00
async def test_setting_attribute_via_mqtt_json_message (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test the setting of attribute via MQTT with JSON payload. """
await help_test_setting_attribute_via_mqtt_json_message (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , siren . DOMAIN , DEFAULT_CONFIG
2022-01-31 09:31:57 +00:00
)
2022-06-02 12:24:46 +00:00
async def test_setting_blocked_attribute_via_mqtt_json_message (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test the setting of attribute via MQTT with JSON payload. """
await help_test_setting_blocked_attribute_via_mqtt_json_message (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , siren . DOMAIN , DEFAULT_CONFIG , { }
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
async def test_setting_attribute_with_template (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test the setting of attribute via MQTT with JSON payload. """
await help_test_setting_attribute_with_template (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , siren . DOMAIN , DEFAULT_CONFIG
2022-01-31 09:31:57 +00:00
)
2022-06-02 12:24:46 +00:00
async def test_update_with_json_attrs_not_dict (
2023-02-09 08:48:22 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-02-09 08:48:22 +00:00
caplog : pytest . LogCaptureFixture ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test attributes get extracted from a JSON result. """
await help_test_update_with_json_attrs_not_dict (
2022-09-06 09:03:02 +00:00
hass ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry ,
2022-09-06 09:03:02 +00:00
caplog ,
siren . DOMAIN ,
2022-09-09 09:15:48 +00:00
DEFAULT_CONFIG ,
2022-01-31 09:31:57 +00:00
)
2022-09-09 09:15:48 +00:00
async def test_update_with_json_attrs_bad_json (
2023-02-09 08:48:22 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-02-09 08:48:22 +00:00
caplog : pytest . LogCaptureFixture ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test attributes get extracted from a JSON result. """
2022-09-09 09:15:48 +00:00
await help_test_update_with_json_attrs_bad_json (
2022-09-06 09:03:02 +00:00
hass ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry ,
2022-09-06 09:03:02 +00:00
caplog ,
siren . DOMAIN ,
2022-09-09 09:15:48 +00:00
DEFAULT_CONFIG ,
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
async def test_discovery_update_attr (
2023-02-09 08:48:22 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-02-09 08:48:22 +00:00
caplog : pytest . LogCaptureFixture ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test update of discovered MQTTAttributes. """
await help_test_discovery_update_attr (
2022-09-06 09:03:02 +00:00
hass ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry ,
2022-09-06 09:03:02 +00:00
caplog ,
siren . DOMAIN ,
2022-09-09 09:15:48 +00:00
DEFAULT_CONFIG ,
2022-01-31 09:31:57 +00:00
)
2023-03-21 08:19:20 +00:00
@pytest.mark.parametrize (
" hass_config " ,
[
{
mqtt . DOMAIN : {
siren . DOMAIN : [
{
" name " : " Test 1 " ,
" state_topic " : " test-topic " ,
" command_topic " : " command-topic " ,
" unique_id " : " TOTALLY_UNIQUE " ,
} ,
{
" name " : " Test 2 " ,
" state_topic " : " test-topic " ,
" command_topic " : " command-topic " ,
" unique_id " : " TOTALLY_UNIQUE " ,
} ,
]
}
}
] ,
)
2023-02-09 10:53:56 +00:00
async def test_unique_id (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-09 10:53:56 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test unique id option only creates one siren per unique_id. """
2023-04-12 07:43:03 +00:00
await help_test_unique_id ( hass , mqtt_mock_entry , siren . DOMAIN )
2022-01-31 09:31:57 +00:00
2023-02-08 17:08:03 +00:00
async def test_discovery_removal_siren (
2023-02-09 08:48:22 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-02-09 08:48:22 +00:00
caplog : pytest . LogCaptureFixture ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test removal of discovered siren. """
data = (
' { " name " : " test " , '
' " state_topic " : " test_topic " , '
' " command_topic " : " test_topic " } '
)
2023-04-12 07:43:03 +00:00
await help_test_discovery_removal ( hass , mqtt_mock_entry , caplog , siren . DOMAIN , data )
2022-01-31 09:31:57 +00:00
2022-06-02 12:24:46 +00:00
async def test_discovery_update_siren_topic_template (
2023-02-09 08:48:22 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-02-09 08:48:22 +00:00
caplog : pytest . LogCaptureFixture ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test update of discovered siren. """
2022-09-09 09:15:48 +00:00
config1 = copy . deepcopy ( DEFAULT_CONFIG [ mqtt . DOMAIN ] [ siren . DOMAIN ] )
config2 = copy . deepcopy ( DEFAULT_CONFIG [ mqtt . DOMAIN ] [ siren . DOMAIN ] )
2022-01-31 09:31:57 +00:00
config1 [ " name " ] = " Beer "
config2 [ " name " ] = " Milk "
config1 [ " state_topic " ] = " siren/state1 "
config2 [ " state_topic " ] = " siren/state2 "
config1 [ " state_value_template " ] = " {{ value_json.state1.state }} "
config2 [ " state_value_template " ] = " {{ value_json.state2.state }} "
state_data1 = [
( [ ( " siren/state1 " , ' { " state1 " : { " state " : " ON " }} ' ) ] , " on " , None ) ,
]
state_data2 = [
( [ ( " siren/state2 " , ' { " state2 " : { " state " : " OFF " }} ' ) ] , " off " , None ) ,
( [ ( " siren/state2 " , ' { " state2 " : { " state " : " ON " }} ' ) ] , " on " , None ) ,
( [ ( " siren/state1 " , ' { " state1 " : { " state " : " OFF " }} ' ) ] , " on " , None ) ,
( [ ( " siren/state1 " , ' { " state2 " : { " state " : " OFF " }} ' ) ] , " on " , None ) ,
( [ ( " siren/state2 " , ' { " state1 " : { " state " : " OFF " }} ' ) ] , " on " , None ) ,
( [ ( " siren/state2 " , ' { " state2 " : { " state " : " OFF " }} ' ) ] , " off " , None ) ,
]
await help_test_discovery_update (
hass ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry ,
2022-01-31 09:31:57 +00:00
caplog ,
siren . DOMAIN ,
config1 ,
config2 ,
state_data1 = state_data1 ,
state_data2 = state_data2 ,
)
2022-06-02 12:24:46 +00:00
async def test_discovery_update_siren_template (
2023-02-09 08:48:22 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-02-09 08:48:22 +00:00
caplog : pytest . LogCaptureFixture ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test update of discovered siren. """
2022-09-09 09:15:48 +00:00
config1 = copy . deepcopy ( DEFAULT_CONFIG [ mqtt . DOMAIN ] [ siren . DOMAIN ] )
config2 = copy . deepcopy ( DEFAULT_CONFIG [ mqtt . DOMAIN ] [ siren . DOMAIN ] )
2022-01-31 09:31:57 +00:00
config1 [ " name " ] = " Beer "
config2 [ " name " ] = " Milk "
config1 [ " state_topic " ] = " siren/state1 "
config2 [ " state_topic " ] = " siren/state1 "
config1 [ " state_value_template " ] = " {{ value_json.state1.state }} "
config2 [ " state_value_template " ] = " {{ value_json.state2.state }} "
state_data1 = [
( [ ( " siren/state1 " , ' { " state1 " : { " state " : " ON " }} ' ) ] , " on " , None ) ,
]
state_data2 = [
( [ ( " siren/state1 " , ' { " state2 " : { " state " : " OFF " }} ' ) ] , " off " , None ) ,
( [ ( " siren/state1 " , ' { " state2 " : { " state " : " ON " }} ' ) ] , " on " , None ) ,
( [ ( " siren/state1 " , ' { " state1 " : { " state " : " OFF " }} ' ) ] , " on " , None ) ,
( [ ( " siren/state1 " , ' { " state2 " : { " state " : " OFF " }} ' ) ] , " off " , None ) ,
]
await help_test_discovery_update (
hass ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry ,
2022-01-31 09:31:57 +00:00
caplog ,
siren . DOMAIN ,
config1 ,
config2 ,
state_data1 = state_data1 ,
state_data2 = state_data2 ,
)
2023-03-23 18:16:54 +00:00
@pytest.mark.parametrize (
" hass_config " ,
[
help_custom_config (
siren . DOMAIN ,
DEFAULT_CONFIG ,
(
{
" name " : " Beer " ,
" available_tones " : [ " ping " , " chimes " ] ,
" command_template " : " CMD: {{ value }}, DURATION: {{ duration }}, "
" TONE: {{ tone }}, VOLUME: {{ volume_level }} " ,
} ,
{
" name " : " Milk " ,
" available_tones " : [ " ping " , " chimes " ] ,
" command_template " : " CMD: {{ value }}, DURATION: {{ duration }}, "
" TONE: {{ tone }}, VOLUME: {{ volume_level }} " ,
" command_off_template " : " CMD_OFF: {{ value }} " ,
} ,
) ,
)
] ,
)
2023-02-08 17:08:03 +00:00
async def test_command_templates (
2023-02-09 08:48:22 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test siren with command templates optimistic. """
2023-04-12 07:43:03 +00:00
mqtt_mock = await mqtt_mock_entry ( )
2022-01-31 09:31:57 +00:00
state1 = hass . states . get ( " siren.beer " )
assert state1 . state == STATE_OFF
assert state1 . attributes . get ( ATTR_ASSUMED_STATE )
state2 = hass . states . get ( " siren.milk " )
assert state2 . state == STATE_OFF
assert state1 . attributes . get ( ATTR_ASSUMED_STATE )
await async_turn_on (
hass ,
entity_id = " siren.beer " ,
parameters = {
siren . ATTR_DURATION : 22 ,
siren . ATTR_TONE : " ping " ,
ATTR_VOLUME_LEVEL : 0.88 ,
} ,
)
state1 = hass . states . get ( " siren.beer " )
assert state1 . attributes . get ( siren . ATTR_TONE ) == " ping "
assert state1 . attributes . get ( siren . ATTR_DURATION ) == 22
assert state1 . attributes . get ( siren . ATTR_VOLUME_LEVEL ) == 0.88
mqtt_mock . async_publish . assert_any_call (
" test-topic " , " CMD: ON, DURATION: 22, TONE: ping, VOLUME: 0.88 " , 0 , False
)
mqtt_mock . async_publish . call_count == 1
mqtt_mock . reset_mock ( )
await async_turn_off (
hass ,
entity_id = " siren.beer " ,
)
mqtt_mock . async_publish . assert_any_call (
" test-topic " , " CMD: OFF, DURATION: , TONE: , VOLUME: " , 0 , False
)
mqtt_mock . async_publish . call_count == 1
mqtt_mock . reset_mock ( )
await async_turn_on (
hass ,
entity_id = " siren.milk " ,
parameters = {
siren . ATTR_DURATION : 22 ,
siren . ATTR_TONE : " ping " ,
ATTR_VOLUME_LEVEL : 0.88 ,
} ,
)
state2 = hass . states . get ( " siren.milk " )
assert state2 . attributes . get ( siren . ATTR_TONE ) == " ping "
assert state2 . attributes . get ( siren . ATTR_DURATION ) == 22
assert state2 . attributes . get ( siren . ATTR_VOLUME_LEVEL ) == 0.88
await async_turn_off (
hass ,
entity_id = " siren.milk " ,
)
mqtt_mock . async_publish . assert_any_call ( " test-topic " , " CMD_OFF: OFF " , 0 , False )
mqtt_mock . async_publish . call_count == 1
mqtt_mock . reset_mock ( )
2022-06-02 12:24:46 +00:00
async def test_discovery_update_unchanged_siren (
2023-02-09 08:48:22 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-02-09 08:48:22 +00:00
caplog : pytest . LogCaptureFixture ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test update of discovered siren. """
data1 = (
' { " name " : " Beer " , '
' " device_class " : " siren " , '
' " state_topic " : " test_topic " , '
' " command_topic " : " test_topic " } '
)
with patch (
" homeassistant.components.mqtt.siren.MqttSiren.discovery_update "
) as discovery_update :
await help_test_discovery_update_unchanged (
2022-06-02 12:24:46 +00:00
hass ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry ,
2022-06-02 12:24:46 +00:00
caplog ,
siren . DOMAIN ,
data1 ,
discovery_update ,
2022-01-31 09:31:57 +00:00
)
@pytest.mark.no_fail_on_log_exception
2023-02-08 17:08:03 +00:00
async def test_discovery_broken (
2023-02-09 08:48:22 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-02-09 08:48:22 +00:00
caplog : pytest . LogCaptureFixture ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test handling of bad discovery message. """
data1 = ' { " name " : " Beer " } '
data2 = (
' { " name " : " Milk " , '
' " state_topic " : " test_topic " , '
' " command_topic " : " test_topic " } '
)
await help_test_discovery_broken (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , caplog , siren . DOMAIN , data1 , data2
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
async def test_entity_device_info_with_connection (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test MQTT siren device registry integration. """
await help_test_entity_device_info_with_connection (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , siren . DOMAIN , DEFAULT_CONFIG
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
async def test_entity_device_info_with_identifier (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test MQTT siren device registry integration. """
await help_test_entity_device_info_with_identifier (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , siren . DOMAIN , DEFAULT_CONFIG
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
async def test_entity_device_info_update (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test device registry update. """
await help_test_entity_device_info_update (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , siren . DOMAIN , DEFAULT_CONFIG
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
async def test_entity_device_info_remove (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test device registry remove. """
await help_test_entity_device_info_remove (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , siren . DOMAIN , DEFAULT_CONFIG
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
async def test_entity_id_update_subscriptions (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test MQTT subscriptions are managed when entity_id is updated. """
await help_test_entity_id_update_subscriptions (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , siren . DOMAIN , DEFAULT_CONFIG
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
async def test_entity_id_update_discovery_update (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test MQTT discovery update when entity_id is updated. """
await help_test_entity_id_update_discovery_update (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , siren . DOMAIN , DEFAULT_CONFIG
2022-01-31 09:31:57 +00:00
)
2023-02-08 17:08:03 +00:00
async def test_entity_debug_info_message (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test MQTT debug info. """
await help_test_entity_debug_info_message (
2022-02-04 16:35:32 +00:00
hass ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry ,
2022-02-04 16:35:32 +00:00
siren . DOMAIN ,
2022-09-09 09:15:48 +00:00
DEFAULT_CONFIG ,
2022-02-04 16:35:32 +00:00
siren . SERVICE_TURN_ON ,
2022-06-23 12:29:09 +00:00
command_payload = ' { " state " : " ON " } ' ,
2022-01-31 09:31:57 +00:00
)
@pytest.mark.parametrize (
2023-02-15 13:09:50 +00:00
( " service " , " topic " , " parameters " , " payload " , " template " ) ,
2022-01-31 09:31:57 +00:00
[
(
siren . SERVICE_TURN_ON ,
" command_topic " ,
None ,
2022-06-23 12:29:09 +00:00
' { " state " : " ON " } ' ,
2022-01-31 09:31:57 +00:00
None ,
) ,
(
siren . SERVICE_TURN_OFF ,
" command_topic " ,
None ,
2022-06-23 12:29:09 +00:00
' { " state " : " OFF " } ' ,
2022-01-31 09:31:57 +00:00
None ,
) ,
] ,
)
async def test_publishing_with_custom_encoding (
2023-02-08 17:08:03 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-02-09 08:48:22 +00:00
caplog : pytest . LogCaptureFixture ,
2023-03-21 08:19:20 +00:00
service : str ,
topic : str ,
parameters : dict [ str , Any ] ,
payload : str ,
template : str | None ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test publishing MQTT payload with command templates and different encoding. """
domain = siren . DOMAIN
2022-09-09 09:15:48 +00:00
config = copy . deepcopy ( DEFAULT_CONFIG )
config [ mqtt . DOMAIN ] [ domain ] [ siren . ATTR_AVAILABLE_TONES ] = [ " siren " , " xylophone " ]
2022-01-31 09:31:57 +00:00
await help_test_publishing_with_custom_encoding (
hass ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry ,
2022-01-31 09:31:57 +00:00
caplog ,
domain ,
config ,
service ,
topic ,
parameters ,
payload ,
template ,
)
2023-02-08 17:08:03 +00:00
async def test_reloadable (
2023-02-09 08:48:22 +00:00
hass : HomeAssistant ,
2023-03-16 14:57:01 +00:00
mqtt_client_mock : MqttMockPahoClient ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test reloading the MQTT platform. """
domain = siren . DOMAIN
2022-09-09 09:15:48 +00:00
config = DEFAULT_CONFIG
2023-03-16 14:57:01 +00:00
await help_test_reloadable ( hass , mqtt_client_mock , domain , config )
2022-01-31 09:31:57 +00:00
@pytest.mark.parametrize (
2023-02-15 13:09:50 +00:00
( " topic " , " value " , " attribute " , " attribute_value " ) ,
2022-01-31 09:31:57 +00:00
[
( " state_topic " , " ON " , None , " on " ) ,
] ,
)
async def test_encoding_subscribable_topics (
2023-02-08 17:08:03 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-03-21 08:19:20 +00:00
topic : str ,
value : str ,
attribute : str | None ,
attribute_value : Any ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-01-31 09:31:57 +00:00
""" Test handling of incoming encoded payload. """
await help_test_encoding_subscribable_topics (
hass ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry ,
2022-01-31 09:31:57 +00:00
siren . DOMAIN ,
2022-09-09 09:15:48 +00:00
DEFAULT_CONFIG [ mqtt . DOMAIN ] [ siren . DOMAIN ] ,
2022-01-31 09:31:57 +00:00
topic ,
value ,
attribute ,
attribute_value ,
)
2022-05-23 06:08:08 +00:00
2023-07-18 12:29:45 +00:00
@pytest.mark.parametrize (
" hass_config " ,
[ DEFAULT_CONFIG , { " mqtt " : [ DEFAULT_CONFIG [ " mqtt " ] ] } ] ,
ids = [ " platform_key " , " listed " ] ,
)
2023-03-21 08:19:20 +00:00
async def test_setup_manual_entity_from_yaml (
2023-04-12 07:43:03 +00:00
hass : HomeAssistant , mqtt_mock_entry : MqttMockHAClientGenerator
2023-03-21 08:19:20 +00:00
) - > None :
2022-05-23 06:08:08 +00:00
""" Test setup manual configured MQTT entity. """
2023-04-12 07:43:03 +00:00
await mqtt_mock_entry ( )
2022-05-23 06:08:08 +00:00
platform = siren . DOMAIN
2022-09-09 09:15:48 +00:00
assert hass . states . get ( f " { platform } .test " )
2022-07-12 09:07:18 +00:00
2023-02-08 17:08:03 +00:00
async def test_unload_entry (
2023-02-09 08:48:22 +00:00
hass : HomeAssistant ,
2023-04-12 07:43:03 +00:00
mqtt_mock_entry : MqttMockHAClientGenerator ,
2023-02-08 17:08:03 +00:00
) - > None :
2022-07-12 09:07:18 +00:00
""" Test unloading the config entry. """
domain = siren . DOMAIN
2022-09-09 09:15:48 +00:00
config = DEFAULT_CONFIG
2022-07-12 09:07:18 +00:00
await help_test_unload_config_entry_with_platform (
2023-04-12 07:43:03 +00:00
hass , mqtt_mock_entry , domain , config
2022-07-12 09:07:18 +00:00
)