Allow hiding and unhiding group members (#68192)
This commit is contained in:
parent
b5d2c6e43a
commit
1b955970f8
7 changed files with 359 additions and 14 deletions
|
@ -7,6 +7,7 @@ from homeassistant import config_entries
|
|||
from homeassistant.components.group import DOMAIN, async_setup_entry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.data_entry_flow import RESULT_TYPE_CREATE_ENTRY, RESULT_TYPE_FORM
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
|
@ -68,8 +69,9 @@ async def test_config_flow(
|
|||
assert result["title"] == "Living Room"
|
||||
assert result["data"] == {}
|
||||
assert result["options"] == {
|
||||
"group_type": group_type,
|
||||
"entities": members,
|
||||
"group_type": group_type,
|
||||
"hide_members": False,
|
||||
"name": "Living Room",
|
||||
**extra_options,
|
||||
}
|
||||
|
@ -78,9 +80,10 @@ async def test_config_flow(
|
|||
config_entry = hass.config_entries.async_entries(DOMAIN)[0]
|
||||
assert config_entry.data == {}
|
||||
assert config_entry.options == {
|
||||
"group_type": group_type,
|
||||
"name": "Living Room",
|
||||
"entities": members,
|
||||
"group_type": group_type,
|
||||
"hide_members": False,
|
||||
"name": "Living Room",
|
||||
**extra_options,
|
||||
}
|
||||
|
||||
|
@ -91,6 +94,69 @@ async def test_config_flow(
|
|||
assert state.attributes[key] == extra_attrs[key]
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"hide_members,hidden_by", ((False, None), (True, "integration"))
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
"group_type,extra_input",
|
||||
(
|
||||
("binary_sensor", {"all": False}),
|
||||
("cover", {}),
|
||||
("fan", {}),
|
||||
("light", {}),
|
||||
("media_player", {}),
|
||||
),
|
||||
)
|
||||
async def test_config_flow_hides_members(
|
||||
hass: HomeAssistant, group_type, extra_input, hide_members, hidden_by
|
||||
) -> None:
|
||||
"""Test the config flow hides members if requested."""
|
||||
fake_uuid = "a266a680b608c32770e6c45bfe6b8411"
|
||||
registry = er.async_get(hass)
|
||||
entry = registry.async_get_or_create(
|
||||
group_type, "test", "unique", suggested_object_id="one"
|
||||
)
|
||||
assert entry.entity_id == f"{group_type}.one"
|
||||
assert entry.hidden_by is None
|
||||
|
||||
entry = registry.async_get_or_create(
|
||||
group_type, "test", "unique3", suggested_object_id="three"
|
||||
)
|
||||
assert entry.entity_id == f"{group_type}.three"
|
||||
assert entry.hidden_by is None
|
||||
|
||||
members = [f"{group_type}.one", f"{group_type}.two", fake_uuid, entry.id]
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
||||
)
|
||||
assert result["type"] == RESULT_TYPE_FORM
|
||||
assert result["errors"] is None
|
||||
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
{"group_type": group_type},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
assert result["type"] == RESULT_TYPE_FORM
|
||||
assert result["step_id"] == group_type
|
||||
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
{
|
||||
"name": "Living Room",
|
||||
"entities": members,
|
||||
"hide_members": hide_members,
|
||||
**extra_input,
|
||||
},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result["type"] == RESULT_TYPE_CREATE_ENTRY
|
||||
|
||||
assert registry.async_get(f"{group_type}.one").hidden_by == hidden_by
|
||||
assert registry.async_get(f"{group_type}.three").hidden_by == hidden_by
|
||||
|
||||
|
||||
def get_suggested(schema, key):
|
||||
"""Get suggested value for key in voluptuous schema."""
|
||||
for k in schema.keys():
|
||||
|
@ -124,7 +190,7 @@ async def test_options(
|
|||
for member in members2:
|
||||
hass.states.async_set(member, member_state, {})
|
||||
|
||||
switch_as_x_config_entry = MockConfigEntry(
|
||||
group_config_entry = MockConfigEntry(
|
||||
data={},
|
||||
domain=DOMAIN,
|
||||
options={
|
||||
|
@ -135,9 +201,9 @@ async def test_options(
|
|||
},
|
||||
title="Bed Room",
|
||||
)
|
||||
switch_as_x_config_entry.add_to_hass(hass)
|
||||
group_config_entry.add_to_hass(hass)
|
||||
|
||||
assert await hass.config_entries.async_setup(switch_as_x_config_entry.entry_id)
|
||||
assert await hass.config_entries.async_setup(group_config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
state = hass.states.get(f"{group_type}.bed_room")
|
||||
|
@ -159,15 +225,17 @@ async def test_options(
|
|||
)
|
||||
assert result["type"] == RESULT_TYPE_CREATE_ENTRY
|
||||
assert result["data"] == {
|
||||
"group_type": group_type,
|
||||
"entities": members2,
|
||||
"group_type": group_type,
|
||||
"hide_members": False,
|
||||
"name": "Bed Room",
|
||||
**extra_options,
|
||||
}
|
||||
assert config_entry.data == {}
|
||||
assert config_entry.options == {
|
||||
"group_type": group_type,
|
||||
"entities": members2,
|
||||
"group_type": group_type,
|
||||
"hide_members": False,
|
||||
"name": "Bed Room",
|
||||
**extra_options,
|
||||
}
|
||||
|
@ -196,3 +264,83 @@ async def test_options(
|
|||
|
||||
assert get_suggested(result["data_schema"].schema, "entities") is None
|
||||
assert get_suggested(result["data_schema"].schema, "name") is None
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"hide_members,hidden_by_initial,hidden_by",
|
||||
((False, "integration", None), (True, None, "integration")),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
"group_type,extra_input",
|
||||
(
|
||||
("binary_sensor", {"all": False}),
|
||||
("cover", {}),
|
||||
("fan", {}),
|
||||
("light", {}),
|
||||
("media_player", {}),
|
||||
),
|
||||
)
|
||||
async def test_options_flow_hides_members(
|
||||
hass: HomeAssistant,
|
||||
group_type,
|
||||
extra_input,
|
||||
hide_members,
|
||||
hidden_by_initial,
|
||||
hidden_by,
|
||||
) -> None:
|
||||
"""Test the options flow hides or unhides members if requested."""
|
||||
fake_uuid = "a266a680b608c32770e6c45bfe6b8411"
|
||||
registry = er.async_get(hass)
|
||||
entry = registry.async_get_or_create(
|
||||
group_type,
|
||||
"test",
|
||||
"unique1",
|
||||
suggested_object_id="one",
|
||||
hidden_by=hidden_by_initial,
|
||||
)
|
||||
assert entry.entity_id == f"{group_type}.one"
|
||||
|
||||
entry = registry.async_get_or_create(
|
||||
group_type,
|
||||
"test",
|
||||
"unique3",
|
||||
suggested_object_id="three",
|
||||
hidden_by=hidden_by_initial,
|
||||
)
|
||||
assert entry.entity_id == f"{group_type}.three"
|
||||
|
||||
members = [f"{group_type}.one", f"{group_type}.two", fake_uuid, entry.id]
|
||||
|
||||
group_config_entry = MockConfigEntry(
|
||||
data={},
|
||||
domain=DOMAIN,
|
||||
options={
|
||||
"entities": members,
|
||||
"group_type": group_type,
|
||||
"hide_members": False,
|
||||
"name": "Bed Room",
|
||||
**extra_input,
|
||||
},
|
||||
title="Bed Room",
|
||||
)
|
||||
group_config_entry.add_to_hass(hass)
|
||||
|
||||
assert await hass.config_entries.async_setup(group_config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
result = await hass.config_entries.options.async_init(group_config_entry.entry_id)
|
||||
assert result["type"] == RESULT_TYPE_FORM
|
||||
|
||||
result = await hass.config_entries.options.async_configure(
|
||||
result["flow_id"],
|
||||
user_input={
|
||||
"entities": members,
|
||||
"hide_members": hide_members,
|
||||
},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result["type"] == RESULT_TYPE_CREATE_ENTRY
|
||||
|
||||
assert registry.async_get(f"{group_type}.one").hidden_by == hidden_by
|
||||
assert registry.async_get(f"{group_type}.three").hidden_by == hidden_by
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue