Add test of get_all_descriptions resolving features (#120384)

This commit is contained in:
Erik Montnemery 2024-06-25 09:47:43 +02:00 committed by GitHub
parent 744161928e
commit 6fb400f76b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -971,6 +971,83 @@ async def test_async_get_all_descriptions_dot_keys(hass: HomeAssistant) -> None:
}
async def test_async_get_all_descriptions_filter(hass: HomeAssistant) -> None:
"""Test async_get_all_descriptions with filters."""
service_descriptions = """
test_service:
target:
entity:
domain: alarm_control_panel
supported_features:
- alarm_control_panel.AlarmControlPanelEntityFeature.ARM_HOME
fields:
temperature:
filter:
supported_features:
- alarm_control_panel.AlarmControlPanelEntityFeature.ARM_HOME
attribute:
supported_color_modes:
- light.ColorMode.COLOR_TEMP
selector:
number:
"""
domain = "test_domain"
hass.services.async_register(domain, "test_service", lambda call: None)
mock_integration(hass, MockModule(domain), top_level_files={"services.yaml"})
assert await async_setup_component(hass, domain, {})
def load_yaml(fname, secrets=None):
with io.StringIO(service_descriptions) as file:
return parse_yaml(file)
with (
patch(
"homeassistant.helpers.service._load_services_files",
side_effect=service._load_services_files,
) as proxy_load_services_files,
patch(
"homeassistant.util.yaml.loader.load_yaml",
side_effect=load_yaml,
) as mock_load_yaml,
):
descriptions = await service.async_get_all_descriptions(hass)
mock_load_yaml.assert_called_once_with("services.yaml", None)
assert proxy_load_services_files.mock_calls[0][1][1] == unordered(
[
await async_get_integration(hass, domain),
]
)
test_service_schema = {
"description": "",
"fields": {
"temperature": {
"filter": {
"attribute": {"supported_color_modes": ["color_temp"]},
"supported_features": [1],
},
"selector": {"number": None},
},
},
"name": "",
"target": {
"entity": [
{
"domain": ["alarm_control_panel"],
"supported_features": [1],
},
],
},
}
assert descriptions == {
"test_domain": {"test_service": test_service_schema},
}
async def test_async_get_all_descriptions_failing_integration(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None: