Completed
Push — reproduce-taxon-autocompletion ( 8c649e )
by Kamil
22:05
created

CompositeRequestResolverPassTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 107
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 7
dl 0
loc 107
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 9 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
namespace Sylius\Bundle\ChannelBundle\Tests\DependencyInjection\Compiler;
13
14
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractCompilerPassTestCase;
15
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\DefinitionHasMethodCallConstraint;
16
use Sylius\Bundle\ChannelBundle\DependencyInjection\Compiler\CompositeRequestResolverPass;
17
use Symfony\Component\DependencyInjection\ContainerBuilder;
18
use Symfony\Component\DependencyInjection\Definition;
19
use Symfony\Component\DependencyInjection\Reference;
20
21
/**
22
 * @author Kamil Kokot <[email protected]>
23
 */
24
class CompositeRequestResolverPassTest extends AbstractCompilerPassTestCase
25
{
26
    /**
27
     * @test
28
     */
29
    public function it_collects_tagged_request_based_channel_contexts()
30
    {
31
        $this->setDefinition('sylius.context.channel.request_based.resolver.composite', new Definition());
32
        $this->setDefinition(
33
            'sylius.context.channel.request_based.resolver.tagged_one',
34
            (new Definition())->addTag('sylius.context.channel.request_based.resolver')
35
        );
36
37
        $this->compile();
38
39
        $this->assertContainerBuilderHasServiceDefinitionWithMethodCall(
40
            'sylius.context.channel.request_based.resolver',
41
            'addResolver',
42
            [new Reference('sylius.context.channel.request_based.resolver.tagged_one')]
43
        );
44
    }
45
46
    /**
47
     * @test
48
     */
49
    public function it_collects_tagged_request_based_channel_contexts_with_custom_priority()
50
    {
51
        $this->setDefinition('sylius.context.channel.request_based.resolver.composite', new Definition());
52
        $this->setDefinition(
53
            'sylius.context.channel.request_based.resolver.tagged_one',
54
            (new Definition())->addTag('sylius.context.channel.request_based.resolver', ['priority' => 42])
55
        );
56
57
        $this->compile();
58
59
        $this->assertContainerBuilderHasServiceDefinitionWithMethodCall(
60
            'sylius.context.channel.request_based.resolver',
61
            'addResolver',
62
            [new Reference('sylius.context.channel.request_based.resolver.tagged_one'), 42]
63
        );
64
    }
65
66
    /**
67
     * @test
68
     */
69
    public function it_does_not_add_method_calls_to_the_overriding_service_if_the_composite_service_is_overridden()
70
    {
71
        $this->setDefinition('sylius.context.channel.request_based.resolver', new Definition());
72
        $this->setDefinition('sylius.context.channel.request_based.resolver.composite', new Definition());
73
        $this->setDefinition(
74
            'sylius.context.channel.request_based.resolver.tagged_one',
75
            (new Definition())->addTag('sylius.context.channel.request_based.resolver')
76
        );
77
78
        $this->compile();
79
80
        $this->assertContainerBuilderNotHasServiceDefinitionWithMethodCall(
81
            'sylius.context.channel.request_based.resolver',
82
            'addResolver',
83
            [new Reference('sylius.context.channel.request_based.resolver.tagged_one')]
84
        );
85
    }
86
87
    /**
88
     * @test
89
     */
90
    public function it_still_adds_method_calls_to_composite_context_even_if_it_was_overridden()
91
    {
92
        $this->setDefinition('sylius.context.channel.request_based.resolver', new Definition());
93
        $this->setDefinition('sylius.context.channel.request_based.resolver.composite', new Definition());
94
        $this->setDefinition(
95
            'sylius.context.channel.request_based.resolver.tagged_one',
96
            (new Definition())->addTag('sylius.context.channel.request_based.resolver')
97
        );
98
99
        $this->compile();
100
101
        $this->assertContainerBuilderHasServiceDefinitionWithMethodCall(
102
            'sylius.context.channel.request_based.resolver.composite',
103
            'addResolver',
104
            [new Reference('sylius.context.channel.request_based.resolver.tagged_one')]
105
        );
106
    }
107
108
    /**
109
     * {@inheritdoc}
110
     */
111
    protected function registerCompilerPass(ContainerBuilder $container)
112
    {
113
        $container->addCompilerPass(new CompositeRequestResolverPass());
114
    }
115
116
    /**
117
     * @param string $serviceId
118
     * @param string $method
119
     * @param array $arguments
120
     */
121
    private function assertContainerBuilderNotHasServiceDefinitionWithMethodCall($serviceId, $method, $arguments)
122
    {
123
        $definition = $this->container->findDefinition($serviceId);
124
125
        self::assertThat(
126
            $definition,
127
            new \PHPUnit_Framework_Constraint_Not(new DefinitionHasMethodCallConstraint($method, $arguments))
128
        );
129
    }
130
}
131