|
3 | 3 | from collections.abc import AsyncGenerator |
4 | 4 | from queue import Queue |
5 | 5 | from typing import Any |
6 | | -from unittest.mock import patch |
| 6 | +from unittest.mock import AsyncMock, MagicMock, patch |
7 | 7 |
|
8 | 8 | import paho.mqtt.client as mqtt |
9 | 9 | import pytest |
@@ -307,3 +307,38 @@ async def test_future_timeout( |
307 | 307 | with patch("roborock.roborock_future.asyncio.timeout", side_effect=asyncio.TimeoutError): |
308 | 308 | data = await connected_a01_mqtt_client.update_values([RoborockZeoProtocol.STATE]) |
309 | 309 | assert data.get(RoborockZeoProtocol.STATE) is None |
| 310 | + |
| 311 | + |
| 312 | +async def test_send_decoded_command_handles_stringified_query() -> None: |
| 313 | + """Test that send_decoded_command handles ID_QUERY as a stringified list.""" |
| 314 | + from roborock.devices.a01_channel import send_decoded_command |
| 315 | + from roborock.devices.mqtt_channel import MqttChannel |
| 316 | + from roborock.roborock_message import RoborockDyadDataProtocol, RoborockMessage, RoborockMessageProtocol |
| 317 | + |
| 318 | + channel = MagicMock(spec=MqttChannel) |
| 319 | + channel.publish = AsyncMock() |
| 320 | + |
| 321 | + captured_callback = None |
| 322 | + |
| 323 | + async def mock_subscribe(callback): |
| 324 | + nonlocal captured_callback |
| 325 | + captured_callback = callback |
| 326 | + return lambda: None |
| 327 | + |
| 328 | + channel.subscribe = AsyncMock(side_effect=mock_subscribe) |
| 329 | + |
| 330 | + protocol_id = 101 |
| 331 | + params = {RoborockDyadDataProtocol.ID_QUERY: str([protocol_id])} |
| 332 | + |
| 333 | + task = asyncio.create_task(send_decoded_command(channel, params)) |
| 334 | + await asyncio.sleep(0) |
| 335 | + |
| 336 | + response_data = {"dps": {str(protocol_id): 123}} |
| 337 | + payload = pad(json.dumps(response_data).encode("utf-8"), AES.block_size) |
| 338 | + message = RoborockMessage(protocol=RoborockMessageProtocol.RPC_RESPONSE, payload=payload) |
| 339 | + |
| 340 | + if captured_callback: |
| 341 | + captured_callback(message) |
| 342 | + |
| 343 | + result = await task |
| 344 | + assert result == {protocol_id: 123} |
0 commit comments