Coverage for tests/sync/test_cast.py: 100%
111 statements
« prev ^ index » next coverage.py v7.17.3, created at 2026-11-13 05:19 +0000
« prev ^ index » next coverage.py v7.17.3, created at 2026-11-13 05:19 +0000
1from collections.abc import Iterator 1abcdefghijklmnopqrst
3import pytest 1abcdefghijklmnopqrst
5from fast_depends import inject 1abcdefghijklmnopqrst
6from fast_depends.exceptions import ValidationError 1abcdefghijklmnopqrst
7from tests.marks import serializer 1abcdefghijklmnopqrst
10def test_skip_not_required(): 1abcdefghijklmnopqrst
11 @inject(serializer_cls=None) 1abcdefghijklmnopqrst
12 def some_func() -> int: 1abcdefghijklmnopqrst
13 return 1 1abcdefghijklmnopqrst
15 assert some_func(useless=object()) == 1 1abcdefghijklmnopqrst
18def test_not_annotated(): 1abcdefghijklmnopqrst
19 @inject 1abcdefghijklmnopqrst
20 def some_func(a, b): 1abcdefghijklmnopqrst
21 return a + b 1abcdefghijklmnopqrst
23 assert isinstance(some_func("1", "2"), str) 1abcdefghijklmnopqrst
26def test_arbitrary_args(): 1abcdefghijklmnopqrst
27 class ArbitraryType: 1abcdefghijklmnopqrst
28 def __init__(self): 1abcdefghijklmnopqrst
29 self.value = "value" 1abcdefghijklmnopqrst
31 @inject 1abcdefghijklmnopqrst
32 def some_func(a: ArbitraryType): 1abcdefghijklmnopqrst
33 return a 1abcdefghijklmnopqrst
35 assert isinstance(some_func(ArbitraryType()), ArbitraryType) 1abcdefghijklmnopqrst
38def test_arbitrary_response(): 1abcdefghijklmnopqrst
39 class ArbitraryType: 1abcdefghijklmnopqrst
40 def __init__(self): 1abcdefghijklmnopqrst
41 self.value = "value" 1abcdefghijklmnopqrst
43 @inject 1abcdefghijklmnopqrst
44 def some_func(a: ArbitraryType) -> ArbitraryType: 1abcdefghijklmnopqrst
45 return a 1abcdefghijklmnopqrst
47 assert isinstance(some_func(ArbitraryType()), ArbitraryType) 1abcdefghijklmnopqrst
50def test_args(): 1abcdefghijklmnopqrst
51 @inject 1abcdefghijklmnopqrst
52 def some_func(a, *ar): 1abcdefghijklmnopqrst
53 return a, ar 1abcdefghijklmnopqrst
55 assert (1, (2,)) == some_func(1, 2) 1abcdefghijklmnopqrst
58def test_args_kwargs_1(): 1abcdefghijklmnopqrst
59 @inject 1abcdefghijklmnopqrst
60 def simple_func( 1abcdefghijklmnopqrst
61 a: int,
62 *args: tuple[float, ...],
63 b: int,
64 **kwargs: dict[str, int],
65 ):
66 return a, args, b, kwargs 1abcdefghijklmnopqrst
68 assert (1, (2.0, 3.0), 3, {"key": 1}) == simple_func(1.0, 2.0, 3, b=3.0, key=1.0) 1abcdefghijklmnopqrst
71def test_args_kwargs_2(): 1abcdefghijklmnopqrst
72 @inject 1abcdefghijklmnopqrst
73 def simple_func( 1abcdefghijklmnopqrst
74 a: int,
75 *args: tuple[float, ...],
76 b: int,
77 ):
78 return a, args, b 1abcdefghijklmnopqrst
80 assert (1, (2.0, 3.0), 3) == simple_func( 1abcdefghijklmnopqrst
81 1.0,
82 2.0,
83 3,
84 b=3.0,
85 )
88def test_args_kwargs_3(): 1abcdefghijklmnopqrst
89 @inject 1abcdefghijklmnopqrst
90 def simple_func(a: int, *, b: int): 1abcdefghijklmnopqrst
91 return a, b 1abcdefghijklmnopqrst
93 assert (1, 3) == simple_func( 1abcdefghijklmnopqrst
94 1.0,
95 b=3.0,
96 )
99def test_args_kwargs_4(): 1abcdefghijklmnopqrst
100 @inject 1abcdefghijklmnopqrst
101 def simple_func( 1abcdefghijklmnopqrst
102 *args: tuple[float, ...],
103 **kwargs: dict[str, int],
104 ):
105 return args, kwargs 1abcdefghijklmnopqrst
107 assert ( 1abcdefghijklmnopqrst
108 (1.0, 2.0, 3.0),
109 {
110 "key": 1,
111 "b": 3,
112 },
113 ) == simple_func(1.0, 2.0, 3, b=3.0, key=1.0)
116def test_args_kwargs_5(): 1abcdefghijklmnopqrst
117 @inject 1abcdefghijklmnopqrst
118 def simple_func( 1abcdefghijklmnopqrst
119 *a: tuple[float, ...],
120 **kw: dict[str, int],
121 ):
122 return a, kw 1abcdefghijklmnopqrst
124 assert ( 1abcdefghijklmnopqrst
125 (1.0, 2.0, 3.0),
126 {
127 "key": 1,
128 "b": 3,
129 },
130 ) == simple_func(1.0, 2.0, 3, b=3.0, key=1.0)
133@serializer 1abcdefghijklmnopqrst
134class TestSerializer: 1abcdefghijklmnopqrst
135 def test_no_cast_result(self): 1abcdefghijklmnopqrst
136 @inject(cast_result=False) 1abcdefghijklmnopqr
137 def some_func(a: int, b: int) -> str: 1abcdefghijklmnopqr
138 return a + b 1abcdefghijklmnopqr
140 assert some_func("1", "2") == 3 1abcdefghijklmnopqr
142 def test_annotated_partial(self): 1abcdefghijklmnopqrst
143 @inject 1abcdefghijklmnopqr
144 def some_func(a, b: int): 1abcdefghijklmnopqr
145 assert isinstance(b, int) 1abcdefghijklmnopqr
146 return a + b 1abcdefghijklmnopqr
148 assert isinstance(some_func(1, "2"), int) 1abcdefghijklmnopqr
150 def test_types_casting(self): 1abcdefghijklmnopqrst
151 @inject 1abcdefghijklmnopqr
152 def some_func(a: int, b: int) -> float: 1abcdefghijklmnopqr
153 assert isinstance(a, int) 1abcdefghijklmnopqr
154 assert isinstance(b, int) 1abcdefghijklmnopqr
155 r = a + b 1abcdefghijklmnopqr
156 assert isinstance(r, int) 1abcdefghijklmnopqr
157 return r 1abcdefghijklmnopqr
159 assert isinstance(some_func("1", "2"), float) 1abcdefghijklmnopqr
161 def test_types_casting_from_str(self): 1abcdefghijklmnopqrst
162 @inject 1abcdefghijklmnopqr
163 def some_func(a: "int") -> float: 1abcdefghijklmnopqr
164 return a 1abcdefghijklmnopqr
166 assert isinstance(some_func("1"), float) 1abcdefghijklmnopqr
168 def test_wrong_incoming_types(self): 1abcdefghijklmnopqrst
169 @inject 1abcdefghijklmnopqr
170 def some_func(a: int): # pragma: no cover 1abcdefghijklmnopqr
171 return a
173 with pytest.raises(ValidationError): 1abcdefghijklmnopqr
174 some_func({"key", 1}) 1abcdefghijklmnopqr
176 def test_wrong_return_type(self): 1abcdefghijklmnopqrst
177 @inject 1abcdefghijklmnopqr
178 def some_func(a: int) -> dict: 1abcdefghijklmnopqr
179 return a 1abcdefghijklmnopqr
181 with pytest.raises(ValidationError): 1abcdefghijklmnopqr
182 some_func("2") 1abcdefghijklmnopqr
184 def test_generator(self): 1abcdefghijklmnopqrst
185 @inject 1abcdefghijklmnopqr
186 def simple_func(a: str) -> int: 1abcdefghijklmnopqr
187 for _ in range(2): 1abcdefghijklmnopqr
188 yield a 1abcdefghijklmnopqr
190 for i in simple_func("1"): 1abcdefghijklmnopqr
191 assert i == 1 1abcdefghijklmnopqr
193 def test_generator_iterator_type(self): 1abcdefghijklmnopqrst
194 @inject 1abcdefghijklmnopqr
195 def simple_func(a: str) -> Iterator[int]: 1abcdefghijklmnopqr
196 for _ in range(2): 1abcdefghijklmnopqr
197 yield a 1abcdefghijklmnopqr
199 for i in simple_func("1"): 1abcdefghijklmnopqr
200 assert i == 1 1abcdefghijklmnopqr