Fix unit tests

This commit is contained in:
puddly
2025-01-27 13:00:02 -05:00
parent 4609f116d8
commit c4dce2096c
2 changed files with 91 additions and 100 deletions

View File

@@ -1,17 +1,13 @@
"""Test hardware utilities.""" """Test hardware utilities."""
import sys
from unittest.mock import AsyncMock, patch from unittest.mock import AsyncMock, patch
import pytest
from homeassistant.components.hassio import AddonError, AddonInfo, AddonState 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, OwningAddon,
OwningIntegration, OwningIntegration,
get_zha_firmware_info,
guess_firmware_info, guess_firmware_info,
) )
from homeassistant.config_entries import ConfigEntryState from homeassistant.config_entries import ConfigEntryState
@@ -108,11 +104,11 @@ async def test_guess_firmware_info_integrations(hass: HomeAssistant) -> None:
with ( with (
patch( patch(
"homeassistant.components.homeassistant_hardware.util.get_zha_firmware_info", "homeassistant.components.zha.homeassistant_hardware.get_firmware_info",
return_value=zha_firmware_info, return_value=zha_firmware_info,
), ),
patch( patch(
"homeassistant.components.homeassistant_hardware.util.get_otbr_firmware_info", "homeassistant.components.otbr.homeassistant_hardware.get_firmware_info",
side_effect=lambda _, config_entry: { side_effect=lambda _, config_entry: {
otbr1: otbr_firmware_info1, otbr1: otbr_firmware_info1,
otbr2: otbr_firmware_info2, otbr2: otbr_firmware_info2,
@@ -238,97 +234,3 @@ async def test_firmware_info(hass: HomeAssistant) -> None:
) )
assert (await firmware_info2.is_running(hass)) is False assert (await firmware_info2.is_running(hass)) is False
async def test_get_zha_firmware_info_normal(hass: HomeAssistant) -> None:
"""Test `get_zha_firmware_info`."""
zha = MockConfigEntry(
domain="zha",
unique_id="some_unique_id",
data={
"device": {
"path": "/dev/ttyUSB1",
"baudrate": 115200,
"flow_control": None,
},
"radio_type": "ezsp",
},
version=4,
)
zha.add_to_hass(hass)
zha.mock_state(hass, ConfigEntryState.LOADED)
# With ZHA running
with patch(
"homeassistant.components.zha.helpers.get_zha_gateway"
) as mock_get_zha_gateway:
mock_get_zha_gateway.return_value.state.node_info.version = "1.2.3.4"
fw_info_running = await get_zha_firmware_info(hass, zha)
assert fw_info_running == FirmwareInfo(
device="/dev/ttyUSB1",
firmware_type=ApplicationType.EZSP,
firmware_version="1.2.3.4",
source="zha",
owners=[OwningIntegration(config_entry_id=zha.entry_id)],
)
assert await fw_info_running.is_running(hass) is True
# With ZHA not running
zha.mock_state(hass, ConfigEntryState.NOT_LOADED)
fw_info_not_running = await get_zha_firmware_info(hass, zha)
assert fw_info_not_running == FirmwareInfo(
device="/dev/ttyUSB1",
firmware_type=ApplicationType.EZSP,
firmware_version=None,
source="zha",
owners=[OwningIntegration(config_entry_id=zha.entry_id)],
)
assert await fw_info_not_running.is_running(hass) is False
@pytest.mark.parametrize(
"data",
[
# Missing data
{},
# Bad radio type
{"device": {"path": "/dev/ttyUSB1"}, "radio_type": "znp"},
],
)
async def test_get_zha_firmware_info_errors(
hass: HomeAssistant, data: dict[str, str | int | None]
) -> None:
"""Test `get_zha_firmware_info` with config entry data format errors."""
zha = MockConfigEntry(
domain="zha",
unique_id="some_unique_id",
data=data,
version=4,
)
zha.add_to_hass(hass)
assert (await get_zha_firmware_info(hass, zha)) is None
async def test_get_zha_firmware_info_stale(hass: HomeAssistant) -> None:
"""Test `get_zha_firmware_info` with a stale config entry."""
zha = MockConfigEntry(
domain="zha",
unique_id="some_unique_id",
data={
"device": {
"path": "/dev/ttyUSB1",
"baudrate": 115200,
"flow_control": None,
},
"radio_type": "ezsp",
},
version=4,
)
zha.add_to_hass(hass)
with patch.dict(sys.modules, {"homeassistant.components.zha.helpers": None}):
assert (await get_zha_firmware_info(hass, zha)) is None

View File

@@ -0,0 +1,89 @@
"""Test Home Assistant Hardware platform for ZHA."""
from unittest.mock import patch
import pytest
from homeassistant.components.homeassistant_hardware.util import (
ApplicationType,
FirmwareInfo,
OwningIntegration,
)
from homeassistant.components.zha.homeassistant_hardware import get_firmware_info
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry
async def test_get_firmware_info_normal(hass: HomeAssistant) -> None:
"""Test `get_firmware_info`."""
zha = MockConfigEntry(
domain="zha",
unique_id="some_unique_id",
data={
"device": {
"path": "/dev/ttyUSB1",
"baudrate": 115200,
"flow_control": None,
},
"radio_type": "ezsp",
},
version=4,
)
zha.add_to_hass(hass)
zha.mock_state(hass, ConfigEntryState.LOADED)
# With ZHA running
with patch(
"homeassistant.components.zha.homeassistant_hardware.get_zha_gateway"
) as mock_get_zha_gateway:
mock_get_zha_gateway.return_value.state.node_info.version = "1.2.3.4"
fw_info_running = await get_firmware_info(hass, zha)
assert fw_info_running == FirmwareInfo(
device="/dev/ttyUSB1",
firmware_type=ApplicationType.EZSP,
firmware_version="1.2.3.4",
source="zha",
owners=[OwningIntegration(config_entry_id=zha.entry_id)],
)
assert await fw_info_running.is_running(hass) is True
# With ZHA not running
zha.mock_state(hass, ConfigEntryState.NOT_LOADED)
fw_info_not_running = await get_firmware_info(hass, zha)
assert fw_info_not_running == FirmwareInfo(
device="/dev/ttyUSB1",
firmware_type=ApplicationType.EZSP,
firmware_version=None,
source="zha",
owners=[OwningIntegration(config_entry_id=zha.entry_id)],
)
assert await fw_info_not_running.is_running(hass) is False
@pytest.mark.parametrize(
"data",
[
# Missing data
{},
# Bad radio type
{"device": {"path": "/dev/ttyUSB1"}, "radio_type": "znp"},
],
)
async def test_get_firmware_info_errors(
hass: HomeAssistant, data: dict[str, str | int | None]
) -> None:
"""Test `get_firmware_info` with config entry data format errors."""
zha = MockConfigEntry(
domain="zha",
unique_id="some_unique_id",
data=data,
version=4,
)
zha.add_to_hass(hass)
assert (await get_firmware_info(hass, zha)) is None