@@ -48,9 +48,7 @@ def device_proto() -> DreameVacuumDeviceProtocol:
4848# ---------------------------------------------------------------------------
4949
5050
51- def _mock_response (
52- status_code : int , text : str , headers : dict | None = None
53- ) -> MagicMock :
51+ def _mock_response (status_code : int , text : str , headers : dict | None = None ) -> MagicMock :
5452 resp = MagicMock ()
5553 resp .status_code = status_code
5654 resp .text = text
@@ -62,9 +60,7 @@ def _make_encrypted_response(ssecurity: str, nonce: str, payload: dict) -> str:
6260 """Return a base64 string that decrypt_rc4(signed_nonce(nonce), text) yields payload JSON."""
6361 import hashlib
6462
65- hash_object = hashlib .sha256 (
66- base64 .b64decode (ssecurity ) + base64 .b64decode (nonce )
67- )
63+ hash_object = hashlib .sha256 (base64 .b64decode (ssecurity ) + base64 .b64decode (nonce ))
6864 signed_nonce = base64 .b64encode (hash_object .digest ()).decode ("utf-8" )
6965 r = ARC4 .new (base64 .b64decode (signed_nonce ))
7066 r .encrypt (bytes (1024 ))
@@ -225,9 +221,7 @@ def test_mihome_generate_signature_deterministic() -> None:
225221 signed_nonce = "tNfoaeifqEL840oNVDy1wWxcSezI23TbtXCTt8FH1Rs="
226222 nonce = "bm9uY2U=" # base64('nonce')
227223 params = {"data" : "testdata" }
228- result = DreameVacuumMiHomeCloudProtocol .generate_signature (
229- url , signed_nonce , nonce , params
230- )
224+ result = DreameVacuumMiHomeCloudProtocol .generate_signature (url , signed_nonce , nonce , params )
231225 assert result == "rUvM5mf+PJ3s7wCocHeSFtCkDB6CjjcoPjDxrOmW350="
232226
233227
@@ -293,17 +287,13 @@ def test_mihome_check_login_auth_err_false(
293287def test_mihome_check_login_invalid_signature_false (
294288 mihome : DreameVacuumMiHomeCloudProtocol ,
295289) -> None :
296- assert (
297- mihome .check_login ({"code" : 0 , "message" : "invalid signature" }) is False
298- )
290+ assert mihome .check_login ({"code" : 0 , "message" : "invalid signature" }) is False
299291
300292
301293def test_mihome_check_login_servicetoken_expired_false (
302294 mihome : DreameVacuumMiHomeCloudProtocol ,
303295) -> None :
304- assert (
305- mihome .check_login ({"code" : 0 , "message" : "SERVICETOKEN_EXPIRED" }) is False
306- )
296+ assert mihome .check_login ({"code" : 0 , "message" : "SERVICETOKEN_EXPIRED" }) is False
307297
308298
309299def test_mihome_check_login_ok_true (
@@ -342,15 +332,11 @@ def test_mihome_request_200_valid_json(
342332) -> None :
343333 """HTTP 200 with properly encrypted response returns parsed dict and _connected=True."""
344334 fixed_nonce = "dGVzdA==" # base64('test')
345- encrypted_text = _make_encrypted_response (
346- mihome ._ssecurity , fixed_nonce , {"result" : 42 }
347- )
335+ encrypted_text = _make_encrypted_response (mihome ._ssecurity , fixed_nonce , {"result" : 42 })
348336 mihome ._session = MagicMock ()
349337 mihome ._session .post .return_value = _mock_response (200 , encrypted_text )
350338
351- with patch .object (
352- DreameVacuumMiHomeCloudProtocol , "generate_nonce" , return_value = fixed_nonce
353- ):
339+ with patch .object (DreameVacuumMiHomeCloudProtocol , "generate_nonce" , return_value = fixed_nonce ):
354340 result = mihome .request ("https://de.api.io.mi.com/app/v2/test" , {"data" : "x" })
355341
356342 assert result == {"result" : 42 }
@@ -397,12 +383,8 @@ def test_mihome_request_timeout_retries(
397383 mihome ._session = MagicMock ()
398384 mihome ._session .post .side_effect = requests .exceptions .Timeout
399385
400- with patch (
401- "custom_components.dreame_vacuum.dreame.protocol.sleep"
402- ) as mock_sleep :
403- result = mihome .request (
404- "https://de.api.io.mi.com/app/v2/test" , {"data" : "x" }, retry_count = 2
405- )
386+ with patch ("custom_components.dreame_vacuum.dreame.protocol.sleep" ) as mock_sleep :
387+ result = mihome .request ("https://de.api.io.mi.com/app/v2/test" , {"data" : "x" }, retry_count = 2 )
406388
407389 assert result is None
408390 assert mihome ._session .post .call_count == 3
@@ -414,9 +396,7 @@ def test_mihome_request_429_raises_rate_limit_error(
414396) -> None :
415397 """HTTP 429 raises RateLimitError with retry_after from header."""
416398 mihome ._session = MagicMock ()
417- mihome ._session .post .return_value = _mock_response (
418- 429 , "" , headers = {"Retry-After" : "45" }
419- )
399+ mihome ._session .post .return_value = _mock_response (429 , "" , headers = {"Retry-After" : "45" })
420400
421401 with pytest .raises (RateLimitError ) as exc_info :
422402 mihome .request ("https://de.api.io.mi.com/app/v2/test" , {"data" : "x" })
@@ -460,12 +440,8 @@ def test_mihome_request_connection_error_retries(
460440 mihome ._session = MagicMock ()
461441 mihome ._session .post .side_effect = requests .exceptions .ConnectionError ("refused" )
462442
463- with patch (
464- "custom_components.dreame_vacuum.dreame.protocol.sleep"
465- ) as mock_sleep :
466- result = mihome .request (
467- "https://de.api.io.mi.com/app/v2/test" , {"data" : "x" }, retry_count = 2
468- )
443+ with patch ("custom_components.dreame_vacuum.dreame.protocol.sleep" ) as mock_sleep :
444+ result = mihome .request ("https://de.api.io.mi.com/app/v2/test" , {"data" : "x" }, retry_count = 2 )
469445
470446 assert result is None
471447 assert mihome ._session .post .call_count == 3
@@ -477,15 +453,11 @@ def test_mihome_request_cookies_include_service_token(
477453) -> None :
478454 """request() sends serviceToken and yetAnotherServiceToken cookies."""
479455 fixed_nonce = "dGVzdA=="
480- encrypted_text = _make_encrypted_response (
481- mihome ._ssecurity , fixed_nonce , {"ok" : 1 }
482- )
456+ encrypted_text = _make_encrypted_response (mihome ._ssecurity , fixed_nonce , {"ok" : 1 })
483457 mihome ._session = MagicMock ()
484458 mihome ._session .post .return_value = _mock_response (200 , encrypted_text )
485459
486- with patch .object (
487- DreameVacuumMiHomeCloudProtocol , "generate_nonce" , return_value = fixed_nonce
488- ):
460+ with patch .object (DreameVacuumMiHomeCloudProtocol , "generate_nonce" , return_value = fixed_nonce ):
489461 mihome .request ("https://de.api.io.mi.com/app/v2/test" , {"data" : "x" })
490462
491463 call_kwargs = mihome ._session .post .call_args
@@ -647,11 +619,11 @@ def test_mihome_request_retry_count_none_normalized(
647619 encrypted_text = _make_encrypted_response (mihome ._ssecurity , fixed_nonce , {"ok" : 1 })
648620 mihome ._session .post .return_value = _mock_response (200 , encrypted_text )
649621
650- with patch .object (
651- DreameVacuumMiHomeCloudProtocol , "generate_nonce" , return_value = fixed_nonce
652- ):
622+ with patch .object (DreameVacuumMiHomeCloudProtocol , "generate_nonce" , return_value = fixed_nonce ):
653623 result = mihome .request (
654- "https://de.api.io.mi.com/app/v2/test" , {"data" : "x" }, retry_count = None # type: ignore[arg-type]
624+ "https://de.api.io.mi.com/app/v2/test" ,
625+ {"data" : "x" },
626+ retry_count = None , # type: ignore[arg-type]
655627 )
656628
657629 assert result == {"ok" : 1 }
@@ -667,9 +639,7 @@ def test_mihome_request_timeout_with_connected_logs_warning(
667639 mihome ._connected = True
668640
669641 with patch ("custom_components.dreame_vacuum.dreame.protocol.sleep" ):
670- result = mihome .request (
671- "https://de.api.io.mi.com/app/v2/test" , {"data" : "x" }, retry_count = 1
672- )
642+ result = mihome .request ("https://de.api.io.mi.com/app/v2/test" , {"data" : "x" }, retry_count = 1 )
673643
674644 assert result is None
675645 assert mihome ._session .post .call_count == 2
@@ -684,9 +654,7 @@ def test_mihome_request_connection_error_with_connected_logs_warning(
684654 mihome ._connected = True
685655
686656 with patch ("custom_components.dreame_vacuum.dreame.protocol.sleep" ):
687- result = mihome .request (
688- "https://de.api.io.mi.com/app/v2/test" , {"data" : "x" }, retry_count = 1
689- )
657+ result = mihome .request ("https://de.api.io.mi.com/app/v2/test" , {"data" : "x" }, retry_count = 1 )
690658
691659 assert result is None
692660
@@ -699,9 +667,7 @@ def test_mihome_request_generic_exception_with_connected(
699667 mihome ._session .post .side_effect = RuntimeError ("boom" )
700668 mihome ._connected = True
701669
702- result = mihome .request (
703- "https://de.api.io.mi.com/app/v2/test" , {"data" : "x" }, retry_count = 1
704- )
670+ result = mihome .request ("https://de.api.io.mi.com/app/v2/test" , {"data" : "x" }, retry_count = 1 )
705671
706672 assert result is None
707673
@@ -713,9 +679,7 @@ def test_mihome_request_200_decrypt_returns_empty_bytes(
713679 mihome ._session = MagicMock ()
714680 mihome ._session .post .return_value = _mock_response (200 , "anythingbase64" )
715681
716- with patch .object (
717- DreameVacuumMiHomeCloudProtocol , "decrypt_rc4" , return_value = b""
718- ):
682+ with patch .object (DreameVacuumMiHomeCloudProtocol , "decrypt_rc4" , return_value = b"" ):
719683 result = mihome .request ("https://de.api.io.mi.com/app/v2/test" , {"data" : "x" })
720684
721685 assert result is None
0 commit comments