Cleanup redundant fixtures and move all other hassio addon fixtures to be shared (#124437)

This commit is contained in:
Jan Bouwhuis 2024-08-22 20:58:05 +02:00 committed by GitHub
parent 6e5e96b047
commit 51dba1eec3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 124 additions and 152 deletions

View file

@ -14,6 +14,8 @@ from homeassistant.const import STATE_OFF, STATE_ON
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
if TYPE_CHECKING: if TYPE_CHECKING:
from homeassistant.components.hassio.addon_manager import AddonManager
from .conversation import MockAgent from .conversation import MockAgent
from .device_tracker.common import MockScanner from .device_tracker.common import MockScanner
from .light.common import MockLight from .light.common import MockLight
@ -182,6 +184,15 @@ def mock_legacy_device_tracker_setup() -> Callable[[HomeAssistant, MockScanner],
return mock_legacy_device_tracker_setup return mock_legacy_device_tracker_setup
@pytest.fixture(name="addon_manager")
def addon_manager_fixture(hass: HomeAssistant) -> AddonManager:
"""Return an AddonManager instance."""
# pylint: disable-next=import-outside-toplevel
from .hassio.common import mock_addon_manager
return mock_addon_manager(hass)
@pytest.fixture(name="discovery_info") @pytest.fixture(name="discovery_info")
def discovery_info_fixture() -> Any: def discovery_info_fixture() -> Any:
"""Return the discovery info from the supervisor.""" """Return the discovery info from the supervisor."""
@ -269,3 +280,57 @@ def start_addon_fixture() -> Generator[AsyncMock]:
from .hassio.common import mock_start_addon from .hassio.common import mock_start_addon
yield from mock_start_addon() yield from mock_start_addon()
@pytest.fixture(name="restart_addon")
def restart_addon_fixture() -> Generator[AsyncMock]:
"""Mock restart add-on."""
# pylint: disable-next=import-outside-toplevel
from .hassio.common import mock_restart_addon
yield from mock_restart_addon()
@pytest.fixture(name="stop_addon")
def stop_addon_fixture() -> Generator[AsyncMock]:
"""Mock stop add-on."""
# pylint: disable-next=import-outside-toplevel
from .hassio.common import mock_stop_addon
yield from mock_stop_addon()
@pytest.fixture(name="set_addon_options")
def set_addon_options_fixture() -> Generator[AsyncMock]:
"""Mock set add-on options."""
# pylint: disable-next=import-outside-toplevel
from .hassio.common import mock_set_addon_options
yield from mock_set_addon_options()
@pytest.fixture(name="uninstall_addon")
def uninstall_addon_fixture() -> Generator[AsyncMock]:
"""Mock uninstall add-on."""
# pylint: disable-next=import-outside-toplevel
from .hassio.common import mock_uninstall_addon
yield from mock_uninstall_addon()
@pytest.fixture(name="create_backup")
def create_backup_fixture() -> Generator[AsyncMock]:
"""Mock create backup."""
# pylint: disable-next=import-outside-toplevel
from .hassio.common import mock_create_backup
yield from mock_create_backup()
@pytest.fixture(name="update_addon")
def update_addon_fixture() -> Generator[AsyncMock]:
"""Mock update add-on."""
# pylint: disable-next=import-outside-toplevel
from .hassio.common import mock_update_addon
yield from mock_update_addon()

View file

@ -3,11 +3,20 @@
from __future__ import annotations from __future__ import annotations
from collections.abc import Generator from collections.abc import Generator
import logging
from typing import Any from typing import Any
from unittest.mock import DEFAULT, AsyncMock, patch from unittest.mock import DEFAULT, AsyncMock, patch
from homeassistant.components.hassio.addon_manager import AddonManager
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
LOGGER = logging.getLogger(__name__)
def mock_addon_manager(hass: HomeAssistant) -> AddonManager:
"""Return an AddonManager instance."""
return AddonManager(hass, LOGGER, "Test", "test_addon")
def mock_discovery_info() -> Any: def mock_discovery_info() -> Any:
"""Return the discovery info from the supervisor.""" """Return the discovery info from the supervisor."""
@ -72,7 +81,7 @@ def mock_addon_installed(
"version": "1.0.0", "version": "1.0.0",
} }
addon_info.return_value["available"] = True addon_info.return_value["available"] = True
addon_info.return_value["hostname"] = "core-matter-server" addon_info.return_value["hostname"] = "core-test-addon"
addon_info.return_value["state"] = "stopped" addon_info.return_value["state"] = "stopped"
addon_info.return_value["version"] = "1.0.0" addon_info.return_value["version"] = "1.0.0"
return addon_info return addon_info
@ -123,3 +132,51 @@ def mock_start_addon() -> Generator[AsyncMock]:
"homeassistant.components.hassio.addon_manager.async_start_addon" "homeassistant.components.hassio.addon_manager.async_start_addon"
) as start_addon: ) as start_addon:
yield start_addon yield start_addon
def mock_stop_addon() -> Generator[AsyncMock]:
"""Mock stop add-on."""
with patch(
"homeassistant.components.hassio.addon_manager.async_stop_addon"
) as stop_addon:
yield stop_addon
def mock_restart_addon() -> Generator[AsyncMock]:
"""Mock restart add-on."""
with patch(
"homeassistant.components.hassio.addon_manager.async_restart_addon"
) as restart_addon:
yield restart_addon
def mock_uninstall_addon() -> Generator[AsyncMock]:
"""Mock uninstall add-on."""
with patch(
"homeassistant.components.hassio.addon_manager.async_uninstall_addon"
) as uninstall_addon:
yield uninstall_addon
def mock_set_addon_options() -> Generator[AsyncMock]:
"""Mock set add-on options."""
with patch(
"homeassistant.components.hassio.addon_manager.async_set_addon_options"
) as set_options:
yield set_options
def mock_create_backup() -> Generator[AsyncMock]:
"""Mock create backup."""
with patch(
"homeassistant.components.hassio.addon_manager.async_create_backup"
) as create_backup:
yield create_backup
def mock_update_addon() -> Generator[AsyncMock]:
"""Mock update add-on."""
with patch(
"homeassistant.components.hassio.addon_manager.async_update_addon"
) as update_addon:
yield update_addon

View file

@ -3,10 +3,8 @@
from __future__ import annotations from __future__ import annotations
import asyncio import asyncio
from collections.abc import Generator
import logging
from typing import Any from typing import Any
from unittest.mock import AsyncMock, call, patch from unittest.mock import AsyncMock, call
import pytest import pytest
@ -19,154 +17,6 @@ from homeassistant.components.hassio.addon_manager import (
from homeassistant.components.hassio.handler import HassioAPIError from homeassistant.components.hassio.handler import HassioAPIError
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
LOGGER = logging.getLogger(__name__)
@pytest.fixture(name="addon_manager")
def addon_manager_fixture(hass: HomeAssistant) -> AddonManager:
"""Return an AddonManager instance."""
return AddonManager(hass, LOGGER, "Test", "test_addon")
@pytest.fixture(name="addon_not_installed")
def addon_not_installed_fixture(
addon_store_info: AsyncMock, addon_info: AsyncMock
) -> AsyncMock:
"""Mock add-on not installed."""
addon_store_info.return_value["available"] = True
return addon_info
@pytest.fixture(name="addon_installed")
def mock_addon_installed(
addon_store_info: AsyncMock, addon_info: AsyncMock
) -> AsyncMock:
"""Mock add-on already installed but not running."""
addon_store_info.return_value = {
"available": True,
"installed": "1.0.0",
"state": "stopped",
"version": "1.0.0",
}
addon_info.return_value["available"] = True
addon_info.return_value["hostname"] = "core-test-addon"
addon_info.return_value["state"] = "stopped"
addon_info.return_value["version"] = "1.0.0"
return addon_info
@pytest.fixture(name="get_addon_discovery_info")
def get_addon_discovery_info_fixture() -> Generator[AsyncMock]:
"""Mock get add-on discovery info."""
with patch(
"homeassistant.components.hassio.addon_manager.async_get_addon_discovery_info"
) as get_addon_discovery_info:
yield get_addon_discovery_info
@pytest.fixture(name="addon_store_info")
def addon_store_info_fixture() -> Generator[AsyncMock]:
"""Mock Supervisor add-on store info."""
with patch(
"homeassistant.components.hassio.addon_manager.async_get_addon_store_info"
) as addon_store_info:
addon_store_info.return_value = {
"available": False,
"installed": None,
"state": None,
"version": "1.0.0",
}
yield addon_store_info
@pytest.fixture(name="addon_info")
def addon_info_fixture() -> Generator[AsyncMock]:
"""Mock Supervisor add-on info."""
with patch(
"homeassistant.components.hassio.addon_manager.async_get_addon_info",
) as addon_info:
addon_info.return_value = {
"available": False,
"hostname": None,
"options": {},
"state": None,
"update_available": False,
"version": None,
}
yield addon_info
@pytest.fixture(name="set_addon_options")
def set_addon_options_fixture() -> Generator[AsyncMock]:
"""Mock set add-on options."""
with patch(
"homeassistant.components.hassio.addon_manager.async_set_addon_options"
) as set_options:
yield set_options
@pytest.fixture(name="install_addon")
def install_addon_fixture() -> Generator[AsyncMock]:
"""Mock install add-on."""
with patch(
"homeassistant.components.hassio.addon_manager.async_install_addon"
) as install_addon:
yield install_addon
@pytest.fixture(name="uninstall_addon")
def uninstall_addon_fixture() -> Generator[AsyncMock]:
"""Mock uninstall add-on."""
with patch(
"homeassistant.components.hassio.addon_manager.async_uninstall_addon"
) as uninstall_addon:
yield uninstall_addon
@pytest.fixture(name="start_addon")
def start_addon_fixture() -> Generator[AsyncMock]:
"""Mock start add-on."""
with patch(
"homeassistant.components.hassio.addon_manager.async_start_addon"
) as start_addon:
yield start_addon
@pytest.fixture(name="restart_addon")
def restart_addon_fixture() -> Generator[AsyncMock]:
"""Mock restart add-on."""
with patch(
"homeassistant.components.hassio.addon_manager.async_restart_addon"
) as restart_addon:
yield restart_addon
@pytest.fixture(name="stop_addon")
def stop_addon_fixture() -> Generator[AsyncMock]:
"""Mock stop add-on."""
with patch(
"homeassistant.components.hassio.addon_manager.async_stop_addon"
) as stop_addon:
yield stop_addon
@pytest.fixture(name="create_backup")
def create_backup_fixture() -> Generator[AsyncMock]:
"""Mock create backup."""
with patch(
"homeassistant.components.hassio.addon_manager.async_create_backup"
) as create_backup:
yield create_backup
@pytest.fixture(name="update_addon")
def mock_update_addon() -> Generator[AsyncMock]:
"""Mock update add-on."""
with patch(
"homeassistant.components.hassio.addon_manager.async_update_addon"
) as update_addon:
yield update_addon
async def test_not_installed_raises_exception( async def test_not_installed_raises_exception(
addon_manager: AddonManager, addon_manager: AddonManager,