Total Complexity | 7 |
Total Lines | 49 |
Duplicated Lines | 0 % |
Changes | 0 |
1 | import pytest |
||
2 | |||
3 | from lagom import Singleton, Container |
||
4 | |||
5 | |||
6 | class MyBasicDep: |
||
7 | pass |
||
8 | |||
9 | |||
10 | class MyMoreComplicatedDep: |
||
11 | def __init__(self, some_number): |
||
12 | self.sum_number = some_number |
||
13 | |||
14 | |||
15 | class MyCompositeDep: |
||
16 | def __init__(self, a: MyBasicDep, b: MyMoreComplicatedDep): |
||
17 | self.a = a |
||
18 | self.b = b |
||
19 | |||
20 | |||
21 | @pytest.fixture |
||
22 | def container_with_deps(container: Container): |
||
23 | container.define(MyBasicDep, Singleton(MyBasicDep)) |
||
24 | container.define(MyMoreComplicatedDep, Singleton(lambda: MyMoreComplicatedDep(5))) |
||
25 | container.define(MyCompositeDep, Singleton(MyCompositeDep)) |
||
26 | return container |
||
27 | |||
28 | |||
29 | def test_singleton_is_only_resolved_once(container_with_deps: Container): |
||
30 | first = container_with_deps.resolve(MyBasicDep) |
||
31 | second = container_with_deps.resolve(MyBasicDep) |
||
32 | assert first is not None |
||
33 | assert first is second |
||
34 | |||
35 | |||
36 | def test_singleton_can_have_construction_logic(container_with_deps: Container): |
||
37 | first = container_with_deps.resolve(MyMoreComplicatedDep) |
||
38 | second = container_with_deps.resolve(MyMoreComplicatedDep) |
||
39 | assert first.sum_number == 5 |
||
40 | assert first is second |
||
41 | |||
42 | |||
43 | def test_singleton_can_compose_other_dependencies(container_with_deps: Container): |
||
44 | first = container_with_deps.resolve(MyCompositeDep) |
||
45 | second = container_with_deps.resolve(MyCompositeDep) |
||
46 | assert type(first.a) == MyBasicDep |
||
47 | assert type(first.b) == MyMoreComplicatedDep |
||
48 | assert first is second |
||
49 |