Cleanup help_setup_helper in common mqtt tests (#94482)

This commit is contained in:
Jan Bouwhuis 2023-06-12 20:18:05 +02:00 committed by GitHub
parent a25f3c9b27
commit c756c7aceb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -27,7 +27,6 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.generated.mqtt import MQTT from homeassistant.generated.mqtt import MQTT
from homeassistant.helpers import ( from homeassistant.helpers import (
config_validation as cv,
device_registry as dr, device_registry as dr,
entity_registry as er, entity_registry as er,
) )
@ -35,7 +34,7 @@ from homeassistant.helpers.dispatcher import async_dispatcher_send
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from tests.common import MockConfigEntry, async_fire_mqtt_message from tests.common import MockConfigEntry, async_fire_mqtt_message
from tests.typing import MqttMockHAClient, MqttMockHAClientGenerator, MqttMockPahoClient from tests.typing import MqttMockHAClientGenerator, MqttMockPahoClient
DEFAULT_CONFIG_DEVICE_INFO_ID = { DEFAULT_CONFIG_DEVICE_INFO_ID = {
"identifiers": ["helloworld"], "identifiers": ["helloworld"],
@ -77,39 +76,6 @@ def help_all_subscribe_calls(mqtt_client_mock: MqttMockPahoClient) -> list[Any]:
return all_calls return all_calls
async def help_setup_component(
hass: HomeAssistant,
mqtt_mock_entry: MqttMockHAClientGenerator | None,
domain: str,
config: ConfigType,
use_discovery: bool = False,
) -> MqttMockHAClient | None:
"""Help to set up the MQTT component."""
# `async_setup_component` will call `async_setup` and
# after that it will also start the entry `async_start_entry`
# when `async_setup` removed mqtt_mock_entry_with_no_config should be awaited.
if use_discovery:
comp_config = cv.ensure_list(config[mqtt.DOMAIN][domain])
item = 0
assert mqtt_mock_entry is not None
mqtt_mock = await mqtt_mock_entry()
for comp in comp_config:
item += 1
topic = f"homeassistant/{domain}/item_{item}/config"
async_fire_mqtt_message(hass, topic, json.dumps(comp))
await hass.async_block_till_done()
else:
entry = MockConfigEntry(
domain=mqtt.DOMAIN, data={mqtt.CONF_BROKER: "test-broker"}
)
entry.add_to_hass(hass)
with patch("homeassistant.config.load_yaml_config_file", return_value=config):
await entry.async_setup(hass)
mqtt_mock = None
return mqtt_mock
def help_custom_config( def help_custom_config(
mqtt_entity_domain: str, mqtt_entity_domain: str,
mqtt_base_config: ConfigType, mqtt_base_config: ConfigType,
@ -170,7 +136,7 @@ async def help_test_availability_without_topic(
async def help_test_default_availability_payload( async def help_test_default_availability_payload(
hass: HomeAssistant, hass: HomeAssistant,
mqtt_mock_entry_with_no_config: MqttMockHAClientGenerator, mqtt_mock_entry: MqttMockHAClientGenerator,
domain: str, domain: str,
config: ConfigType, config: ConfigType,
no_assumed_state: bool = False, no_assumed_state: bool = False,
@ -185,7 +151,8 @@ async def help_test_default_availability_payload(
config = copy.deepcopy(config) config = copy.deepcopy(config)
config[mqtt.DOMAIN][domain]["availability_topic"] = "availability-topic" config[mqtt.DOMAIN][domain]["availability_topic"] = "availability-topic"
await help_setup_component(hass, mqtt_mock_entry_with_no_config, domain, config) with patch("homeassistant.config.load_yaml_config_file", return_value=config):
await mqtt_mock_entry()
state = hass.states.get(f"{domain}.test") state = hass.states.get(f"{domain}.test")
assert state and state.state == STATE_UNAVAILABLE assert state and state.state == STATE_UNAVAILABLE
@ -233,7 +200,8 @@ async def help_test_default_availability_list_payload(
{"topic": "availability-topic1"}, {"topic": "availability-topic1"},
{"topic": "availability-topic2"}, {"topic": "availability-topic2"},
] ]
await help_setup_component(hass, mqtt_mock_entry, domain, config) with patch("homeassistant.config.load_yaml_config_file", return_value=config):
await mqtt_mock_entry()
state = hass.states.get(f"{domain}.test") state = hass.states.get(f"{domain}.test")
assert state and state.state == STATE_UNAVAILABLE assert state and state.state == STATE_UNAVAILABLE
@ -294,7 +262,8 @@ async def help_test_default_availability_list_payload_all(
{"topic": "availability-topic1"}, {"topic": "availability-topic1"},
{"topic": "availability-topic2"}, {"topic": "availability-topic2"},
] ]
await help_setup_component(hass, mqtt_mock_entry, domain, config) with patch("homeassistant.config.load_yaml_config_file", return_value=config):
await mqtt_mock_entry()
state = hass.states.get(f"{domain}.test") state = hass.states.get(f"{domain}.test")
assert state and state.state == STATE_UNAVAILABLE assert state and state.state == STATE_UNAVAILABLE
@ -356,7 +325,8 @@ async def help_test_default_availability_list_payload_any(
{"topic": "availability-topic1"}, {"topic": "availability-topic1"},
{"topic": "availability-topic2"}, {"topic": "availability-topic2"},
] ]
await help_setup_component(hass, mqtt_mock_entry, domain, config) with patch("homeassistant.config.load_yaml_config_file", return_value=config):
await mqtt_mock_entry()
state = hass.states.get(f"{domain}.test") state = hass.states.get(f"{domain}.test")
assert state and state.state == STATE_UNAVAILABLE assert state and state.state == STATE_UNAVAILABLE
@ -439,7 +409,8 @@ async def help_test_custom_availability_payload(
config[mqtt.DOMAIN][domain]["availability_topic"] = "availability-topic" config[mqtt.DOMAIN][domain]["availability_topic"] = "availability-topic"
config[mqtt.DOMAIN][domain]["payload_available"] = "good" config[mqtt.DOMAIN][domain]["payload_available"] = "good"
config[mqtt.DOMAIN][domain]["payload_not_available"] = "nogood" config[mqtt.DOMAIN][domain]["payload_not_available"] = "nogood"
await help_setup_component(hass, mqtt_mock_entry, domain, config) with patch("homeassistant.config.load_yaml_config_file", return_value=config):
await mqtt_mock_entry()
state = hass.states.get(f"{domain}.test") state = hass.states.get(f"{domain}.test")
assert state and state.state == STATE_UNAVAILABLE assert state and state.state == STATE_UNAVAILABLE
@ -559,7 +530,8 @@ async def help_test_setting_attribute_via_mqtt_json_message(
# Add JSON attributes settings to config # Add JSON attributes settings to config
config = copy.deepcopy(config) config = copy.deepcopy(config)
config[mqtt.DOMAIN][domain]["json_attributes_topic"] = "attr-topic" config[mqtt.DOMAIN][domain]["json_attributes_topic"] = "attr-topic"
await help_setup_component(hass, mqtt_mock_entry, domain, config) with patch("homeassistant.config.load_yaml_config_file", return_value=config):
await mqtt_mock_entry()
async_fire_mqtt_message(hass, "attr-topic", '{ "val": "100" }') async_fire_mqtt_message(hass, "attr-topic", '{ "val": "100" }')
state = hass.states.get(f"{domain}.test") state = hass.states.get(f"{domain}.test")
@ -616,7 +588,8 @@ async def help_test_setting_attribute_with_template(
config[mqtt.DOMAIN][domain][ config[mqtt.DOMAIN][domain][
"json_attributes_template" "json_attributes_template"
] = "{{ value_json['Timer1'] | tojson }}" ] = "{{ value_json['Timer1'] | tojson }}"
await help_setup_component(hass, mqtt_mock_entry, domain, config) with patch("homeassistant.config.load_yaml_config_file", return_value=config):
await mqtt_mock_entry()
async_fire_mqtt_message( async_fire_mqtt_message(
hass, "attr-topic", json.dumps({"Timer1": {"Arm": 0, "Time": "22:18"}}) hass, "attr-topic", json.dumps({"Timer1": {"Arm": 0, "Time": "22:18"}})
@ -642,7 +615,8 @@ async def help_test_update_with_json_attrs_not_dict(
# Add JSON attributes settings to config # Add JSON attributes settings to config
config = copy.deepcopy(config) config = copy.deepcopy(config)
config[mqtt.DOMAIN][domain]["json_attributes_topic"] = "attr-topic" config[mqtt.DOMAIN][domain]["json_attributes_topic"] = "attr-topic"
await help_setup_component(hass, mqtt_mock_entry, domain, config) with patch("homeassistant.config.load_yaml_config_file", return_value=config):
await mqtt_mock_entry()
async_fire_mqtt_message(hass, "attr-topic", '[ "list", "of", "things"]') async_fire_mqtt_message(hass, "attr-topic", '[ "list", "of", "things"]')
state = hass.states.get(f"{domain}.test") state = hass.states.get(f"{domain}.test")
@ -665,7 +639,8 @@ async def help_test_update_with_json_attrs_bad_json(
# Add JSON attributes settings to config # Add JSON attributes settings to config
config = copy.deepcopy(config) config = copy.deepcopy(config)
config[mqtt.DOMAIN][domain]["json_attributes_topic"] = "attr-topic" config[mqtt.DOMAIN][domain]["json_attributes_topic"] = "attr-topic"
await help_setup_component(hass, mqtt_mock_entry, domain, config) with patch("homeassistant.config.load_yaml_config_file", return_value=config):
await mqtt_mock_entry()
async_fire_mqtt_message(hass, "attr-topic", "This is not JSON") async_fire_mqtt_message(hass, "attr-topic", "This is not JSON")
@ -1162,9 +1137,8 @@ async def help_test_entity_id_update_subscriptions(
assert len(topics) > 0 assert len(topics) > 0
entity_registry = er.async_get(hass) entity_registry = er.async_get(hass)
mqtt_mock = await help_setup_component( with patch("homeassistant.config.load_yaml_config_file", return_value=config):
hass, mqtt_mock_entry, domain, config, use_discovery=True mqtt_mock = await mqtt_mock_entry()
)
assert mqtt_mock is not None assert mqtt_mock is not None
state = hass.states.get(f"{domain}.test") state = hass.states.get(f"{domain}.test")