mirror of
https://github.com/home-assistant/core.git
synced 2025-07-12 07:47:08 +00:00
Fix hassio data fetching over list[Repository] (#128206)
* Fix hassio data fetching over list[Repository] * Parameterize store mock and add store data to sensor tests
This commit is contained in:
parent
b5a6bb74ce
commit
edb30af441
@ -337,7 +337,7 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator):
|
|||||||
|
|
||||||
if store_data:
|
if store_data:
|
||||||
repositories = {
|
repositories = {
|
||||||
repo[ATTR_SLUG]: repo[ATTR_NAME]
|
repo.slug: repo.name
|
||||||
for repo in StoreInfo.from_dict(store_data).repositories
|
for repo in StoreInfo.from_dict(store_data).repositories
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
|
@ -8,7 +8,7 @@ from pathlib import Path
|
|||||||
from typing import TYPE_CHECKING, Any
|
from typing import TYPE_CHECKING, Any
|
||||||
from unittest.mock import AsyncMock, MagicMock, PropertyMock, patch
|
from unittest.mock import AsyncMock, MagicMock, PropertyMock, patch
|
||||||
|
|
||||||
from aiohasupervisor.models import StoreInfo
|
from aiohasupervisor.models import Repository, StoreAddon, StoreInfo
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.const import STATE_OFF, STATE_ON
|
from homeassistant.const import STATE_OFF, STATE_ON
|
||||||
@ -407,10 +407,28 @@ def update_addon_fixture() -> Generator[AsyncMock]:
|
|||||||
yield from mock_update_addon()
|
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")
|
@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."""
|
"""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
|
return supervisor_client.store.info
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,7 +9,13 @@ from types import MethodType
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
from unittest.mock import DEFAULT, AsyncMock, Mock, patch
|
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.components.hassio.addon_manager import AddonManager
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
@ -18,6 +24,39 @@ LOGGER = logging.getLogger(__name__)
|
|||||||
INSTALLED_ADDON_FIELDS = [field.name for field in fields(InstalledAddonComplete)]
|
INSTALLED_ADDON_FIELDS = [field.name for field in fields(InstalledAddonComplete)]
|
||||||
STORE_ADDON_FIELDS = [field.name for field in fields(StoreAddonComplete)]
|
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]:
|
def mock_to_dict(obj: Mock, fields: list[str]) -> dict[str, Any]:
|
||||||
"""Aiohasupervisor mocks to dictionary representation."""
|
"""Aiohasupervisor mocks to dictionary representation."""
|
||||||
|
@ -10,6 +10,8 @@ from homeassistant.core import HomeAssistant
|
|||||||
from homeassistant.helpers import entity_registry as er
|
from homeassistant.helpers import entity_registry as er
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
|
from .common import MOCK_REPOSITORIES, MOCK_STORE_ADDONS
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
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(
|
@pytest.mark.parametrize(
|
||||||
("entity_id", "expected", "addon_state"),
|
("entity_id", "expected", "addon_state"),
|
||||||
[
|
[
|
||||||
|
@ -21,6 +21,8 @@ from homeassistant.helpers import entity_registry as er
|
|||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
import homeassistant.util.dt as dt_util
|
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.common import MockConfigEntry, async_fire_time_changed
|
||||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
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(
|
@pytest.mark.parametrize(
|
||||||
("entity_id", "expected"),
|
("entity_id", "expected"),
|
||||||
[
|
[
|
||||||
@ -261,6 +266,9 @@ async def test_sensor(
|
|||||||
assert state.state == expected
|
assert state.state == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("store_addons", "store_repositories"), [(MOCK_STORE_ADDONS, MOCK_REPOSITORIES)]
|
||||||
|
)
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("entity_id", "expected"),
|
("entity_id", "expected"),
|
||||||
[
|
[
|
||||||
|
Loading…
x
Reference in New Issue
Block a user