Open a ZHA repair when network settings change (#99482)

This commit is contained in:
puddly 2023-10-09 09:01:05 -04:00 committed by GitHub
parent b9090452de
commit 2e4df6d2f2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 617 additions and 152 deletions

View file

@ -2,7 +2,7 @@
from __future__ import annotations
from typing import TYPE_CHECKING
from unittest.mock import call, patch
from unittest.mock import AsyncMock, MagicMock, call, patch
import pytest
import zigpy.backups
@ -48,21 +48,18 @@ async def test_async_get_network_settings_inactive(
backup.network_info.channel = 20
zigpy_app_controller.backups.backups.append(backup)
with patch(
"bellows.zigbee.application.ControllerApplication.__new__",
return_value=zigpy_app_controller,
), patch.object(
zigpy_app_controller, "_load_db", wraps=zigpy_app_controller._load_db
) as mock_load_db, patch.object(
zigpy_app_controller,
"start_network",
wraps=zigpy_app_controller.start_network,
) as mock_start_network:
controller = AsyncMock()
controller.SCHEMA = zigpy_app_controller.SCHEMA
controller.new = AsyncMock(return_value=zigpy_app_controller)
with patch.dict(
"homeassistant.components.zha.core.const.RadioType._member_map_",
ezsp=MagicMock(controller=controller, description="EZSP"),
):
settings = await api.async_get_network_settings(hass)
assert len(mock_load_db.mock_calls) == 1
assert len(mock_start_network.mock_calls) == 0
assert settings.network_info.channel == 20
assert len(zigpy_app_controller.start_network.mock_calls) == 0
async def test_async_get_network_settings_missing(
@ -78,11 +75,7 @@ async def test_async_get_network_settings_missing(
zigpy_app_controller.state.network_info = zigpy.state.NetworkInfo()
zigpy_app_controller.state.node_info = zigpy.state.NodeInfo()
with patch(
"bellows.zigbee.application.ControllerApplication.__new__",
return_value=zigpy_app_controller,
):
settings = await api.async_get_network_settings(hass)
settings = await api.async_get_network_settings(hass)
assert settings is None
@ -115,12 +108,8 @@ async def test_change_channel(
"""Test changing the channel."""
await setup_zha()
with patch.object(
zigpy_app_controller, "move_network_to_channel", autospec=True
) as mock_move_network_to_channel:
await api.async_change_channel(hass, 20)
assert mock_move_network_to_channel.mock_calls == [call(20)]
await api.async_change_channel(hass, 20)
assert zigpy_app_controller.move_network_to_channel.mock_calls == [call(20)]
async def test_change_channel_auto(
@ -129,16 +118,10 @@ async def test_change_channel_auto(
"""Test changing the channel automatically using an energy scan."""
await setup_zha()
with patch.object(
zigpy_app_controller, "move_network_to_channel", autospec=True
) as mock_move_network_to_channel, patch.object(
zigpy_app_controller,
"energy_scan",
autospec=True,
return_value={c: c for c in range(11, 26 + 1)},
), patch.object(
api, "pick_optimal_channel", autospec=True, return_value=25
):
zigpy_app_controller.energy_scan.side_effect = None
zigpy_app_controller.energy_scan.return_value = {c: c for c in range(11, 26 + 1)}
with patch.object(api, "pick_optimal_channel", autospec=True, return_value=25):
await api.async_change_channel(hass, "auto")
assert mock_move_network_to_channel.mock_calls == [call(25)]
assert zigpy_app_controller.move_network_to_channel.mock_calls == [call(25)]