Fix hassio data fetching over list[Repository] (#128206)
* Fix hassio data fetching over list[Repository] * Parameterize store mock and add store data to sensor testspull/127725/head^2
parent
b5a6bb74ce
commit
edb30af441
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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."""
|
||||
|
|
|
@ -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"),
|
||||
[
|
||||
|
|
|
@ -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"),
|
||||
[
|
||||
|
|
Loading…
Reference in New Issue