Coverage for tests / test_dependency_class.py: 100%
73 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-12 18:15 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-12 18:15 +0000
1from collections.abc import AsyncGenerator, Generator 1abcd
3import pytest 1abcd
4from fastapi import Depends, FastAPI 1abcd
5from fastapi.testclient import TestClient 1abcd
7app = FastAPI() 1abcd
10class CallableDependency: 1abcd
11 def __call__(self, value: str) -> str: 1abcd
12 return value 1efg
15class CallableGenDependency: 1abcd
16 def __call__(self, value: str) -> Generator[str, None, None]: 1abcd
17 yield value 1efg
20class AsyncCallableDependency: 1abcd
21 async def __call__(self, value: str) -> str: 1abcd
22 return value 1efg
25class AsyncCallableGenDependency: 1abcd
26 async def __call__(self, value: str) -> AsyncGenerator[str, None]: 1abcd
27 yield value 1efg
30class MethodsDependency: 1abcd
31 def synchronous(self, value: str) -> str: 1abcd
32 return value 1efg
34 async def asynchronous(self, value: str) -> str: 1abcd
35 return value 1efg
37 def synchronous_gen(self, value: str) -> Generator[str, None, None]: 1abcd
38 yield value 1efg
40 async def asynchronous_gen(self, value: str) -> AsyncGenerator[str, None]: 1abcd
41 yield value 1efg
44callable_dependency = CallableDependency() 1abcd
45callable_gen_dependency = CallableGenDependency() 1abcd
46async_callable_dependency = AsyncCallableDependency() 1abcd
47async_callable_gen_dependency = AsyncCallableGenDependency() 1abcd
48methods_dependency = MethodsDependency() 1abcd
51@app.get("/callable-dependency-class") 1abcd
52async def get_callable_dependency_class( 1abcd
53 value: str, instance: CallableDependency = Depends()
54):
55 return instance(value) 1efg
58@app.get("/callable-gen-dependency-class") 1abcd
59async def get_callable_gen_dependency_class( 1abcd
60 value: str, instance: CallableGenDependency = Depends()
61):
62 return next(instance(value)) 1efg
65@app.get("/async-callable-dependency-class") 1abcd
66async def get_async_callable_dependency_class( 1abcd
67 value: str, instance: AsyncCallableDependency = Depends()
68):
69 return await instance(value) 1efg
72@app.get("/async-callable-gen-dependency-class") 1abcd
73async def get_async_callable_gen_dependency_class( 1abcd
74 value: str, instance: AsyncCallableGenDependency = Depends()
75):
76 return await instance(value).__anext__() 1efg
79@app.get("/callable-dependency") 1abcd
80async def get_callable_dependency(value: str = Depends(callable_dependency)): 1abcd
81 return value 1efg
84@app.get("/callable-gen-dependency") 1abcd
85async def get_callable_gen_dependency(value: str = Depends(callable_gen_dependency)): 1abcd
86 return value 1efg
89@app.get("/async-callable-dependency") 1abcd
90async def get_async_callable_dependency( 1abcd
91 value: str = Depends(async_callable_dependency),
92):
93 return value 1efg
96@app.get("/async-callable-gen-dependency") 1abcd
97async def get_async_callable_gen_dependency( 1abcd
98 value: str = Depends(async_callable_gen_dependency),
99):
100 return value 1efg
103@app.get("/synchronous-method-dependency") 1abcd
104async def get_synchronous_method_dependency( 1abcd
105 value: str = Depends(methods_dependency.synchronous),
106):
107 return value 1efg
110@app.get("/synchronous-method-gen-dependency") 1abcd
111async def get_synchronous_method_gen_dependency( 1abcd
112 value: str = Depends(methods_dependency.synchronous_gen),
113):
114 return value 1efg
117@app.get("/asynchronous-method-dependency") 1abcd
118async def get_asynchronous_method_dependency( 1abcd
119 value: str = Depends(methods_dependency.asynchronous),
120):
121 return value 1efg
124@app.get("/asynchronous-method-gen-dependency") 1abcd
125async def get_asynchronous_method_gen_dependency( 1abcd
126 value: str = Depends(methods_dependency.asynchronous_gen),
127):
128 return value 1efg
131client = TestClient(app) 1abcd
134@pytest.mark.parametrize( 1abcd
135 "route,value",
136 [
137 ("/callable-dependency", "callable-dependency"),
138 ("/callable-gen-dependency", "callable-gen-dependency"),
139 ("/async-callable-dependency", "async-callable-dependency"),
140 ("/async-callable-gen-dependency", "async-callable-gen-dependency"),
141 ("/synchronous-method-dependency", "synchronous-method-dependency"),
142 ("/synchronous-method-gen-dependency", "synchronous-method-gen-dependency"),
143 ("/asynchronous-method-dependency", "asynchronous-method-dependency"),
144 ("/asynchronous-method-gen-dependency", "asynchronous-method-gen-dependency"),
145 ("/callable-dependency-class", "callable-dependency-class"),
146 ("/callable-gen-dependency-class", "callable-gen-dependency-class"),
147 ("/async-callable-dependency-class", "async-callable-dependency-class"),
148 ("/async-callable-gen-dependency-class", "async-callable-gen-dependency-class"),
149 ],
150)
151def test_class_dependency(route, value): 1abcd
152 response = client.get(route, params={"value": value}) 1efg
153 assert response.status_code == 200, response.text 1efg
154 assert response.json() == value 1efg