diff --git a/homeassistant/components/hassio/coordinator.py b/homeassistant/components/hassio/coordinator.py index 5c37df1a46a..843b1e26772 100644 --- a/homeassistant/components/hassio/coordinator.py +++ b/homeassistant/components/hassio/coordinator.py @@ -337,7 +337,7 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator): if store_data: repositories = { - repo[ATTR_SLUG]: repo[ATTR_NAME] + repo.slug: repo.name for repo in StoreInfo.from_dict(store_data).repositories } else: diff --git a/tests/components/conftest.py b/tests/components/conftest.py index e04639d687a..869f54019c9 100644 --- a/tests/components/conftest.py +++ b/tests/components/conftest.py @@ -8,7 +8,7 @@ from pathlib import Path from typing import TYPE_CHECKING, Any from unittest.mock import AsyncMock, MagicMock, PropertyMock, patch -from aiohasupervisor.models import StoreInfo +from aiohasupervisor.models import Repository, StoreAddon, StoreInfo import pytest from homeassistant.const import STATE_OFF, STATE_ON @@ -407,10 +407,28 @@ def update_addon_fixture() -> Generator[AsyncMock]: yield from mock_update_addon() +@pytest.fixture(name="store_addons") +def store_addons_fixture() -> list[StoreAddon]: + """Mock store addons list.""" + return [] + + +@pytest.fixture(name="store_repositories") +def store_repositories_fixture() -> list[Repository]: + """Mock store repositories list.""" + return [] + + @pytest.fixture(name="store_info") -def store_info_fixture(supervisor_client: AsyncMock) -> AsyncMock: +def store_info_fixture( + supervisor_client: AsyncMock, + store_addons: list[StoreAddon], + store_repositories: list[Repository], +) -> AsyncMock: """Mock store info.""" - supervisor_client.store.info.return_value = StoreInfo(addons=[], repositories=[]) + supervisor_client.store.info.return_value = StoreInfo( + addons=store_addons, repositories=store_repositories + ) return supervisor_client.store.info diff --git a/tests/components/hassio/common.py b/tests/components/hassio/common.py index 6801529f7f0..712b97ea230 100644 --- a/tests/components/hassio/common.py +++ b/tests/components/hassio/common.py @@ -9,7 +9,13 @@ from types import MethodType from typing import Any from unittest.mock import DEFAULT, AsyncMock, Mock, patch -from aiohasupervisor.models import InstalledAddonComplete, StoreAddonComplete +from aiohasupervisor.models import ( + AddonStage, + InstalledAddonComplete, + Repository, + StoreAddon, + StoreAddonComplete, +) from homeassistant.components.hassio.addon_manager import AddonManager from homeassistant.core import HomeAssistant @@ -18,6 +24,39 @@ LOGGER = logging.getLogger(__name__) INSTALLED_ADDON_FIELDS = [field.name for field in fields(InstalledAddonComplete)] STORE_ADDON_FIELDS = [field.name for field in fields(StoreAddonComplete)] +MOCK_STORE_ADDONS = [ + StoreAddon( + name="test", + arch=[], + documentation=False, + advanced=False, + available=True, + build=False, + description="Test add-on service", + homeassistant=None, + icon=False, + logo=False, + repository="core", + slug="core_test", + stage=AddonStage.EXPERIMENTAL, + update_available=False, + url="https://example.com/addons/tree/master/test", + version_latest="1.0.0", + version="1.0.0", + installed=True, + ) +] + +MOCK_REPOSITORIES = [ + Repository( + slug="core", + name="Official add-ons", + source="core", + url="https://home-assistant.io/addons", + maintainer="Home Assistant", + ) +] + def mock_to_dict(obj: Mock, fields: list[str]) -> dict[str, Any]: """Aiohasupervisor mocks to dictionary representation.""" diff --git a/tests/components/hassio/test_binary_sensor.py b/tests/components/hassio/test_binary_sensor.py index b4faa5ecafc..c41014ffcfe 100644 --- a/tests/components/hassio/test_binary_sensor.py +++ b/tests/components/hassio/test_binary_sensor.py @@ -10,6 +10,8 @@ from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er from homeassistant.setup import async_setup_component +from .common import MOCK_REPOSITORIES, MOCK_STORE_ADDONS + from tests.common import MockConfigEntry from tests.test_util.aiohttp import AiohttpClientMocker @@ -177,6 +179,9 @@ def mock_all(aioclient_mock: AiohttpClientMocker, addon_installed, store_info) - ) +@pytest.mark.parametrize( + ("store_addons", "store_repositories"), [(MOCK_STORE_ADDONS, MOCK_REPOSITORIES)] +) @pytest.mark.parametrize( ("entity_id", "expected", "addon_state"), [ diff --git a/tests/components/hassio/test_sensor.py b/tests/components/hassio/test_sensor.py index 0a4869184ea..5c7f74fad8d 100644 --- a/tests/components/hassio/test_sensor.py +++ b/tests/components/hassio/test_sensor.py @@ -21,6 +21,8 @@ from homeassistant.helpers import entity_registry as er from homeassistant.setup import async_setup_component import homeassistant.util.dt as dt_util +from .common import MOCK_REPOSITORIES, MOCK_STORE_ADDONS + from tests.common import MockConfigEntry, async_fire_time_changed from tests.test_util.aiohttp import AiohttpClientMocker @@ -203,6 +205,9 @@ def _install_default_mocks(aioclient_mock: AiohttpClientMocker): ) +@pytest.mark.parametrize( + ("store_addons", "store_repositories"), [(MOCK_STORE_ADDONS, MOCK_REPOSITORIES)] +) @pytest.mark.parametrize( ("entity_id", "expected"), [ @@ -261,6 +266,9 @@ async def test_sensor( assert state.state == expected +@pytest.mark.parametrize( + ("store_addons", "store_repositories"), [(MOCK_STORE_ADDONS, MOCK_REPOSITORIES)] +) @pytest.mark.parametrize( ("entity_id", "expected"), [