Skip to content

Commit

Permalink
addon changelogs to aiohasupervisor
Browse files Browse the repository at this point in the history
  • Loading branch information
mdegat01 committed Oct 15, 2024
1 parent ce5a744 commit efba7c8
Show file tree
Hide file tree
Showing 9 changed files with 103 additions and 178 deletions.
4 changes: 2 additions & 2 deletions homeassistant/components/hassio/coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -511,8 +511,8 @@ async def _update_addon_stats(self, slug: str) -> tuple[str, dict[str, Any] | No
async def _update_addon_changelog(self, slug: str) -> tuple[str, str | None]:
"""Return the changelog for an add-on."""
try:
changelog = await self.hassio.get_addon_changelog(slug)
except HassioAPIError as err:
changelog = await self.hassio.client.store.addon_changelog(slug)
except SupervisorError as err:
_LOGGER.warning("Could not fetch changelog for %s: %s", slug, err)
return (slug, None)
return (slug, changelog)
Expand Down
17 changes: 0 additions & 17 deletions homeassistant/components/hassio/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,14 +292,6 @@ def get_core_stats(self) -> Coroutine:
"""
return self.send_command("/core/stats", method="get")

@api_data
def get_addon_stats(self, addon: str) -> Coroutine:
"""Return stats for an Add-on.
This method returns a coroutine.
"""
return self.send_command(f"/addons/{addon}/stats", method="get")

@api_data
def get_supervisor_stats(self) -> Coroutine:
"""Return stats for the supervisor.
Expand All @@ -308,15 +300,6 @@ def get_supervisor_stats(self) -> Coroutine:
"""
return self.send_command("/supervisor/stats", method="get")

def get_addon_changelog(self, addon: str) -> Coroutine:
"""Return changelog for an Add-on.
This method returns a coroutine.
"""
return self.send_command(
f"/addons/{addon}/changelog", method="get", return_text=True
)

@api_data
def get_ingress_panels(self) -> Coroutine:
"""Return data for Add-on ingress panels.
Expand Down
7 changes: 7 additions & 0 deletions tests/components/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,13 @@ def addon_stats_fixture(supervisor_client: AsyncMock) -> AsyncMock:
return mock_addon_stats(supervisor_client)


@pytest.fixture(name="addon_changelog")
def addon_changelog_fixture(supervisor_client: AsyncMock) -> AsyncMock:
"""Mock addon changelog."""
supervisor_client.store.addon_changelog.return_value = ""
return supervisor_client.store.addon_changelog


@pytest.fixture(name="supervisor_client")
def supervisor_client() -> Generator[AsyncMock]:
"""Mock the supervisor client."""
Expand Down
66 changes: 30 additions & 36 deletions tests/components/hassio/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import re
from unittest.mock import AsyncMock, Mock, patch

from aiohasupervisor.models import AddonState
from aiohasupervisor.models import AddonsStats, AddonState
from aiohttp.test_utils import TestClient
import pytest

Expand Down Expand Up @@ -133,7 +133,9 @@ def all_setup_requests(
aioclient_mock: AiohttpClientMocker,
request: pytest.FixtureRequest,
addon_installed: AsyncMock,
store_info,
store_info: AsyncMock,
addon_changelog: AsyncMock,
addon_stats: AsyncMock,
) -> None:
"""Mock all setup requests."""
include_addons = hasattr(request, "param") and request.param.get(
Expand Down Expand Up @@ -249,8 +251,6 @@ def mock_addon_info(slug: str):

addon_installed.side_effect = mock_addon_info

aioclient_mock.get("http://127.0.0.1/addons/test/changelog", text="")
aioclient_mock.get("http://127.0.0.1/addons/test2/changelog", text="")
aioclient_mock.get(
"http://127.0.0.1/core/stats",
json={
Expand Down Expand Up @@ -283,38 +283,32 @@ def mock_addon_info(slug: str):
},
},
)
aioclient_mock.get(
"http://127.0.0.1/addons/test/stats",
json={
"result": "ok",
"data": {
"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,
},
},
)
aioclient_mock.get(
"http://127.0.0.1/addons/test2/stats",
json={
"result": "ok",
"data": {
"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,
},
},
)

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
aioclient_mock.get(
"http://127.0.0.1/network/info",
json={
Expand Down
26 changes: 7 additions & 19 deletions tests/components/hassio/test_binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,13 @@


@pytest.fixture(autouse=True)
def mock_all(aioclient_mock: AiohttpClientMocker, addon_installed, store_info) -> None:
def mock_all(
aioclient_mock: AiohttpClientMocker,
addon_installed: AsyncMock,
store_info: AsyncMock,
addon_changelog: AsyncMock,
addon_stats: AsyncMock,
) -> None:
"""Mock all setup requests."""
aioclient_mock.post("http://127.0.0.1/homeassistant/options", json={"result": "ok"})
aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={"result": "ok"})
Expand Down Expand Up @@ -100,22 +106,6 @@ def mock_all(aioclient_mock: AiohttpClientMocker, addon_installed, store_info) -
},
},
)
aioclient_mock.get(
"http://127.0.0.1/addons/test/stats",
json={
"result": "ok",
"data": {
"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,
},
},
)
aioclient_mock.get(
"http://127.0.0.1/core/stats",
json={
Expand Down Expand Up @@ -148,8 +138,6 @@ def mock_all(aioclient_mock: AiohttpClientMocker, addon_installed, store_info) -
},
},
)
aioclient_mock.get("http://127.0.0.1/addons/test/changelog", text="")
aioclient_mock.get("http://127.0.0.1/addons/test2/changelog", text="")
aioclient_mock.get(
"http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}}
)
Expand Down
28 changes: 8 additions & 20 deletions tests/components/hassio/test_diagnostics.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Test Supervisor diagnostics."""

import os
from unittest.mock import patch
from unittest.mock import AsyncMock, patch

import pytest

Expand All @@ -18,7 +18,13 @@


@pytest.fixture(autouse=True)
def mock_all(aioclient_mock: AiohttpClientMocker, addon_installed, store_info) -> None:
def mock_all(
aioclient_mock: AiohttpClientMocker,
addon_installed: AsyncMock,
store_info: AsyncMock,
addon_stats: AsyncMock,
addon_changelog: AsyncMock,
) -> None:
"""Mock all setup requests."""
aioclient_mock.post("http://127.0.0.1/homeassistant/options", json={"result": "ok"})
aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={"result": "ok"})
Expand Down Expand Up @@ -103,22 +109,6 @@ def mock_all(aioclient_mock: AiohttpClientMocker, addon_installed, store_info) -
},
},
)
aioclient_mock.get(
"http://127.0.0.1/addons/test/stats",
json={
"result": "ok",
"data": {
"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,
},
},
)
aioclient_mock.get(
"http://127.0.0.1/core/stats",
json={
Expand Down Expand Up @@ -151,8 +141,6 @@ def mock_all(aioclient_mock: AiohttpClientMocker, addon_installed, store_info) -
},
},
)
aioclient_mock.get("http://127.0.0.1/addons/test/changelog", text="")
aioclient_mock.get("http://127.0.0.1/addons/test2/changelog", text="")
aioclient_mock.get(
"http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}}
)
Expand Down
98 changes: 39 additions & 59 deletions tests/components/hassio/test_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from typing import Any
from unittest.mock import AsyncMock, patch

from aiohasupervisor.models import AddonsStats
import pytest
from voluptuous import Invalid

Expand Down Expand Up @@ -52,7 +53,12 @@ def os_info(extra_os_info):

@pytest.fixture(autouse=True)
def mock_all(
aioclient_mock: AiohttpClientMocker, os_info, store_info, addon_info
aioclient_mock: AiohttpClientMocker,
os_info: AsyncMock,
store_info: AsyncMock,
addon_info: AsyncMock,
addon_stats: AsyncMock,
addon_changelog: AsyncMock,
) -> None:
"""Mock all setup requests."""
aioclient_mock.post("http://127.0.0.1/homeassistant/options", json={"result": "ok"})
Expand Down Expand Up @@ -156,64 +162,38 @@ def mock_all(
},
},
)
aioclient_mock.get(
"http://127.0.0.1/addons/test/stats",
json={
"result": "ok",
"data": {
"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,
},
},
)
aioclient_mock.get(
"http://127.0.0.1/addons/test2/stats",
json={
"result": "ok",
"data": {
"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,
},
},
)
aioclient_mock.get(
"http://127.0.0.1/addons/test3/stats",
json={
"result": "ok",
"data": {
"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,
},
},
)
aioclient_mock.get("http://127.0.0.1/addons/test/changelog", text="")
aioclient_mock.get(
"http://127.0.0.1/addons/test/info",
json={"result": "ok", "data": {"auto_update": True}},
)
aioclient_mock.get("http://127.0.0.1/addons/test2/changelog", text="")
aioclient_mock.get(
"http://127.0.0.1/addons/test2/info",
json={"result": "ok", "data": {"auto_update": False}},
)

async def mock_addon_stats(addon: str) -> AddonsStats:
"""Mock addon stats for test and test2."""
if addon in {"test2", "test3"}:
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

def mock_addon_info(slug: str):
addon_info.return_value.auto_update = slug == "test"
return addon_info.return_value

addon_info.side_effect = mock_addon_info
aioclient_mock.get(
"http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}}
)
Expand Down
3 changes: 1 addition & 2 deletions tests/components/hassio/test_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ def mock_all(
addon_installed: AsyncMock,
store_info: AsyncMock,
addon_stats: AsyncMock,
addon_changelog: AsyncMock,
) -> None:
"""Mock all setup requests."""
_install_default_mocks(aioclient_mock)
Expand Down Expand Up @@ -143,8 +144,6 @@ def _install_default_mocks(aioclient_mock: AiohttpClientMocker):
},
},
)
aioclient_mock.get("http://127.0.0.1/addons/test/changelog", text="")
aioclient_mock.get("http://127.0.0.1/addons/test2/changelog", text="")
aioclient_mock.get(
"http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}}
)
Expand Down
Loading

0 comments on commit efba7c8

Please sign in to comment.