Unit test get_zha_firmware_info

This commit is contained in:
puddly
2025-01-13 19:32:33 -05:00
parent 088d70b1b9
commit 1310e3dd1f

View File

@@ -1,13 +1,17 @@
"""Test hardware utilities."""
import sys
from unittest.mock import AsyncMock, patch
import pytest
from homeassistant.components.hassio import AddonError, AddonInfo, AddonState
from homeassistant.components.homeassistant_hardware.util import (
ApplicationType,
FirmwareInfo,
OwningAddon,
OwningIntegration,
get_zha_firmware_info,
guess_firmware_info,
)
from homeassistant.config_entries import ConfigEntryState
@@ -234,3 +238,97 @@ async def test_firmware_info(hass: HomeAssistant) -> None:
)
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