Skip to content

Commit c9e24a8

Browse files
committed
Remove async magic patch from tests
1 parent 81e2685 commit c9e24a8

File tree

5 files changed

+21
-20
lines changed

5 files changed

+21
-20
lines changed

kasa/smart/smartmodule.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,12 @@ def query(self) -> dict:
136136
"""
137137
return {self.QUERY_GETTER_NAME: None}
138138

139-
def call(self, method, params=None):
139+
async def call(self, method, params=None):
140140
"""Call a method.
141141
142142
Just a helper method.
143143
"""
144-
return self._device._query_helper(method, params)
144+
return await self._device._query_helper(method, params)
145145

146146
@property
147147
def data(self):

kasa/tests/conftest.py

-11
Original file line numberDiff line numberDiff line change
@@ -140,14 +140,3 @@ async def _create_datagram_endpoint(protocol_factory, *_, **__):
140140
side_effect=_create_datagram_endpoint,
141141
):
142142
yield
143-
144-
145-
# allow mocks to be awaited
146-
# https://stackoverflow.com/questions/51394411/python-object-magicmock-cant-be-used-in-await-expression/51399767#51399767
147-
148-
149-
async def async_magic():
150-
pass
151-
152-
153-
MagicMock.__await__ = lambda x: async_magic().__await__()

kasa/tests/test_device.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import pkgutil
88
import sys
99
from contextlib import AbstractContextManager
10-
from unittest.mock import Mock, patch
10+
from unittest.mock import AsyncMock, patch
1111

1212
import pytest
1313

@@ -85,7 +85,7 @@ async def test_create_device_with_timeout():
8585

8686
async def test_create_thin_wrapper():
8787
"""Make sure thin wrapper is created with the correct device type."""
88-
mock = Mock()
88+
mock = AsyncMock()
8989
config = DeviceConfig(
9090
host="test_host",
9191
port_override=1234,
@@ -281,7 +281,7 @@ async def test_device_type_aliases():
281281
"""Test that the device type aliases in Device work."""
282282

283283
def _mock_connect(config, *args, **kwargs):
284-
mock = Mock()
284+
mock = AsyncMock()
285285
mock.config = config
286286
return mock
287287

kasa/tests/test_feature.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import logging
22
import sys
3-
from unittest.mock import patch
3+
from unittest.mock import AsyncMock, patch
44

55
import pytest
66
from pytest_mock import MockerFixture
@@ -94,7 +94,9 @@ def test_feature_value_callable(dev, dummy_feature: Feature):
9494

9595
async def test_feature_setter(dev, mocker, dummy_feature: Feature):
9696
"""Verify that *set_value* calls the defined method."""
97-
mock_set_dummy = mocker.patch.object(dummy_feature.device, "set_dummy", create=True)
97+
mock_set_dummy = mocker.patch.object(
98+
dummy_feature.device, "set_dummy", create=True, new_callable=AsyncMock
99+
)
98100
dummy_feature.attribute_setter = "set_dummy"
99101
await dummy_feature.set_value("dummy value")
100102
mock_set_dummy.assert_called_with("dummy value")
@@ -118,7 +120,9 @@ async def test_feature_action(mocker):
118120
icon="mdi:dummy",
119121
type=Feature.Type.Action,
120122
)
121-
mock_call_action = mocker.patch.object(feat.device, "call_action", create=True)
123+
mock_call_action = mocker.patch.object(
124+
feat.device, "call_action", create=True, new_callable=AsyncMock
125+
)
122126
assert feat.value == "<Action>"
123127
await feat.set_value(1234)
124128
mock_call_action.assert_called()
@@ -129,7 +133,9 @@ async def test_feature_choice_list(dummy_feature, caplog, mocker: MockerFixture)
129133
dummy_feature.type = Feature.Type.Choice
130134
dummy_feature.choices_getter = lambda: ["first", "second"]
131135

132-
mock_setter = mocker.patch.object(dummy_feature.device, "dummysetter", create=True)
136+
mock_setter = mocker.patch.object(
137+
dummy_feature.device, "dummysetter", create=True, new_callable=AsyncMock
138+
)
133139
await dummy_feature.set_value("first")
134140
mock_setter.assert_called_with("first")
135141
mock_setter.reset_mock()

kasa/tests/test_protocol.py

+6
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import struct
1010
import sys
1111
from typing import cast
12+
from unittest.mock import AsyncMock
1213

1314
import pytest
1415

@@ -175,6 +176,7 @@ def aio_mock_writer(_, __):
175176
writer = mocker.patch("asyncio.StreamWriter")
176177
mocker.patch.object(writer, "write", _fail_one_less_than_retry_count)
177178
mocker.patch.object(reader, "readexactly", _mock_read)
179+
mocker.patch.object(writer, "drain", new_callable=AsyncMock)
178180
return reader, writer
179181

180182
config = DeviceConfig("127.0.0.1")
@@ -224,6 +226,7 @@ def aio_mock_writer(_, __):
224226
writer = mocker.patch("asyncio.StreamWriter")
225227
mocker.patch.object(writer, "write", _cancel_first_attempt)
226228
mocker.patch.object(reader, "readexactly", _mock_read)
229+
mocker.patch.object(writer, "drain", new_callable=AsyncMock)
227230
return reader, writer
228231

229232
config = DeviceConfig("127.0.0.1")
@@ -275,6 +278,7 @@ def aio_mock_writer(_, __):
275278
reader = mocker.patch("asyncio.StreamReader")
276279
writer = mocker.patch("asyncio.StreamWriter")
277280
mocker.patch.object(reader, "readexactly", _mock_read)
281+
mocker.patch.object(writer, "drain", new_callable=AsyncMock)
278282
return reader, writer
279283

280284
config = DeviceConfig("127.0.0.1")
@@ -324,6 +328,7 @@ def aio_mock_writer(_, __):
324328
reader = mocker.patch("asyncio.StreamReader")
325329
writer = mocker.patch("asyncio.StreamWriter")
326330
mocker.patch.object(reader, "readexactly", _mock_read)
331+
mocker.patch.object(writer, "drain", new_callable=AsyncMock)
327332
return reader, writer
328333

329334
config = DeviceConfig("127.0.0.1")
@@ -373,6 +378,7 @@ def aio_mock_writer(_, port):
373378
else:
374379
assert port == custom_port
375380
mocker.patch.object(reader, "readexactly", _mock_read)
381+
mocker.patch.object(writer, "drain", new_callable=AsyncMock)
376382
return reader, writer
377383

378384
config = DeviceConfig("127.0.0.1", port_override=custom_port)

0 commit comments

Comments
 (0)