55from typing import Any
66from unittest .mock import Mock
77
8- import brotli
98import impit
109import pytest
1110
1211from apify_client ._statistics import ClientStatistics
1312from apify_client .errors import InvalidResponseBodyError
1413from apify_client .http_clients import HttpClient , HttpClientAsync , HttpResponse , ImpitHttpClient , ImpitHttpClientAsync
1514from apify_client .http_clients ._impit import _is_retryable_error
16- from apify_client .http_compressors import BrotliHttpCompressor , GzipHttpCompressor
1715
1816
1917class _ConcreteHttpClient (HttpClient ):
@@ -273,7 +271,7 @@ def test_prepare_request_call_basic() -> None:
273271
274272
275273def test_prepare_request_call_with_json () -> None :
276- """Default compressor is gzip — JSON body is compressed with gzip ."""
274+ """Test _prepare_request_call with JSON data ."""
277275 client = _ConcreteHttpClient ()
278276
279277 json_data = {'key' : 'value' , 'number' : 42 }
@@ -283,7 +281,6 @@ def test_prepare_request_call_with_json() -> None:
283281 assert headers ['Content-Encoding' ] == 'gzip'
284282 assert data is not None
285283 assert isinstance (data , bytes )
286- assert gzip .decompress (data ) == b'{"key": "value", "number": 42}'
287284
288285
289286def test_prepare_request_call_with_empty_dict_json () -> None :
@@ -296,7 +293,9 @@ def test_prepare_request_call_with_empty_dict_json() -> None:
296293 assert headers ['Content-Encoding' ] == 'gzip'
297294 assert data is not None
298295 assert isinstance (data , bytes )
299- assert gzip .decompress (data ) == b'{}'
296+ # Verify the gzipped data contains the JSON
297+ decompressed = gzip .decompress (data )
298+ assert decompressed == b'{}'
300299
301300
302301def test_prepare_request_call_with_empty_list_json () -> None :
@@ -309,7 +308,9 @@ def test_prepare_request_call_with_empty_list_json() -> None:
309308 assert headers ['Content-Encoding' ] == 'gzip'
310309 assert data is not None
311310 assert isinstance (data , bytes )
312- assert gzip .decompress (data ) == b'[]'
311+ # Verify the gzipped data contains the JSON
312+ decompressed = gzip .decompress (data )
313+ assert decompressed == b'[]'
313314
314315
315316def test_prepare_request_call_with_zero_json () -> None :
@@ -322,7 +323,9 @@ def test_prepare_request_call_with_zero_json() -> None:
322323 assert headers ['Content-Encoding' ] == 'gzip'
323324 assert data is not None
324325 assert isinstance (data , bytes )
325- assert gzip .decompress (data ) == b'0'
326+ # Verify the gzipped data contains the JSON
327+ decompressed = gzip .decompress (data )
328+ assert decompressed == b'0'
326329
327330
328331def test_prepare_request_call_with_false_json () -> None :
@@ -335,7 +338,9 @@ def test_prepare_request_call_with_false_json() -> None:
335338 assert headers ['Content-Encoding' ] == 'gzip'
336339 assert data is not None
337340 assert isinstance (data , bytes )
338- assert gzip .decompress (data ) == b'false'
341+ # Verify the gzipped data contains the JSON
342+ decompressed = gzip .decompress (data )
343+ assert decompressed == b'false'
339344
340345
341346def test_prepare_request_call_with_empty_string_json () -> None :
@@ -348,7 +353,9 @@ def test_prepare_request_call_with_empty_string_json() -> None:
348353 assert headers ['Content-Encoding' ] == 'gzip'
349354 assert data is not None
350355 assert isinstance (data , bytes )
351- assert gzip .decompress (data ) == b'""'
356+ # Verify the gzipped data contains the JSON
357+ decompressed = gzip .decompress (data )
358+ assert decompressed == b'""'
352359
353360
354361def test_prepare_request_call_with_string_data () -> None :
@@ -371,16 +378,6 @@ def test_prepare_request_call_with_bytes_data() -> None:
371378 assert isinstance (data , bytes )
372379
373380
374- def test_prepare_request_call_with_bytearray_data () -> None :
375- """bytearray body is compressed correctly."""
376- client = _ConcreteHttpClient ()
377- headers , _ , data = client ._prepare_request_call (data = bytearray (b'test bytearray' ))
378-
379- assert headers ['Content-Encoding' ] == 'gzip'
380- assert data is not None
381- assert gzip .decompress (data ) == b'test bytearray'
382-
383-
384381def test_prepare_request_call_json_and_data_error () -> None :
385382 """Test _prepare_request_call raises error when both json and data are provided."""
386383 client = _ConcreteHttpClient ()
@@ -455,57 +452,3 @@ def test_build_url_with_params_mixed() -> None:
455452 assert 'tags=a' in url
456453 assert 'tags=b' in url
457454 assert 'name=test' in url
458-
459-
460- def test_prepare_request_call_brotli_compression () -> None :
461- """When a BrotliHttpCompressor is injected, request body uses brotli."""
462- client = _ConcreteHttpClient (compressor = BrotliHttpCompressor ())
463- headers , _ , data = client ._prepare_request_call (json = {'k' : 'v' })
464-
465- assert headers ['Content-Encoding' ] == 'br'
466- assert data is not None
467- assert brotli .decompress (data ) == b'{"k": "v"}'
468-
469-
470- def test_prepare_request_call_explicit_gzip () -> None :
471- """When a GzipHttpCompressor is injected, request body uses gzip."""
472- client = _ConcreteHttpClient (compressor = GzipHttpCompressor ())
473- headers , _ , data = client ._prepare_request_call (json = {'k' : 'v' })
474-
475- assert headers ['Content-Encoding' ] == 'gzip'
476- assert data is not None
477- assert gzip .decompress (data ) == b'{"k": "v"}'
478-
479-
480- def test_prepare_request_call_brotli_custom_quality () -> None :
481- """Custom quality is forwarded to the brotli compressor."""
482- client = _ConcreteHttpClient (compressor = BrotliHttpCompressor (quality = 1 ))
483- headers , _ , data = client ._prepare_request_call (json = {'k' : 'v' })
484-
485- assert headers ['Content-Encoding' ] == 'br'
486- assert data is not None
487- assert brotli .decompress (data ) == b'{"k": "v"}'
488-
489-
490- def test_prepare_request_call_gzip_custom_quality () -> None :
491- """Custom quality is forwarded to the gzip compressor."""
492- client = _ConcreteHttpClient (compressor = GzipHttpCompressor (quality = 1 ))
493- headers , _ , data = client ._prepare_request_call (json = {'k' : 'v' })
494-
495- assert headers ['Content-Encoding' ] == 'gzip'
496- assert data is not None
497- assert gzip .decompress (data ) == b'{"k": "v"}'
498-
499-
500- def test_default_compressor_is_gzip () -> None :
501- """HttpClientBase uses GzipHttpCompressor when no compressor is specified."""
502- client = _ConcreteHttpClient ()
503- assert isinstance (client ._compressor , GzipHttpCompressor )
504- assert client ._compressor .content_encoding == 'gzip'
505-
506-
507- def test_custom_compressor_is_stored () -> None :
508- """An injected compressor is stored and used."""
509- compressor = BrotliHttpCompressor (quality = 9 )
510- client = _ConcreteHttpClient (compressor = compressor )
511- assert client ._compressor is compressor
0 commit comments