44from asynctest import CoroutineMock , mock
55import pytest
66import serial
7+ import zigpy .config
78
89from zigpy_deconz import api as deconz_api , types as t , uart
910import zigpy_deconz .exception
11+ import zigpy_deconz .zigbee .application
12+
13+ DEVICE_CONFIG = {zigpy .config .CONF_DEVICE_PATH : "/dev/null" }
1014
1115
1216@pytest .fixture
1317def api ():
14- api = deconz_api .Deconz ()
18+ controller = mock .MagicMock (
19+ spec_set = zigpy_deconz .zigbee .application .ControllerApplication
20+ )
21+ api = deconz_api .Deconz (controller , {zigpy .config .CONF_DEVICE_PATH : "/dev/null" })
1522 api ._uart = mock .MagicMock ()
1623 return api
1724
1825
19- def test_set_application (api ):
20- api .set_application (mock .sentinel .app )
21- assert api ._app == mock .sentinel .app
22-
23-
2426@pytest .mark .asyncio
25- async def test_connect (monkeypatch ):
26- api = deconz_api .Deconz ()
27- dev = mock .MagicMock ()
28- monkeypatch .setattr (
29- uart , "connect" , mock .MagicMock (side_effect = asyncio .coroutine (mock .MagicMock ()))
27+ async def test_connect ():
28+ controller = mock .MagicMock (
29+ spec_set = zigpy_deconz .zigbee .application .ControllerApplication
3030 )
31- await api .connect (dev , 115200 )
31+ api = deconz_api .Deconz (controller , {zigpy .config .CONF_DEVICE_PATH : "/dev/null" })
32+
33+ with mock .patch .object (uart , "connect" , new = CoroutineMock ()) as conn_mck :
34+ await api .connect ()
35+ assert conn_mck .call_count == 1
36+ assert conn_mck .await_count == 1
37+ assert api ._uart == conn_mck .return_value
3238
3339
3440def test_close (api ):
@@ -437,14 +443,13 @@ def test_device_state_network_state(data, network_state):
437443
438444@pytest .mark .asyncio
439445async def test_reconnect_multiple_disconnects (monkeypatch , caplog ):
440- api = deconz_api .Deconz ()
441- dev = mock .sentinel .uart
446+ api = deconz_api .Deconz (None , DEVICE_CONFIG )
442447 connect_mock = CoroutineMock ()
443448 connect_mock .return_value = asyncio .Future ()
444449 connect_mock .return_value .set_result (True )
445450 monkeypatch .setattr (uart , "connect" , connect_mock )
446451
447- await api .connect (dev , 115200 )
452+ await api .connect ()
448453
449454 caplog .set_level (logging .DEBUG )
450455 connected = asyncio .Future ()
@@ -463,14 +468,13 @@ async def test_reconnect_multiple_disconnects(monkeypatch, caplog):
463468
464469@pytest .mark .asyncio
465470async def test_reconnect_multiple_attempts (monkeypatch , caplog ):
466- api = deconz_api .Deconz ()
467- dev = mock .sentinel .uart
471+ api = deconz_api .Deconz (None , DEVICE_CONFIG )
468472 connect_mock = CoroutineMock ()
469473 connect_mock .return_value = asyncio .Future ()
470474 connect_mock .return_value .set_result (True )
471475 monkeypatch .setattr (uart , "connect" , connect_mock )
472476
473- await api .connect (dev , 115200 )
477+ await api .connect ()
474478
475479 caplog .set_level (logging .DEBUG )
476480 connected = asyncio .Future ()
@@ -492,22 +496,22 @@ async def test_reconnect_multiple_attempts(monkeypatch, caplog):
492496async def test_probe_success (mock_connect , mock_device_state ):
493497 """Test device probing."""
494498
495- res = await deconz_api .Deconz .probe (mock . sentinel . uart , mock . sentinel . baud )
499+ res = await deconz_api .Deconz .probe (DEVICE_CONFIG )
496500 assert res is True
497501 assert mock_connect .call_count == 1
498502 assert mock_connect .await_count == 1
499- assert mock_connect .call_args [0 ][0 ] is mock . sentinel . uart
503+ assert mock_connect .call_args [0 ][0 ] is DEVICE_CONFIG
500504 assert mock_device_state .call_count == 1
501505 assert mock_connect .return_value .close .call_count == 1
502506
503507 mock_connect .reset_mock ()
504508 mock_device_state .reset_mock ()
505509 mock_connect .reset_mock ()
506- res = await deconz_api .Deconz .probe (mock . sentinel . uart , mock . sentinel . baud )
510+ res = await deconz_api .Deconz .probe (DEVICE_CONFIG )
507511 assert res is True
508512 assert mock_connect .call_count == 1
509513 assert mock_connect .await_count == 1
510- assert mock_connect .call_args [0 ][0 ] is mock . sentinel . uart
514+ assert mock_connect .call_args [0 ][0 ] is DEVICE_CONFIG
511515 assert mock_device_state .call_count == 1
512516 assert mock_connect .return_value .close .call_count == 1
513517
@@ -525,10 +529,10 @@ async def test_probe_fail(mock_connect, mock_device_state, exception):
525529 mock_device_state .side_effect = exception
526530 mock_device_state .reset_mock ()
527531 mock_connect .reset_mock ()
528- res = await deconz_api .Deconz .probe (mock . sentinel . uart , mock . sentinel . baud )
532+ res = await deconz_api .Deconz .probe (DEVICE_CONFIG )
529533 assert res is False
530534 assert mock_connect .call_count == 1
531535 assert mock_connect .await_count == 1
532- assert mock_connect .call_args [0 ][0 ] is mock . sentinel . uart
536+ assert mock_connect .call_args [0 ][0 ] is DEVICE_CONFIG
533537 assert mock_device_state .call_count == 1
534538 assert mock_connect .return_value .close .call_count == 1
0 commit comments