mirror of
https://github.com/home-assistant/core.git
synced 2025-08-03 20:55:10 +02:00
Fix unit tests
This commit is contained in:
@@ -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
|
|
||||||
|
89
tests/components/zha/test_homeassistant_hardware.py
Normal file
89
tests/components/zha/test_homeassistant_hardware.py
Normal 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
|
Reference in New Issue
Block a user