tests.test_objects   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 41
dl 0
loc 67
rs 10
c 0
b 0
f 0
wmc 11

4 Methods

Rating   Name   Duplication   Size   Complexity  
A MySimpleDep.__init__() 0 2 1
A MyMoreComplicatedDep.__init__() 0 2 1
A DepAsAForwardRef.__init__() 0 2 1
A TypedSelf.__init__() 0 2 1

6 Functions

Rating   Name   Duplication   Size   Complexity  
A test_works_if_every_item_in_the_constructor_can_be_figured_out() 0 5 1
A test_forward_refs_are_fine() 0 3 1
A test_works_for_registered_types() 0 3 1
A test_dependencies_are_built_each_request() 0 5 1
A container_with_simple_dep() 0 4 2
A test_explicitly_typing_self_doesnt_cause_problems() 0 3 1
1
import pytest
2
3
from lagom import Container
4
5
6
class MySimpleDep:
7
    stuff: str
8
9
    def __init__(self, stuff):
10
        self.stuff = stuff
11
12
13
class MyMoreComplicatedDep:
14
    complicated_stuff: str
15
16
    def __init__(self, dep: MySimpleDep):
17
        self.stuff = "complicated " + dep.stuff
18
19
20
class DepAsAForwardRef:
21
    def __init__(self, dep: "SomethingDefinedLater") -> None:
22
        pass
23
24
25
class SomethingDefinedLater:
26
    pass
27
28
29
class TypedSelf:
30
    def __init__(self: "TypedSelf"):
31
        pass
32
33
34
@pytest.fixture
35
def container_with_simple_dep(container: Container):
36
    container.define(MySimpleDep, lambda: MySimpleDep("Top stuff"))
37
    return container
38
39
40
def test_works_for_registered_types(container_with_simple_dep):
41
    resolved = container_with_simple_dep.resolve(MySimpleDep)
42
    assert resolved.stuff == "Top stuff"
43
44
45
def test_works_if_every_item_in_the_constructor_can_be_figured_out(
46
    container_with_simple_dep,
47
):
48
    resolved = container_with_simple_dep.resolve(MyMoreComplicatedDep)
49
    assert resolved.stuff == "complicated Top stuff"
50
51
52
@pytest.mark.parametrize("dep", [MySimpleDep, MyMoreComplicatedDep])
53
def test_dependencies_are_built_each_request(container_with_simple_dep: Container, dep):
54
    first = container_with_simple_dep.resolve(dep)
55
    second = container_with_simple_dep.resolve(dep)
56
    assert first is not second
57
58
59
def test_forward_refs_are_fine(container: Container):
60
    resolved = container.resolve(DepAsAForwardRef)
61
    assert isinstance(resolved, DepAsAForwardRef)
62
63
64
def test_explicitly_typing_self_doesnt_cause_problems(container: Container):
65
    resolved = container.resolve(TypedSelf)
66
    assert isinstance(resolved, TypedSelf)
67