1- """Tests for HTTP compression support (gzip/deflate)."""
1+ """Tests for HTTP compression support (gzip/deflate/brotli )."""
22
33import gzip
44import json
55import zlib
66from typing import Any
77from unittest .mock import Mock , patch
88
9+ import brotli
10+
911from cvec import CVec
1012
1113
@@ -63,7 +65,7 @@ def test_accept_encoding_header_sent(
6365 mock_fetch_key : Any ,
6466 mock_login : Any ,
6567 ) -> None :
66- """Verify Accept-Encoding: gzip, deflate is present in request headers ."""
68+ """Verify Accept-Encoding includes br, gzip, deflate."""
6769 client = _create_client ()
6870
6971 mock_response = _make_mock_response (b"[]" )
@@ -72,7 +74,7 @@ def test_accept_encoding_header_sent(
7274 client .get_metrics ()
7375
7476 req = mock_urlopen .call_args [0 ][0 ]
75- assert req .get_header ("Accept-encoding" ) == "gzip, deflate"
77+ assert req .get_header ("Accept-encoding" ) == "br, gzip, deflate"
7678
7779 @patch .object (CVec , "_login_with_supabase" , return_value = None )
7880 @patch .object (
@@ -196,3 +198,29 @@ def test_gzip_arrow_response_decompressed(
196198 result = client ._make_request ("GET" , "/api/metrics/data/arrow" )
197199 assert isinstance (result , bytes )
198200 assert result == arrow_bytes
201+
202+ @patch .object (CVec , "_login_with_supabase" , return_value = None )
203+ @patch .object (
204+ CVec ,
205+ "_fetch_config" ,
206+ autospec = True ,
207+ side_effect = mock_fetch_config_side_effect ,
208+ )
209+ @patch ("cvec.cvec.urlopen" )
210+ def test_brotli_response_decompressed (
211+ self ,
212+ mock_urlopen : Any ,
213+ mock_fetch_key : Any ,
214+ mock_login : Any ,
215+ ) -> None :
216+ """Mock a brotli-compressed JSON response, verify it is decompressed."""
217+ client = _create_client ()
218+
219+ data = [{"id" : 4 , "name" : "metric4" }]
220+ compressed = brotli .compress (json .dumps (data ).encode ("utf-8" ))
221+ mock_response = _make_mock_response (compressed , content_encoding = "br" )
222+ mock_urlopen .return_value = mock_response
223+
224+ result = client .get_metrics ()
225+ assert len (result ) == 1
226+ assert result [0 ].name == "metric4"
0 commit comments