Add WS command for getting a config entry (#93387)

* Add WS command for getting a config entry

* Update tests
This commit is contained in:
Erik Montnemery 2023-05-23 10:44:02 +02:00 committed by GitHub
parent 657d285e8f
commit b754f03eb1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 95 additions and 41 deletions

View file

@ -41,8 +41,9 @@ async def async_setup(hass):
hass.http.register_view(OptionManagerFlowIndexView(hass.config_entries.options))
hass.http.register_view(OptionManagerFlowResourceView(hass.config_entries.options))
websocket_api.async_register_command(hass, config_entries_get)
websocket_api.async_register_command(hass, config_entries_get_matching)
websocket_api.async_register_command(hass, config_entry_disable)
websocket_api.async_register_command(hass, config_entry_get)
websocket_api.async_register_command(hass, config_entry_update)
websocket_api.async_register_command(hass, config_entries_subscribe)
websocket_api.async_register_command(hass, config_entries_progress)
@ -284,6 +285,28 @@ def get_entry(
return entry
@websocket_api.require_admin
@websocket_api.websocket_command(
{
"type": "config_entries/get",
"entry_id": str,
}
)
@websocket_api.async_response
async def config_entry_get(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict[str, Any],
) -> None:
"""Update config entry."""
entry = get_entry(hass, connection, msg["entry_id"], msg["id"])
if entry is None:
return
result = {"config_entry": entry_json(entry)}
connection.send_result(msg["id"], result)
@websocket_api.require_admin
@websocket_api.websocket_command(
{
@ -409,13 +432,13 @@ async def ignore_config_flow(
@websocket_api.websocket_command(
{
vol.Required("type"): "config_entries/get",
vol.Required("type"): "config_entries/get_matching",
vol.Optional("type_filter"): vol.All(cv.ensure_list, [str]),
vol.Optional("domain"): str,
}
)
@websocket_api.async_response
async def config_entries_get(
async def config_entries_get_matching(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict[str, Any],

View file

@ -36,7 +36,7 @@ async def test_options_flow_disabled_not_setup(
await ws_client.send_json(
{
"id": 5,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"domain": "bluetooth",
}
)
@ -370,7 +370,7 @@ async def test_options_flow_disabled_macos(
await ws_client.send_json(
{
"id": 5,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"domain": "bluetooth",
}
)
@ -403,7 +403,7 @@ async def test_options_flow_enabled_linux(
await ws_client.send_json(
{
"id": 5,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"domain": "bluetooth",
}
)

View file

@ -965,6 +965,55 @@ async def test_options_flow_with_invalid_data(hass: HomeAssistant, client) -> No
}
async def test_get(hass: HomeAssistant, hass_ws_client: WebSocketGenerator) -> None:
"""Test that we can get a config entry."""
assert await async_setup_component(hass, "config", {})
ws_client = await hass_ws_client(hass)
entry = MockConfigEntry(domain="demo", state=core_ce.ConfigEntryState.LOADED)
entry.add_to_hass(hass)
assert entry.pref_disable_new_entities is False
assert entry.pref_disable_polling is False
await ws_client.send_json_auto_id(
{
"type": "config_entries/get",
"entry_id": entry.entry_id,
}
)
response = await ws_client.receive_json()
assert response["success"]
assert response["result"]["config_entry"] == {
"disabled_by": None,
"domain": "demo",
"entry_id": entry.entry_id,
"pref_disable_new_entities": False,
"pref_disable_polling": False,
"reason": None,
"source": "user",
"state": "loaded",
"supports_options": False,
"supports_remove_device": False,
"supports_unload": False,
"title": "Mock Title",
}
await ws_client.send_json_auto_id(
{
"type": "config_entries/get",
"entry_id": "blah",
}
)
response = await ws_client.receive_json()
assert not response["success"]
assert response["error"] == {
"code": "not_found",
"message": "Config entry not found",
}
async def test_update_prefrences(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
@ -1209,7 +1258,7 @@ async def test_ignore_flow_nonexisting(
assert response["error"]["code"] == "not_found"
async def test_get_entries_ws(
async def test_get_matching_entries_ws(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator, clear_handlers
) -> None:
"""Test get entries with the websocket api."""
@ -1260,14 +1309,8 @@ async def test_get_entries_ws(
ws_client = await hass_ws_client(hass)
await ws_client.send_json(
{
"id": 5,
"type": "config_entries/get",
}
)
await ws_client.send_json_auto_id({"type": "config_entries/get_matching"})
response = await ws_client.receive_json()
assert response["id"] == 5
assert response["result"] == [
{
"disabled_by": None,
@ -1341,16 +1384,14 @@ async def test_get_entries_ws(
},
]
await ws_client.send_json(
await ws_client.send_json_auto_id(
{
"id": 6,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"domain": "comp1",
"type_filter": "hub",
}
)
response = await ws_client.receive_json()
assert response["id"] == 6
assert response["result"] == [
{
"disabled_by": None,
@ -1368,15 +1409,13 @@ async def test_get_entries_ws(
}
]
await ws_client.send_json(
await ws_client.send_json_auto_id(
{
"id": 7,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"type_filter": ["service", "device"],
}
)
response = await ws_client.receive_json()
assert response["id"] == 7
assert response["result"] == [
{
"disabled_by": None,
@ -1408,15 +1447,13 @@ async def test_get_entries_ws(
},
]
await ws_client.send_json(
await ws_client.send_json_auto_id(
{
"id": 8,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"type_filter": "hub",
}
)
response = await ws_client.receive_json()
assert response["id"] == 8
assert response["result"] == [
{
"disabled_by": None,
@ -1453,16 +1490,14 @@ async def test_get_entries_ws(
"homeassistant.components.config.config_entries.async_get_integrations",
return_value={"any": IntegrationNotFound("any")},
):
await ws_client.send_json(
await ws_client.send_json_auto_id(
{
"id": 9,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"type_filter": "hub",
}
)
response = await ws_client.receive_json()
assert response["id"] == 9
assert response["result"] == [
{
"disabled_by": None,
@ -1541,16 +1576,14 @@ async def test_get_entries_ws(
"homeassistant.components.config.config_entries.async_get_integrations",
return_value={"any": IntegrationNotFound("any")},
):
await ws_client.send_json(
await ws_client.send_json_auto_id(
{
"id": 10,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"type_filter": ["helper"],
}
)
response = await ws_client.receive_json()
assert response["id"] == 10
assert response["result"] == []
# Verify we raise if something really goes wrong
@ -1559,16 +1592,14 @@ async def test_get_entries_ws(
"homeassistant.components.config.config_entries.async_get_integrations",
return_value={"any": Exception()},
):
await ws_client.send_json(
await ws_client.send_json_auto_id(
{
"id": 11,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"type_filter": ["device", "hub", "service"],
}
)
response = await ws_client.receive_json()
assert response["id"] == 11
assert response["success"] is False

View file

@ -858,7 +858,7 @@ async def test_options_flow_disabled_gen_1(
await ws_client.send_json(
{
"id": 5,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"domain": "shelly",
}
)
@ -879,7 +879,7 @@ async def test_options_flow_enabled_gen_2(
await ws_client.send_json(
{
"id": 5,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"domain": "shelly",
}
)
@ -900,7 +900,7 @@ async def test_options_flow_disabled_sleepy_gen_2(
await ws_client.send_json(
{
"id": 5,
"type": "config_entries/get",
"type": "config_entries/get_matching",
"domain": "shelly",
}
)