Passed
Push — master ( c2b6eb...8c3bb9 )
by Sébastien
09:25
created

ReceiverLoaderTest::setUp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 6
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
/**
23
 *
24
 */
25
class ReceiverLoaderTest extends TestCase
26
{
27
    private $container;
28
29
    public function setUp(): void
30
    {
31
        parent::setUp();
32
33
        $this->container = new Container();
34
        $this->container->set(InstantiatorInterface::class, new Instantiator($this->container));
35
    }
36
37
    private function getLoader(array $configuration = []): ReceiverLoader
38
    {
39
        $resetFactory = new ResetServicesFactory();
40
        $factory = new ReceiverFactory($this->container);
41
        $factory->addFactory($resetFactory->getReceiverNames(), [$resetFactory, 'create']);
42
43
        return new ReceiverLoader($this->container, $configuration, $factory);
44
    }
45
46
    /**
47
     *
48
     */
49
    public function test_unknown_destination_config()
50
    {
51
        $loader = $this->getLoader();
52
        $builder = $loader->load('foo');
53
54
        $chain = MessageLoggerReceiver::class.'->'.ProcessorReceiver::class;
55
56
        $this->assertEquals($chain, (string) $builder->build());
57
    }
58
59
    /**
60
     *
61
     */
62
    public function test_full_config()
63
    {
64
        $loader = $this->getLoader([
65
            'foo' => [
66
                'retry' => '1',
67
                'limit' => '2',
68
                'no_failure' => true,
69
                'stop_when_empty' => '',
70
                'max' => '1',
71
                'memory' => '128',
72
                'no_reset' => true,
73
            ]
74
        ]);
75
        $builder = $loader->load('foo');
76
77
        $chain = MemoryLimiterReceiver::class.'->'.MessageCountLimiterReceiver::class.'->'.NoFailureReceiver::class.'->'
78
            .RateLimiterReceiver::class.'->'.RetryMessageReceiver::class.'->'.MessageLoggerReceiver::class.'->'.ProcessorReceiver::class;
79
80
        $this->assertEquals($chain, (string) $builder->build());
81
    }
82
83
    /**
84
     *
85
     */
86
    public function test_without_service_resetter_config()
87
    {
88
        $loader = $this->getLoader([
89
            'foo' => [
90
                'retry' => '1',
91
                'limit' => '2',
92
                'no_failure' => true,
93
                'stop_when_empty' => '',
94
                'max' => '1',
95
                'memory' => '128',
96
            ]
97
        ]);
98
        $builder = $loader->load('foo');
99
100
        $chain = MemoryLimiterReceiver::class.'->'.MessageCountLimiterReceiver::class.'->'.NoFailureReceiver::class.'->'
101
            .RateLimiterReceiver::class.'->'.RetryMessageReceiver::class.'->'.MessageLoggerReceiver::class.'->'.ProcessorReceiver::class;
102
103
        $this->assertEquals($chain, (string) $builder->build());
104
    }
105
106
    /**
107
     *
108
     */
109
    public function test_default_config()
110
    {
111
        $this->container->set('services_resetter', $this->createMock(ServicesResetter::class));
112
113
        $loader = $this->getLoader([
114
            'foo' => [
115
            ]
116
        ]);
117
        $builder = $loader->load('foo');
118
119
        $chain = ResetServices::class.'->'.MessageLoggerReceiver::class.'->'.ProcessorReceiver::class;
120
121
        $this->assertEquals($chain, (string)$builder->build());
122
    }
123
124
    /**
125
     *
126
     */
127
    public function test_full_order_config()
128
    {
129
        $this->container->set('services_resetter', $this->createMock(ServicesResetter::class));
130
131
        $loader = $this->getLoader([
132
            'foo' => [
133
                'retry' => '1',
134
                'limit' => '2',
135
                'no_failure' => true,
136
                'stop_when_empty' => '',
137
                'max' => '1',
138
                'memory' => '128',
139
            ]
140
        ]);
141
        $builder = $loader->load('foo');
142
143
        $chain = ResetServices::class.'->'.MemoryLimiterReceiver::class.'->'.MessageCountLimiterReceiver::class.'->'.NoFailureReceiver::class.'->'
144
            .RateLimiterReceiver::class.'->'.RetryMessageReceiver::class.'->'.MessageLoggerReceiver::class.'->'.ProcessorReceiver::class;
145
146
        $this->assertEquals($chain, (string)$builder->build());
147
    }
148
}
149
150
151
class Container implements ContainerInterface
152
{
153
    private $service;
154
155
    public function __construct(array $service = [])
156
    {
157
        $this->service = $service;
158
    }
159
160
    public function set(string $id, $service): void
161
    {
162
        $this->service[$id] = $service;
163
    }
164
165
    public function get(string $id)
166
    {
167
        return $this->service[$id];
168
    }
169
170
    public function has(string $id): bool
171
    {
172
        return isset($this->service[$id]);
173
    }
174
}