mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 16:57:53 +00:00
Fetch all programs instead of only the available ones at Home Connect (#136949)
Fetch all programs instead of only the available ones
This commit is contained in:
parent
4613087e86
commit
4d4e11a0eb
@ -25,7 +25,7 @@ from aiohomeconnect.model.error import (
|
||||
HomeConnectError,
|
||||
HomeConnectRequestError,
|
||||
)
|
||||
from aiohomeconnect.model.program import EnumerateAvailableProgram
|
||||
from aiohomeconnect.model.program import EnumerateProgram
|
||||
from propcache.api import cached_property
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
@ -48,7 +48,7 @@ class HomeConnectApplianceData:
|
||||
|
||||
events: dict[EventKey, Event] = field(default_factory=dict)
|
||||
info: HomeAppliance
|
||||
programs: list[EnumerateAvailableProgram] = field(default_factory=list)
|
||||
programs: list[EnumerateProgram] = field(default_factory=list)
|
||||
settings: dict[SettingKey, GetSetting]
|
||||
status: dict[StatusKey, Status]
|
||||
|
||||
@ -243,9 +243,7 @@ class HomeConnectCoordinator(
|
||||
):
|
||||
try:
|
||||
appliance_data.programs.extend(
|
||||
(
|
||||
await self.client.get_available_programs(appliance.ha_id)
|
||||
).programs
|
||||
(await self.client.get_all_programs(appliance.ha_id)).programs
|
||||
)
|
||||
except HomeConnectError as error:
|
||||
_LOGGER.debug(
|
||||
|
@ -5,7 +5,7 @@ from typing import Any, cast
|
||||
|
||||
from aiohomeconnect.model import EventKey, ProgramKey, SettingKey
|
||||
from aiohomeconnect.model.error import HomeConnectError
|
||||
from aiohomeconnect.model.program import EnumerateAvailableProgram
|
||||
from aiohomeconnect.model.program import EnumerateProgram
|
||||
|
||||
from homeassistant.components.automation import automations_with_entity
|
||||
from homeassistant.components.script import scripts_with_entity
|
||||
@ -184,7 +184,7 @@ class HomeConnectProgramSwitch(HomeConnectEntity, SwitchEntity):
|
||||
self,
|
||||
coordinator: HomeConnectCoordinator,
|
||||
appliance: HomeConnectApplianceData,
|
||||
program: EnumerateAvailableProgram,
|
||||
program: EnumerateProgram,
|
||||
) -> None:
|
||||
"""Initialize the entity."""
|
||||
desc = " ".join(["Program", program.key.split(".")[-1]])
|
||||
|
@ -9,9 +9,9 @@ from unittest.mock import AsyncMock, MagicMock, patch
|
||||
|
||||
from aiohomeconnect.client import Client as HomeConnectClient
|
||||
from aiohomeconnect.model import (
|
||||
ArrayOfAvailablePrograms,
|
||||
ArrayOfEvents,
|
||||
ArrayOfHomeAppliances,
|
||||
ArrayOfPrograms,
|
||||
ArrayOfSettings,
|
||||
ArrayOfStatus,
|
||||
Event,
|
||||
@ -37,9 +37,7 @@ from tests.common import MockConfigEntry, load_json_object_fixture
|
||||
MOCK_APPLIANCES = ArrayOfHomeAppliances.from_dict(
|
||||
load_json_object_fixture("home_connect/appliances.json")["data"]
|
||||
)
|
||||
MOCK_PROGRAMS: dict[str, Any] = load_json_object_fixture(
|
||||
"home_connect/programs-available.json"
|
||||
)
|
||||
MOCK_PROGRAMS: dict[str, Any] = load_json_object_fixture("home_connect/programs.json")
|
||||
MOCK_SETTINGS: dict[str, Any] = load_json_object_fixture("home_connect/settings.json")
|
||||
MOCK_STATUS = ArrayOfStatus.from_dict(
|
||||
load_json_object_fixture("home_connect/status.json")["data"]
|
||||
@ -219,8 +217,8 @@ def _get_set_key_value_side_effect(
|
||||
return set_key_value_side_effect
|
||||
|
||||
|
||||
async def _get_available_programs_side_effect(ha_id: str) -> ArrayOfAvailablePrograms:
|
||||
"""Get available programs."""
|
||||
async def _get_all_programs_side_effect(ha_id: str) -> ArrayOfPrograms:
|
||||
"""Get all programs."""
|
||||
appliance_type = next(
|
||||
appliance
|
||||
for appliance in MOCK_APPLIANCES.homeappliances
|
||||
@ -229,7 +227,7 @@ async def _get_available_programs_side_effect(ha_id: str) -> ArrayOfAvailablePro
|
||||
if appliance_type not in MOCK_PROGRAMS:
|
||||
raise HomeConnectApiError("error.key", "error description")
|
||||
|
||||
return ArrayOfAvailablePrograms.from_dict(MOCK_PROGRAMS[appliance_type]["data"])
|
||||
return ArrayOfPrograms.from_dict(MOCK_PROGRAMS[appliance_type]["data"])
|
||||
|
||||
|
||||
async def _get_settings_side_effect(ha_id: str) -> ArrayOfSettings:
|
||||
@ -290,9 +288,7 @@ def mock_client(request: pytest.FixtureRequest) -> MagicMock:
|
||||
)
|
||||
mock.get_settings = AsyncMock(side_effect=_get_settings_side_effect)
|
||||
mock.get_status = AsyncMock(return_value=copy.deepcopy(MOCK_STATUS))
|
||||
mock.get_available_programs = AsyncMock(
|
||||
side_effect=_get_available_programs_side_effect
|
||||
)
|
||||
mock.get_all_programs = AsyncMock(side_effect=_get_all_programs_side_effect)
|
||||
mock.put_command = AsyncMock()
|
||||
|
||||
mock.side_effect = mock
|
||||
@ -323,7 +319,6 @@ def mock_client_with_exception(request: pytest.FixtureRequest) -> MagicMock:
|
||||
|
||||
mock.start_program = AsyncMock(side_effect=exception)
|
||||
mock.stop_program = AsyncMock(side_effect=exception)
|
||||
mock.get_available_programs = AsyncMock(side_effect=exception)
|
||||
mock.set_selected_program = AsyncMock(side_effect=exception)
|
||||
mock.set_active_program_option = AsyncMock(side_effect=exception)
|
||||
mock.set_selected_program_option = AsyncMock(side_effect=exception)
|
||||
@ -331,7 +326,7 @@ def mock_client_with_exception(request: pytest.FixtureRequest) -> MagicMock:
|
||||
mock.get_settings = AsyncMock(side_effect=exception)
|
||||
mock.get_setting = AsyncMock(side_effect=exception)
|
||||
mock.get_status = AsyncMock(side_effect=exception)
|
||||
mock.get_available_programs = AsyncMock(side_effect=exception)
|
||||
mock.get_all_programs = AsyncMock(side_effect=exception)
|
||||
mock.put_command = AsyncMock(side_effect=exception)
|
||||
|
||||
return mock
|
||||
|
@ -4,8 +4,8 @@ from collections.abc import Awaitable, Callable
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from aiohomeconnect.model import (
|
||||
ArrayOfAvailablePrograms,
|
||||
ArrayOfEvents,
|
||||
ArrayOfPrograms,
|
||||
Event,
|
||||
EventKey,
|
||||
EventMessage,
|
||||
@ -13,7 +13,7 @@ from aiohomeconnect.model import (
|
||||
ProgramKey,
|
||||
)
|
||||
from aiohomeconnect.model.error import HomeConnectError
|
||||
from aiohomeconnect.model.program import EnumerateAvailableProgram
|
||||
from aiohomeconnect.model.program import EnumerateProgram
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.select import (
|
||||
@ -61,14 +61,14 @@ async def test_filter_unknown_programs(
|
||||
entity_registry: er.EntityRegistry,
|
||||
) -> None:
|
||||
"""Test select that only known programs are shown."""
|
||||
client.get_available_programs.side_effect = None
|
||||
client.get_available_programs.return_value = ArrayOfAvailablePrograms(
|
||||
client.get_all_programs.side_effect = None
|
||||
client.get_all_programs.return_value = ArrayOfPrograms(
|
||||
[
|
||||
EnumerateAvailableProgram(
|
||||
EnumerateProgram(
|
||||
key=ProgramKey.DISHCARE_DISHWASHER_ECO_50,
|
||||
raw_key=ProgramKey.DISHCARE_DISHWASHER_ECO_50.value,
|
||||
),
|
||||
EnumerateAvailableProgram(
|
||||
EnumerateProgram(
|
||||
key=ProgramKey.UNKNOWN,
|
||||
raw_key="an unknown program",
|
||||
),
|
||||
@ -202,16 +202,14 @@ async def test_select_exception_handling(
|
||||
client_with_exception: MagicMock,
|
||||
) -> None:
|
||||
"""Test exception handling."""
|
||||
client_with_exception.get_available_programs.side_effect = None
|
||||
client_with_exception.get_available_programs.return_value = (
|
||||
ArrayOfAvailablePrograms(
|
||||
[
|
||||
EnumerateAvailableProgram(
|
||||
key=ProgramKey.DISHCARE_DISHWASHER_ECO_50,
|
||||
raw_key=ProgramKey.DISHCARE_DISHWASHER_ECO_50.value,
|
||||
)
|
||||
]
|
||||
)
|
||||
client_with_exception.get_all_programs.side_effect = None
|
||||
client_with_exception.get_all_programs.return_value = ArrayOfPrograms(
|
||||
[
|
||||
EnumerateProgram(
|
||||
key=ProgramKey.DISHCARE_DISHWASHER_ECO_50,
|
||||
raw_key=ProgramKey.DISHCARE_DISHWASHER_ECO_50.value,
|
||||
)
|
||||
]
|
||||
)
|
||||
|
||||
assert config_entry.state is ConfigEntryState.NOT_LOADED
|
||||
|
@ -15,10 +15,7 @@ from aiohomeconnect.model import (
|
||||
)
|
||||
from aiohomeconnect.model.error import HomeConnectError
|
||||
from aiohomeconnect.model.event import ArrayOfEvents, EventType
|
||||
from aiohomeconnect.model.program import (
|
||||
ArrayOfAvailablePrograms,
|
||||
EnumerateAvailableProgram,
|
||||
)
|
||||
from aiohomeconnect.model.program import ArrayOfPrograms, EnumerateProgram
|
||||
from aiohomeconnect.model.setting import SettingConstraints
|
||||
import pytest
|
||||
|
||||
@ -250,16 +247,14 @@ async def test_switch_exception_handling(
|
||||
client_with_exception: MagicMock,
|
||||
) -> None:
|
||||
"""Test exception handling."""
|
||||
client_with_exception.get_available_programs.side_effect = None
|
||||
client_with_exception.get_available_programs.return_value = (
|
||||
ArrayOfAvailablePrograms(
|
||||
[
|
||||
EnumerateAvailableProgram(
|
||||
key=ProgramKey.DISHCARE_DISHWASHER_ECO_50,
|
||||
raw_key=ProgramKey.DISHCARE_DISHWASHER_ECO_50.value,
|
||||
)
|
||||
]
|
||||
)
|
||||
client_with_exception.get_all_programs.side_effect = None
|
||||
client_with_exception.get_all_programs.return_value = ArrayOfPrograms(
|
||||
[
|
||||
EnumerateProgram(
|
||||
key=ProgramKey.DISHCARE_DISHWASHER_ECO_50,
|
||||
raw_key=ProgramKey.DISHCARE_DISHWASHER_ECO_50.value,
|
||||
)
|
||||
]
|
||||
)
|
||||
client_with_exception.get_settings.side_effect = None
|
||||
client_with_exception.get_settings.return_value = ArrayOfSettings(
|
||||
|
Loading…
x
Reference in New Issue
Block a user