mirror of
https://github.com/home-assistant/core.git
synced 2025-08-07 22:55:10 +02:00
Add some tests for ownership
This commit is contained in:
@@ -120,7 +120,11 @@ class OwningIntegration:
|
|||||||
if (entry := hass.config_entries.async_get_entry(self.config_entry_id)) is None:
|
if (entry := hass.config_entries.async_get_entry(self.config_entry_id)) is None:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return entry.state == ConfigEntryState.LOADED
|
return entry.state in (
|
||||||
|
ConfigEntryState.LOADED,
|
||||||
|
ConfigEntryState.SETUP_RETRY,
|
||||||
|
ConfigEntryState.SETUP_IN_PROGRESS,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@dataclass(kw_only=True)
|
@dataclass(kw_only=True)
|
||||||
|
@@ -2,11 +2,15 @@
|
|||||||
|
|
||||||
from unittest.mock import AsyncMock, patch
|
from unittest.mock import AsyncMock, patch
|
||||||
|
|
||||||
|
from homeassistant.components.hassio import AddonError, AddonInfo, AddonState
|
||||||
from homeassistant.components.homeassistant_hardware.util import (
|
from homeassistant.components.homeassistant_hardware.util import (
|
||||||
ApplicationType,
|
ApplicationType,
|
||||||
FirmwareInfo,
|
FirmwareInfo,
|
||||||
|
OwningAddon,
|
||||||
|
OwningIntegration,
|
||||||
guess_firmware_info,
|
guess_firmware_info,
|
||||||
)
|
)
|
||||||
|
from homeassistant.config_entries import ConfigEntryState
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
@@ -127,3 +131,106 @@ async def test_guess_firmware_info_integrations(hass: HomeAssistant) -> None:
|
|||||||
assert (
|
assert (
|
||||||
await guess_firmware_info(hass, "/dev/serial/by-id/device1")
|
await guess_firmware_info(hass, "/dev/serial/by-id/device1")
|
||||||
) == otbr_firmware_info1
|
) == otbr_firmware_info1
|
||||||
|
|
||||||
|
|
||||||
|
async def test_owning_addon(hass: HomeAssistant) -> None:
|
||||||
|
"""Test `OwningAddon`."""
|
||||||
|
|
||||||
|
owning_addon = OwningAddon(slug="some-addon-slug")
|
||||||
|
|
||||||
|
# Explicitly running
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.homeassistant_hardware.util.WaitingAddonManager"
|
||||||
|
) as mock_manager:
|
||||||
|
mock_manager.return_value.async_get_addon_info = AsyncMock(
|
||||||
|
return_value=AddonInfo(
|
||||||
|
available=True,
|
||||||
|
hostname="core_some_addon_slug",
|
||||||
|
options={},
|
||||||
|
state=AddonState.RUNNING,
|
||||||
|
update_available=False,
|
||||||
|
version="1.0.0",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
assert (await owning_addon.is_running(hass)) is True
|
||||||
|
|
||||||
|
# Explicitly not running
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.homeassistant_hardware.util.WaitingAddonManager"
|
||||||
|
) as mock_manager:
|
||||||
|
mock_manager.return_value.async_get_addon_info = AsyncMock(
|
||||||
|
return_value=AddonInfo(
|
||||||
|
available=True,
|
||||||
|
hostname="core_some_addon_slug",
|
||||||
|
options={},
|
||||||
|
state=AddonState.NOT_RUNNING,
|
||||||
|
update_available=False,
|
||||||
|
version="1.0.0",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
assert (await owning_addon.is_running(hass)) is False
|
||||||
|
|
||||||
|
# Failed to get status
|
||||||
|
with patch(
|
||||||
|
"homeassistant.components.homeassistant_hardware.util.WaitingAddonManager"
|
||||||
|
) as mock_manager:
|
||||||
|
mock_manager.return_value.async_get_addon_info = AsyncMock(
|
||||||
|
side_effect=AddonError()
|
||||||
|
)
|
||||||
|
assert (await owning_addon.is_running(hass)) is False
|
||||||
|
|
||||||
|
|
||||||
|
async def test_owning_integration(hass: HomeAssistant) -> None:
|
||||||
|
"""Test `OwningIntegration`."""
|
||||||
|
config_entry = MockConfigEntry(domain="mock_domain", unique_id="some_unique_id")
|
||||||
|
config_entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
owning_integration = OwningIntegration(config_entry_id=config_entry.entry_id)
|
||||||
|
|
||||||
|
# Explicitly running
|
||||||
|
config_entry.mock_state(hass, ConfigEntryState.LOADED)
|
||||||
|
assert (await owning_integration.is_running(hass)) is True
|
||||||
|
|
||||||
|
# Explicitly not running
|
||||||
|
config_entry.mock_state(hass, ConfigEntryState.NOT_LOADED)
|
||||||
|
assert (await owning_integration.is_running(hass)) is False
|
||||||
|
|
||||||
|
# Missing config entry
|
||||||
|
owning_integration2 = OwningIntegration(config_entry_id="some_nonexistenct_id")
|
||||||
|
assert (await owning_integration2.is_running(hass)) is False
|
||||||
|
|
||||||
|
|
||||||
|
async def test_firmware_info(hass: HomeAssistant) -> None:
|
||||||
|
"""Test `FirmwareInfo`."""
|
||||||
|
|
||||||
|
owner1 = AsyncMock()
|
||||||
|
owner2 = AsyncMock()
|
||||||
|
|
||||||
|
firmware_info = FirmwareInfo(
|
||||||
|
device="/dev/ttyUSB1",
|
||||||
|
firmware_type=ApplicationType.EZSP,
|
||||||
|
firmware_version="1.0.0",
|
||||||
|
source="zha",
|
||||||
|
owners=[owner1, owner2],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Both running
|
||||||
|
owner1.is_running.return_value = True
|
||||||
|
owner2.is_running.return_value = True
|
||||||
|
assert (await firmware_info.is_running(hass)) is True
|
||||||
|
|
||||||
|
# Only one running
|
||||||
|
owner1.is_running.return_value = True
|
||||||
|
owner2.is_running.return_value = False
|
||||||
|
assert (await firmware_info.is_running(hass)) is False
|
||||||
|
|
||||||
|
# No owners
|
||||||
|
firmware_info2 = FirmwareInfo(
|
||||||
|
device="/dev/ttyUSB1",
|
||||||
|
firmware_type=ApplicationType.EZSP,
|
||||||
|
firmware_version="1.0.0",
|
||||||
|
source="zha",
|
||||||
|
owners=[],
|
||||||
|
)
|
||||||
|
|
||||||
|
assert (await firmware_info2.is_running(hass)) is False
|
||||||
|
Reference in New Issue
Block a user