Skip to content

Commit 06b1bd0

Browse files
committed
Add ServiceWithCallable and related tests for method calls with args and kwargs
1 parent 4f8c4bf commit 06b1bd0

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

tests/unit/samples/wiring/container.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from dependency_injector import containers, providers
22

3-
from .service import Service
3+
from .service import Service, ServiceWithCallable
44

55

66
class SubContainer(containers.DeclarativeContainer):
@@ -14,4 +14,6 @@ class Container(containers.DeclarativeContainer):
1414

1515
service = providers.Factory(Service)
1616

17+
service_with_callable = providers.Factory(ServiceWithCallable)
18+
1719
sub = providers.Container(SubContainer)

tests/unit/samples/wiring/module.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,27 @@ def test_provided_instance(some_value: int = Provide[Container.service.provided.
100100
return some_value
101101

102102

103+
@inject
104+
def test_provided_instance_call_with_args(
105+
some_value: int = Provide[Container.service_with_callable.provided.method_with_args.call(1, 2)]
106+
):
107+
return some_value
108+
109+
110+
@inject
111+
def test_provided_instance_call_with_kwargs(
112+
some_value: dict = Provide[Container.service_with_callable.provided.method_with_kwargs.call(a=1, b=2)]
113+
):
114+
return some_value
115+
116+
117+
@inject
118+
def test_provided_instance_call_with_args_and_kwargs(
119+
some_value: dict = Provide[Container.service_with_callable.provided.foo.process.call(1, 2, key="value")]
120+
):
121+
return some_value
122+
123+
103124
@inject
104125
def test_subcontainer_provider(some_value: int = Provide[Container.sub.int_object]):
105126
return some_value
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,15 @@
11
class Service:
22
service_attr: int
3+
4+
5+
class ServiceWithCallable:
6+
def __init__(self):
7+
self.foo = CallableDict({"bar": lambda: 10})
8+
self.method_with_args = lambda x, y: x + y
9+
self.method_with_kwargs = lambda **kwargs: kwargs
10+
11+
12+
class CallableDict(dict):
13+
def __init__(self, data):
14+
super().__init__(data)
15+
self.process = lambda *args, **kwargs: {"args": args, "kwargs": kwargs}

tests/unit/wiring/provider_ids/test_main_py36.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,21 @@ class TestService:
188188
assert some_value == 10
189189

190190

191+
def test_provided_instance_call_with_args():
192+
some_value = module.test_provided_instance_call_with_args()
193+
assert some_value == 3
194+
195+
196+
def test_provided_instance_call_with_kwargs():
197+
some_value = module.test_provided_instance_call_with_kwargs()
198+
assert some_value == {"a": 1, "b": 2}
199+
200+
201+
def test_provided_instance_call_with_args_and_kwargs():
202+
some_value = module.test_provided_instance_call_with_args_and_kwargs()
203+
assert some_value == {"args": (1, 2), "kwargs": {"key": "value"}}
204+
205+
191206
def test_subcontainer():
192207
some_value = module.test_subcontainer_provider()
193208
assert some_value == 1

0 commit comments

Comments
 (0)