1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
"""Test Home Assistant supervisor client."""
from ipaddress import IPv4Address
from aioresponses import aioresponses
import pytest
from yarl import URL
from aiohasupervisor import SupervisorClient
from aiohasupervisor.models import (
HomeAssistantOptions,
HomeAssistantRebuildOptions,
HomeAssistantRestartOptions,
HomeAssistantStopOptions,
HomeAssistantUpdateOptions,
)
from . import load_fixture
from .const import SUPERVISOR_URL
async def test_homeassistant_info(
responses: aioresponses, supervisor_client: SupervisorClient
) -> None:
"""Test Home Assistant info API."""
responses.get(
f"{SUPERVISOR_URL}/core/info",
status=200,
body=load_fixture("homeassistant_info.json"),
)
info = await supervisor_client.homeassistant.info()
assert info.version == "2024.9.0"
assert info.update_available is False
assert info.arch == "aarch64"
assert info.ssl is False
assert info.port == 8123
assert info.audio_input is None
assert info.audio_output is None
assert info.ip_address == IPv4Address("172.30.32.1")
async def test_homeassistant_stats(
responses: aioresponses, supervisor_client: SupervisorClient
) -> None:
"""Test Home Assistant stats API."""
responses.get(
f"{SUPERVISOR_URL}/core/stats",
status=200,
body=load_fixture("homeassistant_stats.json"),
)
stats = await supervisor_client.homeassistant.stats()
assert stats.cpu_percent == 0.01
assert stats.memory_usage == 678883328
assert stats.memory_percent == 17.41
async def test_homeassistant_options(
responses: aioresponses, supervisor_client: SupervisorClient
) -> None:
"""Test Home Assistant options API."""
responses.post(f"{SUPERVISOR_URL}/core/options", status=200)
assert (
await supervisor_client.homeassistant.set_options(
HomeAssistantOptions(watchdog=False, backups_exclude_database=True)
)
is None
)
assert responses.requests.keys() == {
("POST", URL(f"{SUPERVISOR_URL}/core/options"))
}
@pytest.mark.parametrize("options", [None, HomeAssistantUpdateOptions(backup=False)])
async def test_homeassistant_update(
responses: aioresponses,
supervisor_client: SupervisorClient,
options: HomeAssistantUpdateOptions | None,
) -> None:
"""Test Home Assistant update API."""
responses.post(f"{SUPERVISOR_URL}/core/update", status=200)
assert await supervisor_client.homeassistant.update(options) is None
assert responses.requests.keys() == {("POST", URL(f"{SUPERVISOR_URL}/core/update"))}
@pytest.mark.parametrize("options", [None, HomeAssistantRestartOptions(safe_mode=True)])
async def test_homeassistant_restart(
responses: aioresponses,
supervisor_client: SupervisorClient,
options: HomeAssistantRestartOptions | None,
) -> None:
"""Test Home Assistant restart API."""
responses.post(f"{SUPERVISOR_URL}/core/restart", status=200)
assert await supervisor_client.homeassistant.restart(options) is None
assert responses.requests.keys() == {
("POST", URL(f"{SUPERVISOR_URL}/core/restart"))
}
@pytest.mark.parametrize("options", [None, HomeAssistantStopOptions(force=True)])
async def test_homeassistant_stop(
responses: aioresponses,
supervisor_client: SupervisorClient,
options: HomeAssistantStopOptions | None,
) -> None:
"""Test Home Assistant stop API."""
responses.post(f"{SUPERVISOR_URL}/core/stop", status=200)
assert await supervisor_client.homeassistant.stop(options) is None
assert responses.requests.keys() == {("POST", URL(f"{SUPERVISOR_URL}/core/stop"))}
async def test_homeassistant_start(
responses: aioresponses, supervisor_client: SupervisorClient
) -> None:
"""Test Home Assistant start API."""
responses.post(f"{SUPERVISOR_URL}/core/start", status=200)
assert await supervisor_client.homeassistant.start() is None
assert responses.requests.keys() == {("POST", URL(f"{SUPERVISOR_URL}/core/start"))}
async def test_homeassistant_check_config(
responses: aioresponses, supervisor_client: SupervisorClient
) -> None:
"""Test Home Assistant check config API."""
responses.post(f"{SUPERVISOR_URL}/core/check", status=200)
assert await supervisor_client.homeassistant.check_config() is None
assert responses.requests.keys() == {("POST", URL(f"{SUPERVISOR_URL}/core/check"))}
@pytest.mark.parametrize("options", [None, HomeAssistantRebuildOptions(safe_mode=True)])
async def test_homeassistant_rebuild(
responses: aioresponses,
supervisor_client: SupervisorClient,
options: HomeAssistantRebuildOptions | None,
) -> None:
"""Test Home Assistant rebuild API."""
responses.post(f"{SUPERVISOR_URL}/core/rebuild", status=200)
assert await supervisor_client.homeassistant.rebuild(options) is None
assert responses.requests.keys() == {
("POST", URL(f"{SUPERVISOR_URL}/core/rebuild"))
}
|