@@ -2031,7 +2031,7 @@ def test_get_bindings_for_pep_604():
20312031 def function1 (a : int | None ) -> None :
20322032 pass
20332033
2034- assert get_bindings (function1 ) == {'a' : int }
2034+ assert get_bindings (function1 ) == {'a' : Union [ int , None ] }
20352035
20362036 @inject
20372037 def function1 (a : int | str ) -> None :
@@ -2246,3 +2246,54 @@ def provide_second(self) -> Annotated[str, 'second']:
22462246 injector = Injector (module )
22472247 assert injector .get (Annotated [str , 'first' ]) == 'Bob'
22482248 assert injector .get (Annotated [str , 'second' ]) == 'Iger'
2249+
2250+
2251+ @pytest .mark .parametrize (
2252+ "provide" ,
2253+ [True , False ]
2254+ )
2255+ def test_optional_parameter_optional_provider (provide : bool ) -> None :
2256+ class Dependency :
2257+ pass
2258+
2259+ class Dependent :
2260+ @inject
2261+ def __init__ (self , dependency : Dependency | None = None ) -> None :
2262+ self .dependency = dependency
2263+
2264+ class MyModule (Module ):
2265+ @provider
2266+ def optional (self ) -> Dependency | None :
2267+ return Dependency () if provide else None
2268+
2269+ injector = Injector ([MyModule ()])
2270+ instance = injector .get (Dependent )
2271+ assert instance .dependency or not provide
2272+
2273+
2274+ @pytest .mark .parametrize (
2275+ "provide" ,
2276+ [True , False ]
2277+ )
2278+ def test_required_parameter_optional_provider (provide : bool ) -> None :
2279+ class Dependency :
2280+ def __init__ (self , transitive : object = object ()) -> None :
2281+ self .dependency = transitive
2282+
2283+ class Dependent :
2284+ @inject
2285+ def __init__ (self , dependency : Dependency ) -> None :
2286+ self .dependency = dependency
2287+
2288+ class MyModule (Module ):
2289+ @provider
2290+ def optional (self ) -> Dependency | None :
2291+ return Dependency (transitive = "from provider" ) if provide else None
2292+
2293+ injector = Injector ([MyModule ()])
2294+ instance = injector .get (Dependent )
2295+ # the Dependency | None provider should never be used, and instead
2296+ # the default behavior of providing instances of Dependency should be
2297+ # used meaning in both provider branches this will be true
2298+ assert instance .dependency is not None
2299+ assert instance .dependency .dependency != "from provider"
0 commit comments