core/tests/components/hassio/test_config.py

183 lines
5.8 KiB
Python

"""Test websocket API."""
from typing import Any
from unittest.mock import AsyncMock, patch
from uuid import UUID
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.auth.const import GROUP_ID_ADMIN
from homeassistant.components.hassio.const import DATA_CONFIG_STORE, DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from tests.common import MockUser
from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import WebSocketGenerator
MOCK_ENVIRON = {"SUPERVISOR": "127.0.0.1", "SUPERVISOR_TOKEN": "abcdefgh"}
@pytest.fixture(autouse=True)
def mock_all(
aioclient_mock: AiohttpClientMocker,
supervisor_is_connected: AsyncMock,
resolution_info: AsyncMock,
addon_info: AsyncMock,
) -> None:
"""Mock all setup requests."""
aioclient_mock.post("http://127.0.0.1/homeassistant/options", json={"result": "ok"})
aioclient_mock.post("http://127.0.0.1/supervisor/options", json={"result": "ok"})
aioclient_mock.get(
"http://127.0.0.1/info",
json={
"result": "ok",
"data": {"supervisor": "222", "homeassistant": "0.110.0", "hassos": None},
},
)
aioclient_mock.get(
"http://127.0.0.1/host/info",
json={
"result": "ok",
"data": {
"result": "ok",
"data": {
"chassis": "vm",
"operating_system": "Debian GNU/Linux 10 (buster)",
"kernel": "4.19.0-6-amd64",
},
},
},
)
aioclient_mock.get(
"http://127.0.0.1/core/info",
json={"result": "ok", "data": {"version_latest": "1.0.0", "version": "1.0.0"}},
)
aioclient_mock.get(
"http://127.0.0.1/os/info",
json={"result": "ok", "data": {"version_latest": "1.0.0"}},
)
aioclient_mock.get(
"http://127.0.0.1/supervisor/info",
json={
"result": "ok",
"data": {
"version": "1.0.0",
"version_latest": "1.0.0",
"auto_update": True,
"addons": [
{
"name": "test",
"state": "started",
"slug": "test",
"installed": True,
"update_available": True,
"icon": False,
"version": "2.0.0",
"version_latest": "2.0.1",
"repository": "core",
"url": "https://github.com/home-assistant/addons/test",
},
],
},
},
)
aioclient_mock.get(
"http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}}
)
aioclient_mock.get(
"http://127.0.0.1/network/info",
json={
"result": "ok",
"data": {
"host_internet": True,
"supervisor_internet": True,
},
},
)
@pytest.mark.usefixtures("hassio_env")
@pytest.mark.parametrize(
"storage_data",
[
{},
{
"hassio": {
"data": {
"hassio_user": "00112233445566778899aabbccddeeff",
"update_config": {
"add_on_backup_before_update": False,
"add_on_backup_retain_copies": 1,
"core_backup_before_update": False,
},
},
"key": "hassio",
"minor_version": 1,
"version": 1,
}
},
{
"hassio": {
"data": {
"hassio_user": "00112233445566778899aabbccddeeff",
"update_config": {
"add_on_backup_before_update": True,
"add_on_backup_retain_copies": 2,
"core_backup_before_update": True,
},
},
"key": "hassio",
"minor_version": 1,
"version": 1,
}
},
],
)
async def test_load_config_store(
hass: HomeAssistant,
hass_ws_client: WebSocketGenerator,
supervisor_client: AsyncMock,
hass_storage: dict[str, Any],
storage_data: dict[str, dict[str, Any]],
snapshot: SnapshotAssertion,
) -> None:
"""Test loading the config store."""
hass_storage.update(storage_data)
user = MockUser(id="00112233445566778899aabbccddeeff", system_generated=True)
user.add_to_hass(hass)
await hass.auth.async_create_refresh_token(user)
await hass.auth.async_update_user(user, group_ids=[GROUP_ID_ADMIN])
with (
patch("homeassistant.components.hassio.config.STORE_DELAY_SAVE", 0),
patch("uuid.uuid4", return_value=UUID(bytes=b"very_very_random", version=4)),
):
assert await async_setup_component(hass, "hassio", {})
await hass.async_block_till_done()
await hass.async_block_till_done()
assert hass.data[DATA_CONFIG_STORE].data.to_dict() == snapshot
@pytest.mark.usefixtures("hassio_env")
async def test_save_config_store(
hass: HomeAssistant,
hass_ws_client: WebSocketGenerator,
supervisor_client: AsyncMock,
hass_storage: dict[str, Any],
snapshot: SnapshotAssertion,
) -> None:
"""Test saving the config store."""
with (
patch("homeassistant.components.hassio.config.STORE_DELAY_SAVE", 0),
patch("uuid.uuid4", return_value=UUID(bytes=b"very_very_random", version=4)),
):
assert await async_setup_component(hass, "hassio", {})
await hass.async_block_till_done()
await hass.async_block_till_done()
assert hass_storage[DOMAIN] == snapshot