Container::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 1
eloc 1
c 1
b 1
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
3
namespace Bdf\QueueBundle\Tests\Consumption;
4
5
use Bdf\Instantiator\Instantiator;
6
use Bdf\Instantiator\InstantiatorInterface;
7
use Bdf\Queue\Consumer\Receiver\Builder\ReceiverFactory;
8
use Bdf\Queue\Consumer\Receiver\MemoryLimiterReceiver;
9
use Bdf\Queue\Consumer\Receiver\MessageCountLimiterReceiver;
10
use Bdf\Queue\Consumer\Receiver\MessageLoggerReceiver;
11
use Bdf\Queue\Consumer\Receiver\NoFailureReceiver;
12
use Bdf\Queue\Consumer\Receiver\ProcessorReceiver;
13
use Bdf\Queue\Consumer\Receiver\RateLimiterReceiver;
14
use Bdf\Queue\Consumer\Receiver\RetryMessageReceiver;
15
use Bdf\QueueBundle\Consumption\Receiver\ResetServices;
16
use Bdf\QueueBundle\Consumption\Receiver\ResetServicesFactory;
17
use Bdf\QueueBundle\Consumption\ReceiverLoader;
18
use PHPUnit\Framework\TestCase;
19
use Psr\Container\ContainerInterface;
20
use Symfony\Component\HttpKernel\DependencyInjection\ServicesResetter;
21
22
class ReceiverLoaderTest extends TestCase
23
{
24
    private $container;
25
26
    public function setUp(): void
27
    {
28
        parent::setUp();
29
30
        $this->container = new Container();
31
        $this->container->set(InstantiatorInterface::class, new Instantiator($this->container));
32
    }
33
34
    private function getLoader(array $configuration = []): ReceiverLoader
35
    {
36
        $resetFactory = new ResetServicesFactory();
37
        $factory = new ReceiverFactory($this->container);
38
        $factory->addFactory($resetFactory->getReceiverNames(), [$resetFactory, 'create']);
39
40
        return new ReceiverLoader($this->container, $configuration, $factory);
41
    }
42
43
    public function testUnknownDestinationConfig()
44
    {
45
        $loader = $this->getLoader();
46
        $builder = $loader->load('foo');
47
48
        $chain = MessageLoggerReceiver::class.'->'.ProcessorReceiver::class;
49
50
        $this->assertEquals($chain, (string) $builder->build());
51
    }
52
53
    public function testFullConfig()
54
    {
55
        $loader = $this->getLoader([
56
            'foo' => [
57
                'retry' => '1',
58
                'limit' => '2',
59
                'no_failure' => true,
60
                'stop_when_empty' => '',
61
                'max' => '1',
62
                'memory' => '128',
63
                'no_reset' => true,
64
            ],
65
        ]);
66
        $builder = $loader->load('foo');
67
68
        $chain = MemoryLimiterReceiver::class.'->'.MessageCountLimiterReceiver::class.'->'.NoFailureReceiver::class.'->'
69
            .RateLimiterReceiver::class.'->'.RetryMessageReceiver::class.'->'.MessageLoggerReceiver::class.'->'.ProcessorReceiver::class;
70
71
        $this->assertEquals($chain, (string) $builder->build());
72
    }
73
74
    public function testWithoutServiceResetterConfig()
75
    {
76
        $loader = $this->getLoader([
77
            'foo' => [
78
                'retry' => '1',
79
                'limit' => '2',
80
                'no_failure' => true,
81
                'stop_when_empty' => '',
82
                'max' => '1',
83
                'memory' => '128',
84
            ],
85
        ]);
86
        $builder = $loader->load('foo');
87
88
        $chain = MemoryLimiterReceiver::class.'->'.MessageCountLimiterReceiver::class.'->'.NoFailureReceiver::class.'->'
89
            .RateLimiterReceiver::class.'->'.RetryMessageReceiver::class.'->'.MessageLoggerReceiver::class.'->'.ProcessorReceiver::class;
90
91
        $this->assertEquals($chain, (string) $builder->build());
92
    }
93
94
    public function testDefaultConfig()
95
    {
96
        $this->container->set('services_resetter', $this->createMock(ServicesResetter::class));
97
98
        $loader = $this->getLoader([
99
            'foo' => [
100
            ],
101
        ]);
102
        $builder = $loader->load('foo');
103
104
        $chain = ResetServices::class.'->'.MessageLoggerReceiver::class.'->'.ProcessorReceiver::class;
105
106
        $this->assertEquals($chain, (string) $builder->build());
107
    }
108
109
    public function testFullOrderConfig()
110
    {
111
        $this->container->set('services_resetter', $this->createMock(ServicesResetter::class));
112
113
        $loader = $this->getLoader([
114
            'foo' => [
115
                'retry' => '1',
116
                'limit' => '2',
117
                'no_failure' => true,
118
                'stop_when_empty' => '',
119
                'max' => '1',
120
                'memory' => '128',
121
            ],
122
        ]);
123
        $builder = $loader->load('foo');
124
125
        $chain = ResetServices::class.'->'.MemoryLimiterReceiver::class.'->'.MessageCountLimiterReceiver::class.'->'.NoFailureReceiver::class.'->'
126
            .RateLimiterReceiver::class.'->'.RetryMessageReceiver::class.'->'.MessageLoggerReceiver::class.'->'.ProcessorReceiver::class;
127
128
        $this->assertEquals($chain, (string) $builder->build());
129
    }
130
}
131
132
class Container implements ContainerInterface
133
{
134
    private $service;
135
136
    public function __construct(array $service = [])
137
    {
138
        $this->service = $service;
139
    }
140
141
    public function set(string $id, $service): void
142
    {
143
        $this->service[$id] = $service;
144
    }
145
146
    public function get(string $id)
147
    {
148
        return $this->service[$id];
149
    }
150
151
    public function has(string $id): bool
152
    {
153
        return isset($this->service[$id]);
154
    }
155
}
156