Completed
Push — pull-request/8107 ( aa76b1 )
by Kamil
52:27 queued 23:45
created

CompositeRequestResolverPassTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 110
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 7
dl 0
loc 110
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A it_collects_tagged_request_based_channel_contexts() 0 16 1
A it_collects_tagged_request_based_channel_contexts_with_custom_priority() 0 16 1
A it_does_not_add_method_calls_to_the_overriding_service_if_the_composite_service_is_overridden() 0 17 1
A it_still_adds_method_calls_to_composite_context_even_if_it_was_overridden() 0 17 1
A registerCompilerPass() 0 4 1
A assertContainerBuilderNotHasServiceDefinitionWithMethodCall() 0 12 1
1
<?php
2
3
/*
4
 * This file is part of the Sylius package.
5
 *
6
 * (c) Paweł Jędrzejewski
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
namespace Sylius\Bundle\ChannelBundle\Tests\DependencyInjection\Compiler;
15
16
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractCompilerPassTestCase;
17
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\DefinitionHasMethodCallConstraint;
18
use Sylius\Bundle\ChannelBundle\DependencyInjection\Compiler\CompositeRequestResolverPass;
19
use Symfony\Component\DependencyInjection\ContainerBuilder;
20
use Symfony\Component\DependencyInjection\Definition;
21
use Symfony\Component\DependencyInjection\Reference;
22
23
/**
24
 * @author Kamil Kokot <[email protected]>
25
 */
26
class CompositeRequestResolverPassTest extends AbstractCompilerPassTestCase
27
{
28
    /**
29
     * @test
30
     */
31
    public function it_collects_tagged_request_based_channel_contexts(): void
32
    {
33
        $this->setDefinition('sylius.context.channel.request_based.resolver.composite', new Definition());
34
        $this->setDefinition(
35
            'sylius.context.channel.request_based.resolver.tagged_one',
36
            (new Definition())->addTag('sylius.context.channel.request_based.resolver')
37
        );
38
39
        $this->compile();
40
41
        $this->assertContainerBuilderHasServiceDefinitionWithMethodCall(
42
            'sylius.context.channel.request_based.resolver',
43
            'addResolver',
44
            [new Reference('sylius.context.channel.request_based.resolver.tagged_one')]
45
        );
46
    }
47
48
    /**
49
     * @test
50
     */
51
    public function it_collects_tagged_request_based_channel_contexts_with_custom_priority(): void
52
    {
53
        $this->setDefinition('sylius.context.channel.request_based.resolver.composite', new Definition());
54
        $this->setDefinition(
55
            'sylius.context.channel.request_based.resolver.tagged_one',
56
            (new Definition())->addTag('sylius.context.channel.request_based.resolver', ['priority' => 42])
57
        );
58
59
        $this->compile();
60
61
        $this->assertContainerBuilderHasServiceDefinitionWithMethodCall(
62
            'sylius.context.channel.request_based.resolver',
63
            'addResolver',
64
            [new Reference('sylius.context.channel.request_based.resolver.tagged_one'), 42]
65
        );
66
    }
67
68
    /**
69
     * @test
70
     */
71
    public function it_does_not_add_method_calls_to_the_overriding_service_if_the_composite_service_is_overridden(): void
72
    {
73
        $this->setDefinition('sylius.context.channel.request_based.resolver', new Definition());
74
        $this->setDefinition('sylius.context.channel.request_based.resolver.composite', new Definition());
75
        $this->setDefinition(
76
            'sylius.context.channel.request_based.resolver.tagged_one',
77
            (new Definition())->addTag('sylius.context.channel.request_based.resolver')
78
        );
79
80
        $this->compile();
81
82
        $this->assertContainerBuilderNotHasServiceDefinitionWithMethodCall(
83
            'sylius.context.channel.request_based.resolver',
84
            'addResolver',
85
            [new Reference('sylius.context.channel.request_based.resolver.tagged_one')]
86
        );
87
    }
88
89
    /**
90
     * @test
91
     */
92
    public function it_still_adds_method_calls_to_composite_context_even_if_it_was_overridden(): void
93
    {
94
        $this->setDefinition('sylius.context.channel.request_based.resolver', new Definition());
95
        $this->setDefinition('sylius.context.channel.request_based.resolver.composite', new Definition());
96
        $this->setDefinition(
97
            'sylius.context.channel.request_based.resolver.tagged_one',
98
            (new Definition())->addTag('sylius.context.channel.request_based.resolver')
99
        );
100
101
        $this->compile();
102
103
        $this->assertContainerBuilderHasServiceDefinitionWithMethodCall(
104
            'sylius.context.channel.request_based.resolver.composite',
105
            'addResolver',
106
            [new Reference('sylius.context.channel.request_based.resolver.tagged_one')]
107
        );
108
    }
109
110
    /**
111
     * {@inheritdoc}
112
     */
113
    protected function registerCompilerPass(ContainerBuilder $container): void
114
    {
115
        $container->addCompilerPass(new CompositeRequestResolverPass());
116
    }
117
118
    /**
119
     * @param string $serviceId
120
     * @param string $method
121
     * @param array $arguments
122
     */
123
    private function assertContainerBuilderNotHasServiceDefinitionWithMethodCall(
124
        string $serviceId,
125
        string $method,
126
        array $arguments
127
    ): void {
128
        $definition = $this->container->findDefinition($serviceId);
129
130
        self::assertThat(
131
            $definition,
132
            new \PHPUnit_Framework_Constraint_Not(new DefinitionHasMethodCallConstraint($method, $arguments))
133
        );
134
    }
135
}
136