Skip to content

Commit cd6525b

Browse files
committed
test: Extract connected client to a fixture
1 parent 564ffa7 commit cd6525b

File tree

2 files changed

+29
-24
lines changed

2 files changed

+29
-24
lines changed

tests/conftest.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import io
22
import logging
3-
import queue
3+
from queue import Queue
44
import re
55
from collections.abc import Callable, Generator
66
from typing import Any
@@ -63,20 +63,22 @@ def handle_socket_send(self, client_request: bytes) -> int:
6363

6464

6565
@pytest.fixture(name="received_requests")
66-
def received_requests_fixture() -> queue.Queue[bytes]:
66+
def received_requests_fixture() -> Queue[bytes]:
6767
"""Fixture that provides access to the received requests."""
68-
return queue.Queue()
68+
return Queue()
6969

7070

7171
@pytest.fixture(name="response_queue")
72-
def response_queue_fixture() -> queue.Queue[bytes]:
72+
def response_queue_fixture() -> Queue[bytes]:
7373
"""Fixture that provides access to the received requests."""
74-
return queue.Queue()
74+
response_queue = Queue()
75+
yield response_queue
76+
assert response_queue.empty(), "Not all fake responses were consumed"
7577

7678

7779
@pytest.fixture(name="request_handler")
7880
def request_handler_fixture(
79-
received_requests: queue.Queue[bytes], response_queue: queue.Queue[bytes]
81+
received_requests: Queue[bytes], response_queue: Queue[bytes]
8082
) -> RequestHandler:
8183
"""Fixture records incoming requests and replies with responses from the queue."""
8284

@@ -85,7 +87,7 @@ def handle_request(client_request: bytes) -> bytes | None:
8587
received_requests.put(client_request)
8688

8789
# Insert a prepared response into the response buffer
88-
if response_queue.qsize() > 0:
90+
if not response_queue.empty():
8991
return response_queue.get()
9092
return None
9193

tests/test_api.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from queue import Queue
33
from typing import Any
44
from unittest.mock import patch
5+
from collections.abc import AsyncGenerator
56

67
import paho.mqtt.client as mqtt
78
import pytest
@@ -145,19 +146,28 @@ async def test_get_prop():
145146
assert props.dock_summary.dust_collection_mode is not None
146147

147148

149+
@pytest.fixture(name="connected_mqtt_client")
150+
async def connected_mqtt_client_fixture(response_queue: Queue, mqtt_client: RoborockMqttClientV1) -> AsyncGenerator[RoborockMqttClientV1, None]:
151+
response_queue.put(mqtt_packet.gen_connack(rc=0, flags=2))
152+
response_queue.put(mqtt_packet.gen_suback(1, 0))
153+
await mqtt_client.async_connect()
154+
yield mqtt_client
155+
if mqtt_client.is_connected():
156+
await mqtt_client.async_disconnect()
157+
158+
148159
async def test_async_connect(
149-
received_requests: Queue, response_queue: Queue, mqtt_client: RoborockMqttClientV1
160+
received_requests: Queue, connected_mqtt_client: RoborockMqttClientV1
150161
) -> None:
151162
"""Test connecting to the MQTT broker."""
152163

153-
response_queue.put(mqtt_packet.gen_connack(rc=0, flags=2))
154-
response_queue.put(mqtt_packet.gen_suback(1, 0))
155-
156-
await mqtt_client.async_connect()
157-
assert mqtt_client.is_connected()
164+
assert connected_mqtt_client.is_connected()
165+
# Connecting again is a no-op
166+
await connected_mqtt_client.async_connect()
167+
assert connected_mqtt_client.is_connected()
158168

159-
await mqtt_client.async_disconnect()
160-
assert not mqtt_client.is_connected()
169+
await connected_mqtt_client.async_disconnect()
170+
assert not connected_mqtt_client.is_connected()
161171

162172
# Broker received a connect and subscribe. Disconnect packet is not
163173
# guaranteed to be captured by the time the async_disconnect returns
@@ -198,15 +208,10 @@ def build_rpc_response(message: dict[str, Any]) -> bytes:
198208
async def test_get_room_mapping(
199209
received_requests: Queue,
200210
response_queue: Queue,
201-
mqtt_client: RoborockMqttClientV1,
211+
connected_mqtt_client: RoborockMqttClientV1,
202212
) -> None:
203213
"""Test sending an arbitrary MQTT message and parsing the response."""
204214

205-
response_queue.put(mqtt_packet.gen_connack(rc=0, flags=2))
206-
response_queue.put(mqtt_packet.gen_suback(1, 0))
207-
await mqtt_client.async_connect()
208-
assert mqtt_client.is_connected()
209-
210215
test_request_id = 5050
211216
message = build_rpc_response(
212217
{
@@ -217,11 +222,9 @@ async def test_get_room_mapping(
217222
response_queue.put(mqtt_packet.gen_publish(MQTT_PUBLISH_TOPIC, payload=message))
218223

219224
with patch("roborock.version_1_apis.roborock_client_v1.get_next_int", return_value=test_request_id):
220-
room_mapping = await mqtt_client.get_room_mapping()
225+
room_mapping = await connected_mqtt_client.get_room_mapping()
221226

222227
assert room_mapping == [
223228
RoomMapping(segment_id=16, iot_id="2362048"),
224229
RoomMapping(segment_id=17, iot_id="2362044"),
225230
]
226-
227-
await mqtt_client.async_disconnect()

0 commit comments

Comments
 (0)