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

assertContainerBuilderNotHasServiceDefinitionWithMethodCall()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
nc 1
cc 1
eloc 5
nop 3
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