Coverage for tests / test_tutorial / test_dependencies / test_tutorial008.py: 100%

26 statements  

« prev     ^ index     » next       coverage.py v7.13.3, created at 2026-02-12 18:15 +0000

1import importlib 1abec

2import sys 1abec

3from types import ModuleType 1abec

4from typing import Annotated, Any 1abec

5from unittest.mock import Mock, patch 1abec

6 

7import pytest 1abec

8from fastapi import Depends, FastAPI 1abec

9from fastapi.testclient import TestClient 1abec

10 

11 

12@pytest.fixture( 1abec

13 name="module", 

14 params=[ 

15 "tutorial008_py310", 

16 pytest.param( 

17 "tutorial008_an_py310", 

18 marks=pytest.mark.xfail( 

19 sys.version_info < (3, 14), 

20 reason="Fails with `NameError: name 'DepA' is not defined`", 

21 ), 

22 ), 

23 ], 

24) 

25def get_module(request: pytest.FixtureRequest): 1abec

26 mod_name = f"docs_src.dependencies.{request.param}" 1abc

27 mod = importlib.import_module(mod_name) 1abc

28 return mod 1abc

29 

30 

31def test_get_db(module: ModuleType): 1abec

32 app = FastAPI() 1fgd

33 

34 @app.get("/") 1fgd

35 def read_root(c: Annotated[Any, Depends(module.dependency_c)]): 1fgd

36 return {"c": str(c)} 1fgd

37 

38 client = TestClient(app) 1fgd

39 

40 a_mock = Mock() 1fgd

41 b_mock = Mock() 1fgd

42 c_mock = Mock() 1fgd

43 

44 with ( 1d

45 patch( 

46 f"{module.__name__}.generate_dep_a", 

47 return_value=a_mock, 

48 create=True, 

49 ), 

50 patch( 

51 f"{module.__name__}.generate_dep_b", 

52 return_value=b_mock, 

53 create=True, 

54 ), 

55 patch( 

56 f"{module.__name__}.generate_dep_c", 

57 return_value=c_mock, 

58 create=True, 

59 ), 

60 ): 

61 response = client.get("/") 1fgd

62 

63 assert response.status_code == 200 1fgd

64 assert response.json() == {"c": str(c_mock)} 1fgd