BuilderTest   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 142
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 10
eloc 75
c 1
b 0
f 1
dl 0
loc 142
rs 10

10 Methods

Rating   Name   Duplication   Size   Complexity  
A testItShouldCreateAConfiguredContainerFromFrameworkConfigWithComplexFactories() 0 11 1
A testItShouldThrowInvalidArgumentExceptionWithInvalidServiceConfig() 0 12 1
A testItShouldThrowInvalidArgumentExceptionWithInvalidSimpleServiceConfig() 0 10 1
A testItShouldCreateAConfiguredContainerFromFrameworkConfigWithAliases() 0 12 1
A testItShouldCreateAConfiguredContainerFromFrameworkConfigWithFactories() 0 11 1
A testItShouldCreateAConfiguredContainerFromFrameworkConfigWithInvokables() 0 11 1
A testItShouldThrowInvalidArgumentExceptionWithInvalidServiceClassConfig() 0 12 1
A testItShouldCreateAConfiguredContainerFromFrameworkConfigWithAnonymousFunctionFactories() 0 13 1
A testItShouldCreateAConfiguredContainerFromFrameworkConfigWithConditionals() 0 18 1
A testItShouldCreateAConfiguredContainerFromFrameworkConfig() 0 9 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AntidotTest\Container;
6
7
use Antidot\Container\Container;
8
use Antidot\Container\Builder as ContainerBuilder;
9
use InvalidArgumentException;
10
use PHPUnit\Framework\TestCase;
11
use Psr\Container\ContainerInterface;
12
use SplStack;
13
14
class BuilderTest extends TestCase
15
{
16
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfig(): void
17
    {
18
        $container = ContainerBuilder::build([
19
            'services' => [],
20
            'factories' => [],
21
            'config' => []
22
        ]);
23
24
        $this->assertInstanceOf(Container::class, $container);
25
    }
26
27
    public function testItShouldThrowInvalidArgumentExceptionWithInvalidSimpleServiceConfig(): void
28
    {
29
        $this->expectException(InvalidArgumentException::class);
30
        ContainerBuilder::build([
31
            'services' => [
32
                'some.service' => function () {
33
                }
34
            ],
35
            'factories' => [],
36
            'config' => []
37
        ]);
38
    }
39
40
    public function testItShouldThrowInvalidArgumentExceptionWithInvalidServiceClassConfig(): void
41
    {
42
        $this->expectException(InvalidArgumentException::class);
43
        ContainerBuilder::build([
44
            'services' => [
45
                'some.service' => [
46
                    'class' => function () {
47
                    }
48
                ]
49
            ],
50
            'factories' => [],
51
            'config' => []
52
        ]);
53
    }
54
55
    public function testItShouldThrowInvalidArgumentExceptionWithInvalidServiceConfig(): void
56
    {
57
        $this->expectException(InvalidArgumentException::class);
58
        ContainerBuilder::build([
59
            'services' => [
60
                'some.service' => [
61
                    function () {
62
                    }
63
                ]
64
            ],
65
            'factories' => [],
66
            'config' => []
67
        ]);
68
    }
69
70
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithInvokables(): void
71
    {
72
        $container = ContainerBuilder::build([
73
            'services' => [
74
                SplStack::class => SplStack::class,
75
            ],
76
            'config' => []
77
        ], true);
78
79
        $this->assertInstanceOf(Container::class, $container);
80
        $this->assertInstanceOf(SplStack::class, $container->get(SplStack::class));
81
    }
82
83
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithFactories(): void
84
    {
85
        $container = ContainerBuilder::build([
86
            'factories' => [
87
                'some.test.class' => SomeTestFactory::class,
88
            ],
89
            'config' => []
90
        ], true);
91
92
        $this->assertInstanceOf(Container::class, $container);
93
        $this->assertInstanceOf(SomeTestClass::class, $container->get('some.test.class'));
94
    }
95
96
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithComplexFactories(): void
97
    {
98
        $container = ContainerBuilder::build([
99
            'factories' => [
100
                'some.test.class' => [SomeTestFactory::class, 'buzz'],
101
            ],
102
            'config' => []
103
        ], true);
104
105
        $this->assertInstanceOf(Container::class, $container);
106
        $this->assertInstanceOf(SomeTestClass::class, $container->get('some.test.class'));
107
    }
108
109
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithAnonymousFunctionFactories(): void
110
    {
111
        $container = ContainerBuilder::build([
112
            'factories' => [
113
                'some.test.class' => function (ContainerInterface $container) {
0 ignored issues
show
Unused Code introduced by
The parameter $container is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

113
                'some.test.class' => function (/** @scrutinizer ignore-unused */ ContainerInterface $container) {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
114
                    return new SplStack();
115
                },
116
            ],
117
            'config' => []
118
        ], true);
119
120
        $this->assertInstanceOf(Container::class, $container);
121
        $this->assertInstanceOf(SplStack::class, $container->get('some.test.class'));
122
    }
123
124
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithConditionals(): void
125
    {
126
        $container = ContainerBuilder::build([
127
            'services' => [
128
                InvalidArgumentException::class => [
129
                    'class' => InvalidArgumentException::class,
130
                    'arguments' => [
131
                        'message' => 'Oh Oh!!',
132
                        'code' => 0,
133
                        'previous' => null,
134
                    ]
135
                ],
136
            ],
137
            'config' => []
138
        ], true);
139
140
        $this->assertInstanceOf(Container::class, $container);
141
        $this->assertInstanceOf(InvalidArgumentException::class, $container->get(InvalidArgumentException::class));
142
    }
143
144
    public function testItShouldCreateAConfiguredContainerFromFrameworkConfigWithAliases(): void
145
    {
146
        $container = ContainerBuilder::build([
147
            'services' => [
148
                SplStack::class => SplStack::class,
149
                'some.alias' => SplStack::class,
150
            ],
151
            'config' => []
152
        ], true);
153
154
        $this->assertInstanceOf(Container::class, $container);
155
        $this->assertInstanceOf(SplStack::class, $container->get('some.alias'));
156
    }
157
}
158