From 8c6b1fdf3889c9f15be035b7c1fa1b1c2e1dddb9 Mon Sep 17 00:00:00 2001 From: Sebastian Pipping Date: Wed, 21 Jun 2023 00:16:07 +0200 Subject: [PATCH] test_requests.py: Extend coverage of gzip response .. with regard to: - not crashing with decode_compressed_response==True - expected cassette content for body string - expected response content, i.e. proper decompression --- tests/integration/test_requests.py | 34 ++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/tests/integration/test_requests.py b/tests/integration/test_requests.py index c083dca..9cae093 100644 --- a/tests/integration/test_requests.py +++ b/tests/integration/test_requests.py @@ -156,20 +156,40 @@ def test_cross_scheme(tmpdir, httpbin_secure, httpbin): assert len(cass) == 2 -def test_gzip(tmpdir, httpbin_both): +def test_gzip__decode_compressed_response_false(tmpdir, httpbin_both): """ Ensure that requests (actually urllib3) is able to automatically decompress the response body """ + for _ in range(2): # one for recording, one for re-playing + with vcr.use_cassette(str(tmpdir.join("gzip.yaml"))): + response = requests.get(httpbin_both + "/gzip") + assert response.headers["content-encoding"] == "gzip" # i.e. not removed + assert_is_json(response.content) # i.e. uncompressed bytes + + +def test_gzip__decode_compressed_response_true(tmpdir, httpbin_both): url = httpbin_both + "/gzip" - response = requests.get(url) - with vcr.use_cassette(str(tmpdir.join("gzip.yaml"))): - response = requests.get(url) - assert_is_json(response.content) + expected_response = requests.get(url) + expected_content = expected_response.content + assert expected_response.headers["content-encoding"] == "gzip" # self-test - with vcr.use_cassette(str(tmpdir.join("gzip.yaml"))): - assert_is_json(response.content) + with vcr.use_cassette( + str(tmpdir.join("decode_compressed.yaml")), decode_compressed_response=True + ) as cassette: + r = requests.get(url) + assert r.headers["content-encoding"] == "gzip" # i.e. not removed + assert r.content == expected_content + + # Has the cassette body been decompressed? + cassette_response_body = cassette.responses[0]["body"]["string"] + assert isinstance(cassette_response_body, str) + + with vcr.use_cassette(str(tmpdir.join("decode_compressed.yaml")), decode_compressed_response=True): + r = requests.get(url) + assert "content-encoding" not in r.headers # i.e. removed + assert r.content == expected_content def test_session_and_connection_close(tmpdir, httpbin):