|
2 | 2 |
|
3 | 3 | import asyncio |
4 | 4 | import logging |
| 5 | +from unittest import mock |
5 | 6 |
|
6 | 7 | import pytest |
| 8 | +import zigpy.application |
7 | 9 | import zigpy.config |
8 | 10 | import zigpy.device |
9 | | -from zigpy.types import EUI64 |
| 11 | +from zigpy.types import EUI64, Channels |
10 | 12 | import zigpy.zdo.types as zdo_t |
11 | 13 |
|
12 | 14 | from zigpy_deconz import types as t |
@@ -110,28 +112,32 @@ def addr_nwk_and_ieee(nwk, ieee): |
110 | 112 | return addr |
111 | 113 |
|
112 | 114 |
|
| 115 | +@patch("zigpy_deconz.zigbee.application.CHANGE_NETWORK_WAIT", 0.001) |
113 | 116 | @pytest.mark.parametrize( |
114 | | - "proto_ver, nwk_state, error", |
| 117 | + "proto_ver, target_state, returned_state", |
115 | 118 | [ |
116 | | - (0x0107, deconz_api.NetworkState.CONNECTED, None), |
117 | | - (0x0106, deconz_api.NetworkState.CONNECTED, None), |
118 | | - (0x0107, deconz_api.NetworkState.OFFLINE, None), |
119 | | - (0x0107, deconz_api.NetworkState.OFFLINE, asyncio.TimeoutError()), |
| 119 | + (0x0107, deconz_api.NetworkState.CONNECTED, deconz_api.NetworkState.CONNECTED), |
| 120 | + (0x0106, deconz_api.NetworkState.CONNECTED, deconz_api.NetworkState.CONNECTED), |
| 121 | + (0x0107, deconz_api.NetworkState.OFFLINE, deconz_api.NetworkState.CONNECTED), |
| 122 | + (0x0107, deconz_api.NetworkState.CONNECTED, deconz_api.NetworkState.OFFLINE), |
120 | 123 | ], |
121 | 124 | ) |
122 | | -async def test_start_network(app, proto_ver, nwk_state, error): |
| 125 | +async def test_start_network(app, proto_ver, target_state, returned_state): |
123 | 126 | app.load_network_info = AsyncMock() |
124 | 127 | app.restore_neighbours = AsyncMock() |
125 | 128 | app.add_endpoint = AsyncMock() |
126 | | - app._change_network_state = AsyncMock(side_effect=error) |
127 | 129 |
|
128 | 130 | app._api.device_state = AsyncMock( |
129 | | - return_value=(deconz_api.DeviceState(nwk_state), 0, 0) |
| 131 | + return_value=(deconz_api.DeviceState(returned_state), 0, 0) |
130 | 132 | ) |
| 133 | + |
131 | 134 | app._api._proto_ver = proto_ver |
132 | 135 | app._api.protocol_version = proto_ver |
133 | 136 |
|
134 | | - if nwk_state != deconz_api.NetworkState.CONNECTED and error is not None: |
| 137 | + if ( |
| 138 | + target_state == deconz_api.NetworkState.CONNECTED |
| 139 | + and returned_state != deconz_api.NetworkState.CONNECTED |
| 140 | + ): |
135 | 141 | with pytest.raises(zigpy.exceptions.FormationFailure): |
136 | 142 | await app.start_network() |
137 | 143 |
|
@@ -569,3 +575,16 @@ async def test_reset_network_info(app): |
569 | 575 | await app.reset_network_info() |
570 | 576 |
|
571 | 577 | app.form_network.assert_called_once() |
| 578 | + |
| 579 | + |
| 580 | +async def test_energy_scan(app): |
| 581 | + with mock.patch.object( |
| 582 | + zigpy.application.ControllerApplication, |
| 583 | + "energy_scan", |
| 584 | + return_value={c: c for c in Channels.ALL_CHANNELS}, |
| 585 | + ): |
| 586 | + results = await app.energy_scan( |
| 587 | + channels=Channels.ALL_CHANNELS, duration_exp=0, count=1 |
| 588 | + ) |
| 589 | + |
| 590 | + assert results == {c: c * 3 for c in Channels.ALL_CHANNELS} |
0 commit comments