mirror of
https://github.com/home-assistant/core.git
synced 2025-11-12 20:40:18 +00:00
Add Home Connect action with recognized programs and options (#130662)
* Added recognized options to Home Connect actions * Fix ruff * Fix strings.json * Fix dishwasher typo * Improved test_bsh_key_transformations * Add missing return types * Added descriptions * Remove custom options * Fixes * Merge the 4 services (select, start, set options for active or selected program) And deprecate the original ones * Delete stale snapshots * Clean up logic after service validation * Make deprecated actions issues fixable And delete issue on entry unload * Fixes and improvements Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Improvements Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Fix name and descriptions * Add `affects_to` to strings and service.yaml * Add missing periods at strings * Fix Co-authored-by: Norbert Rittel <norbert@rittel.de> * Add tests to check if the flow removes the deprecated action issue --------- Co-authored-by: Martin Hjelmare <marhje52@gmail.com> Co-authored-by: Norbert Rittel <norbert@rittel.de>
This commit is contained in:
committed by
GitHub
parent
d99044572a
commit
2bfe96dded
@@ -11,6 +11,7 @@ from aiohomeconnect.client import Client as HomeConnectClient
|
||||
from aiohomeconnect.model import (
|
||||
ArrayOfEvents,
|
||||
ArrayOfHomeAppliances,
|
||||
ArrayOfOptions,
|
||||
ArrayOfPrograms,
|
||||
ArrayOfSettings,
|
||||
ArrayOfStatus,
|
||||
@@ -199,13 +200,13 @@ def _get_set_program_side_effect(
|
||||
return set_program_side_effect
|
||||
|
||||
|
||||
def _get_set_key_value_side_effect(
|
||||
event_queue: asyncio.Queue[list[EventMessage]], parameter_key: str
|
||||
def _get_set_setting_side_effect(
|
||||
event_queue: asyncio.Queue[list[EventMessage]],
|
||||
):
|
||||
"""Set program options side effect."""
|
||||
"""Set settings side effect."""
|
||||
|
||||
async def set_key_value_side_effect(ha_id: str, *_, **kwargs) -> None:
|
||||
event_key = EventKey(kwargs[parameter_key])
|
||||
async def set_settings_side_effect(ha_id: str, *_, **kwargs) -> None:
|
||||
event_key = EventKey(kwargs["setting_key"])
|
||||
await event_queue.put(
|
||||
[
|
||||
EventMessage(
|
||||
@@ -227,7 +228,48 @@ def _get_set_key_value_side_effect(
|
||||
]
|
||||
)
|
||||
|
||||
return set_key_value_side_effect
|
||||
return set_settings_side_effect
|
||||
|
||||
|
||||
def _get_set_program_options_side_effect(
|
||||
event_queue: asyncio.Queue[list[EventMessage]],
|
||||
):
|
||||
"""Set programs side effect."""
|
||||
|
||||
async def set_program_options_side_effect(ha_id: str, *_, **kwargs) -> None:
|
||||
await event_queue.put(
|
||||
[
|
||||
EventMessage(
|
||||
ha_id,
|
||||
EventType.NOTIFY,
|
||||
ArrayOfEvents(
|
||||
[
|
||||
Event(
|
||||
key=EventKey(option.key),
|
||||
raw_key=option.key.value,
|
||||
timestamp=0,
|
||||
level="",
|
||||
handling="",
|
||||
value=option.value,
|
||||
)
|
||||
for option in (
|
||||
cast(ArrayOfOptions, kwargs["array_of_options"]).options
|
||||
if "array_of_options" in kwargs
|
||||
else [
|
||||
Option(
|
||||
kwargs["option_key"],
|
||||
kwargs["value"],
|
||||
unit=kwargs["unit"],
|
||||
)
|
||||
]
|
||||
)
|
||||
]
|
||||
),
|
||||
),
|
||||
]
|
||||
)
|
||||
|
||||
return set_program_options_side_effect
|
||||
|
||||
|
||||
async def _get_all_programs_side_effect(ha_id: str) -> ArrayOfPrograms:
|
||||
@@ -319,13 +361,19 @@ def mock_client(request: pytest.FixtureRequest) -> MagicMock:
|
||||
),
|
||||
)
|
||||
mock.set_active_program_option = AsyncMock(
|
||||
side_effect=_get_set_key_value_side_effect(event_queue, "option_key"),
|
||||
side_effect=_get_set_program_options_side_effect(event_queue),
|
||||
)
|
||||
mock.set_active_program_options = AsyncMock(
|
||||
side_effect=_get_set_program_options_side_effect(event_queue),
|
||||
)
|
||||
mock.set_selected_program_option = AsyncMock(
|
||||
side_effect=_get_set_key_value_side_effect(event_queue, "option_key"),
|
||||
side_effect=_get_set_program_options_side_effect(event_queue),
|
||||
)
|
||||
mock.set_selected_program_options = AsyncMock(
|
||||
side_effect=_get_set_program_options_side_effect(event_queue),
|
||||
)
|
||||
mock.set_setting = AsyncMock(
|
||||
side_effect=_get_set_key_value_side_effect(event_queue, "setting_key"),
|
||||
side_effect=_get_set_setting_side_effect(event_queue),
|
||||
)
|
||||
mock.get_settings = AsyncMock(side_effect=_get_settings_side_effect)
|
||||
mock.get_setting = AsyncMock(side_effect=_get_setting_side_effect)
|
||||
@@ -363,7 +411,9 @@ def mock_client_with_exception(request: pytest.FixtureRequest) -> MagicMock:
|
||||
mock.stop_program = AsyncMock(side_effect=exception)
|
||||
mock.set_selected_program = AsyncMock(side_effect=exception)
|
||||
mock.set_active_program_option = AsyncMock(side_effect=exception)
|
||||
mock.set_active_program_options = AsyncMock(side_effect=exception)
|
||||
mock.set_selected_program_option = AsyncMock(side_effect=exception)
|
||||
mock.set_selected_program_options = AsyncMock(side_effect=exception)
|
||||
mock.set_setting = AsyncMock(side_effect=exception)
|
||||
mock.get_settings = AsyncMock(side_effect=exception)
|
||||
mock.get_setting = AsyncMock(side_effect=exception)
|
||||
|
||||
Reference in New Issue
Block a user