tests.test_singleton.container_with_deps()   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 6
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 6
nop 1
dl 0
loc 6
rs 10
c 0
b 0
f 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