mirror of
https://github.com/home-assistant/core.git
synced 2026-04-02 08:26:41 +01:00
168 lines
5.2 KiB
Python
168 lines
5.2 KiB
Python
"""Fixtures for Hass.io."""
|
|
|
|
from collections.abc import AsyncGenerator, Generator
|
|
from dataclasses import replace
|
|
import os
|
|
import re
|
|
from unittest.mock import AsyncMock, Mock, patch
|
|
|
|
from aiohasupervisor.models import AddonsStats, AddonState, InstalledAddonComplete
|
|
from aiohttp.test_utils import TestClient
|
|
import pytest
|
|
|
|
from homeassistant.components.hassio.const import DATA_CONFIG_STORE
|
|
from homeassistant.components.hassio.handler import HassIO
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
|
|
from . import SUPERVISOR_TOKEN
|
|
|
|
from tests.typing import ClientSessionGenerator
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def disable_security_filter() -> Generator[None]:
|
|
"""Disable the security filter to ensure the integration is secure."""
|
|
with patch(
|
|
"homeassistant.components.http.security_filter.FILTERS",
|
|
re.compile("not-matching-anything"),
|
|
):
|
|
yield
|
|
|
|
|
|
@pytest.fixture
|
|
async def hassio_client(
|
|
hassio_stubs: None, hass: HomeAssistant, hass_client: ClientSessionGenerator
|
|
) -> TestClient:
|
|
"""Return a Hass.io HTTP client."""
|
|
return await hass_client()
|
|
|
|
|
|
@pytest.fixture
|
|
async def hassio_noauth_client(
|
|
hassio_stubs: None, hass: HomeAssistant, aiohttp_client: ClientSessionGenerator
|
|
) -> TestClient:
|
|
"""Return a Hass.io HTTP client without auth."""
|
|
return await aiohttp_client(hass.http.app)
|
|
|
|
|
|
@pytest.fixture
|
|
async def hassio_client_supervisor(
|
|
hass: HomeAssistant,
|
|
aiohttp_client: ClientSessionGenerator,
|
|
hassio_stubs: None,
|
|
) -> TestClient:
|
|
"""Return an authenticated HTTP client."""
|
|
hassio_user_id = hass.data[DATA_CONFIG_STORE].data.hassio_user
|
|
hassio_user = await hass.auth.async_get_user(hassio_user_id)
|
|
assert hassio_user
|
|
assert hassio_user.refresh_tokens
|
|
refresh_token = next(iter(hassio_user.refresh_tokens.values()))
|
|
access_token = hass.auth.async_create_access_token(refresh_token)
|
|
return await aiohttp_client(
|
|
hass.http.app,
|
|
headers={"Authorization": f"Bearer {access_token}"},
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
async def hassio_handler(hass: HomeAssistant) -> AsyncGenerator[HassIO]:
|
|
"""Create mock hassio handler."""
|
|
with patch.dict(os.environ, {"SUPERVISOR_TOKEN": SUPERVISOR_TOKEN}):
|
|
yield HassIO(hass.loop, async_get_clientsession(hass), "127.0.0.1")
|
|
|
|
|
|
@pytest.fixture
|
|
def all_setup_requests(
|
|
request: pytest.FixtureRequest,
|
|
addon_installed: AsyncMock,
|
|
store_info: AsyncMock,
|
|
addon_changelog: AsyncMock,
|
|
addon_stats: AsyncMock,
|
|
jobs_info: AsyncMock,
|
|
host_info: AsyncMock,
|
|
supervisor_root_info: AsyncMock,
|
|
homeassistant_info: AsyncMock,
|
|
supervisor_info: AsyncMock,
|
|
addons_list: AsyncMock,
|
|
network_info: AsyncMock,
|
|
os_info: AsyncMock,
|
|
homeassistant_stats: AsyncMock,
|
|
supervisor_stats: AsyncMock,
|
|
ingress_panels: AsyncMock,
|
|
) -> None:
|
|
"""Mock all setup requests."""
|
|
include_addons = hasattr(request, "param") and request.param.get(
|
|
"include_addons", False
|
|
)
|
|
|
|
if include_addons:
|
|
addons_list.return_value[0] = replace(
|
|
addons_list.return_value[0],
|
|
version="1.0.0",
|
|
version_latest="1.0.0",
|
|
update_available=False,
|
|
)
|
|
addons_list.return_value[1] = replace(
|
|
addons_list.return_value[1],
|
|
version="1.0.0",
|
|
version_latest="1.0.0",
|
|
state=AddonState.STARTED,
|
|
)
|
|
else:
|
|
addons_list.return_value = []
|
|
|
|
addon_installed.return_value.update_available = False
|
|
addon_installed.return_value.version = "1.0.0"
|
|
addon_installed.return_value.version_latest = "1.0.0"
|
|
addon_installed.return_value.repository = "core"
|
|
addon_installed.return_value.state = AddonState.STARTED
|
|
addon_installed.return_value.icon = False
|
|
|
|
def mock_addon_info(slug: str):
|
|
addon = Mock(
|
|
spec=InstalledAddonComplete,
|
|
to_dict=addon_installed.return_value.to_dict,
|
|
**addon_installed.return_value.to_dict(),
|
|
)
|
|
if slug == "test":
|
|
addon.name = "test"
|
|
addon.slug = "test"
|
|
addon.url = "https://github.com/home-assistant/addons/test"
|
|
addon.auto_update = True
|
|
else:
|
|
addon.name = "test2"
|
|
addon.slug = "test2"
|
|
addon.url = "https://github.com"
|
|
addon.auto_update = False
|
|
|
|
return addon
|
|
|
|
addon_installed.side_effect = mock_addon_info
|
|
|
|
async def mock_addon_stats(addon: str) -> AddonsStats:
|
|
"""Mock addon stats for test and test2."""
|
|
if addon == "test2":
|
|
return AddonsStats(
|
|
cpu_percent=0.8,
|
|
memory_usage=51941376,
|
|
memory_limit=3977146368,
|
|
memory_percent=1.31,
|
|
network_rx=31338284,
|
|
network_tx=15692900,
|
|
blk_read=740077568,
|
|
blk_write=6004736,
|
|
)
|
|
return AddonsStats(
|
|
cpu_percent=0.99,
|
|
memory_usage=182611968,
|
|
memory_limit=3977146368,
|
|
memory_percent=4.59,
|
|
network_rx=362570232,
|
|
network_tx=82374138,
|
|
blk_read=46010945536,
|
|
blk_write=15051526144,
|
|
)
|
|
|
|
addon_stats.side_effect = mock_addon_stats
|