Coverage for tests / test_tutorial / test_custom_request_and_route / test_tutorial001.py: 100%

30 statements  

« prev     ^ index     » next       coverage.py v7.13.3, created at 2026-04-06 01:24 +0000

1import gzip 1abcd

2import importlib 1abcd

3import json 1abcd

4 

5import pytest 1abcd

6from fastapi import Request 1abcd

7from fastapi.testclient import TestClient 1abcd

8 

9from tests.utils import needs_py310 1abcd

10 

11 

12@pytest.fixture( 1abcd

13 name="client", 

14 params=[ 

15 pytest.param("tutorial001_py310", marks=needs_py310), 

16 pytest.param("tutorial001_an_py310", marks=needs_py310), 

17 ], 

18) 

19def get_client(request: pytest.FixtureRequest): 1abcd

20 mod = importlib.import_module(f"docs_src.custom_request_and_route.{request.param}") 1rstuvwxyzABCDEFGHIJK

21 

22 @mod.app.get("/check-class") 1rstuvwxyzABCDEFGHIJK

23 async def check_gzip_request(request: Request): 1rstuvwxyzABCDEFGHIJK

24 return {"request_class": type(request).__name__} 1LMNOPQRS

25 

26 client = TestClient(mod.app) 1rstuvwxyzABCDEFGHIJK

27 return client 1rstuvwxyzABCDEFGHIJK

28 

29 

30@pytest.mark.parametrize("compress", [True, False]) 1abcd

31def test_gzip_request(client: TestClient, compress): 1abcd

32 n = 1000 1lemfgnhoipjqk

33 headers = {} 1lemfgnhoipjqk

34 body = [1] * n 1lemfgnhoipjqk

35 data = json.dumps(body).encode() 1lemfgnhoipjqk

36 if compress: 1lemfgnhoipjqk

37 data = gzip.compress(data) 1efghijk

38 headers["Content-Encoding"] = "gzip" 1efghijk

39 headers["Content-Type"] = "application/json" 1lemfgnhoipjqk

40 response = client.post("/sum", content=data, headers=headers) 1lemfgnhoipjqk

41 assert response.json() == {"sum": n} 1lemfgnhoipjqk

42 

43 

44def test_request_class(client: TestClient): 1abcd

45 response = client.get("/check-class") 1LMNOPQRS

46 assert response.json() == {"request_class": "GzipRequest"} 1LMNOPQRS