1
|
|
|
import pytest |
2
|
|
|
|
3
|
|
|
from lagom import Container, compose |
4
|
|
|
|
5
|
|
|
|
6
|
|
|
class A: |
7
|
|
|
def __init__(self, something: str): |
8
|
|
|
pass |
9
|
|
|
|
10
|
|
|
|
11
|
|
|
class B: |
12
|
|
|
def __init__(self, something: str): |
13
|
|
|
pass |
14
|
|
|
|
15
|
|
|
|
16
|
|
|
class C: |
17
|
|
|
def __init__(self, something: str): |
18
|
|
|
pass |
19
|
|
|
|
20
|
|
|
|
21
|
|
|
container_a = Container() |
22
|
|
|
container_a[A] = lambda: A("hello") |
|
|
|
|
23
|
|
|
|
24
|
|
|
container_b = Container() |
25
|
|
|
container_b[B] = lambda: B("world") |
|
|
|
|
26
|
|
|
|
27
|
|
|
container_c = Container() |
28
|
|
|
container_c[C] = lambda: C("!!!!") |
|
|
|
|
29
|
|
|
|
30
|
|
|
|
31
|
|
|
def test_two_containers_can_be_composed_together_and_all_dependencies_resolved(): |
32
|
|
|
composed_container = compose(container_a, container_b) |
33
|
|
|
|
34
|
|
|
assert composed_container[A] |
35
|
|
|
assert composed_container[B] |
36
|
|
|
|
37
|
|
|
|
38
|
|
|
def test_the_composed_container_can_list_all_defined_deps(): |
39
|
|
|
composed_container = compose(container_a, container_b) |
40
|
|
|
|
41
|
|
|
assert A in composed_container.defined_types |
42
|
|
|
assert B in composed_container.defined_types |
43
|
|
|
|
44
|
|
|
|
45
|
|
|
def test_composed_container_definitions_cannot_overlap(): |
46
|
|
|
with pytest.raises(ValueError): |
47
|
|
|
compose(container_a, container_a) |
48
|
|
|
|
49
|
|
|
|
50
|
|
|
def test_the_result_of_a_composition_can_be_composed(): |
51
|
|
|
composed_container = compose(container_a, container_b) |
52
|
|
|
next_composed_container = compose(composed_container, container_c) |
53
|
|
|
|
54
|
|
|
assert A in next_composed_container.defined_types |
55
|
|
|
assert B in next_composed_container.defined_types |
56
|
|
|
assert C in next_composed_container.defined_types |
57
|
|
|
assert C not in composed_container.defined_types |
58
|
|
|
|