Completed
Push — master ( bbd2b1...f08c3b )
by Kamil
31:47 queued 09:37
created

SyliusUserExtensionTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 118
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

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

6 Methods

Rating   Name   Duplication   Size   Complexity  
A it_creates_default_resource_factory_by_default() 0 14 1
A it_decorates_user_factory_if_its_configuration_has_encoder_specified() 0 17 1
A it_decorates_user_factory_if_there_is_a_global_encoder_specified_in_the_configuration() 0 16 1
A it_decorates_user_factory_using_the_most_specific_encoder_configured() 0 18 1
A it_creates_a_update_user_encoder_listener_for_each_user_type() 0 34 1
A getContainerExtensions() 0 6 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\UserBundle\Tests\DependencyInjection;
15
16
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
17
use PHPUnit\Framework\Assert;
18
use Sylius\Bundle\UserBundle\DependencyInjection\SyliusUserExtension;
19
use Sylius\Bundle\UserBundle\EventListener\UpdateUserEncoderListener;
20
use Sylius\Bundle\UserBundle\Factory\UserWithEncoderFactory;
21
use Sylius\Component\Resource\Factory\Factory;
22
use Sylius\Component\User\Model\User;
23
use Sylius\Component\User\Model\UserInterface;
24
25
final class SyliusUserExtensionTest extends AbstractExtensionTestCase
26
{
27
    /** @test */
28
    public function it_creates_default_resource_factory_by_default(): void
29
    {
30
        $this->load([
31
            'resources' => [
32
                'admin' => [
33
                    'user' => [],
34
                ],
35
            ],
36
        ]);
37
38
        $factoryDefinition = $this->container->getDefinition('sylius.factory.admin_user');
39
40
        Assert::assertSame(Factory::class, $factoryDefinition->getClass());
41
    }
42
43
    /** @test */
44
    public function it_decorates_user_factory_if_its_configuration_has_encoder_specified(): void
45
    {
46
        $this->load([
47
            'resources' => [
48
                'admin' => [
49
                    'user' => [
50
                        'encoder' => 'customencoder',
51
                    ],
52
                ],
53
            ],
54
        ]);
55
56
        $factoryDefinition = $this->container->getDefinition('sylius.factory.admin_user');
57
58
        Assert::assertSame(UserWithEncoderFactory::class, $factoryDefinition->getClass());
59
        Assert::assertSame('customencoder', $factoryDefinition->getArgument(1));
60
    }
61
62
    /** @test */
63
    public function it_decorates_user_factory_if_there_is_a_global_encoder_specified_in_the_configuration(): void
64
    {
65
        $this->load([
66
            'encoder' => 'customencoder',
67
            'resources' => [
68
                'admin' => [
69
                    'user' => [],
70
                ],
71
            ],
72
        ]);
73
74
        $factoryDefinition = $this->container->getDefinition('sylius.factory.admin_user');
75
76
        Assert::assertSame(UserWithEncoderFactory::class, $factoryDefinition->getClass());
77
        Assert::assertSame('customencoder', $factoryDefinition->getArgument(1));
78
    }
79
80
    /** @test */
81
    public function it_decorates_user_factory_using_the_most_specific_encoder_configured(): void
82
    {
83
        $this->load([
84
            'encoder' => 'customencoder',
85
            'resources' => [
86
                'admin' => [
87
                    'user' => [
88
                        'encoder' => 'evenmorecustomencoder',
89
                    ],
90
                ],
91
            ],
92
        ]);
93
94
        $factoryDefinition = $this->container->getDefinition('sylius.factory.admin_user');
95
96
        Assert::assertSame(UserWithEncoderFactory::class, $factoryDefinition->getClass());
97
        Assert::assertSame('evenmorecustomencoder', $factoryDefinition->getArgument(1));
98
    }
99
100
    /** @test */
101
    public function it_creates_a_update_user_encoder_listener_for_each_user_type(): void
102
    {
103
        $this->load([
104
            'encoder' => 'customencoder',
105
            'resources' => [
106
                'admin' => [
107
                    'user' => [
108
                        'encoder' => 'evenmorecustomencoder',
109
                        'classes' => [
110
                            'model' => 'AdminUserClass',
111
                            'interface' => 'AdminUserInterface',
112
                        ],
113
                    ],
114
                ],
115
                'shop' => [],
116
            ],
117
        ]);
118
119
        $adminUserListenerDefinition = $this->container->getDefinition('sylius.admin_user.listener.update_user_encoder');
120
121
        Assert::assertSame(UpdateUserEncoderListener::class, $adminUserListenerDefinition->getClass());
122
        Assert::assertSame('evenmorecustomencoder', $adminUserListenerDefinition->getArgument(1));
123
        Assert::assertSame('AdminUserClass', $adminUserListenerDefinition->getArgument(2));
124
        Assert::assertSame('AdminUserInterface', $adminUserListenerDefinition->getArgument(3));
125
        Assert::assertSame('_password', $adminUserListenerDefinition->getArgument(4));
126
127
        $shopUserListenerDefinition = $this->container->getDefinition('sylius.shop_user.listener.update_user_encoder');
128
129
        Assert::assertSame(UpdateUserEncoderListener::class, $shopUserListenerDefinition->getClass());
130
        Assert::assertSame('customencoder', $shopUserListenerDefinition->getArgument(1));
131
        Assert::assertSame(User::class, $shopUserListenerDefinition->getArgument(2));
132
        Assert::assertSame(UserInterface::class, $shopUserListenerDefinition->getArgument(3));
133
        Assert::assertSame('_password', $shopUserListenerDefinition->getArgument(4));
134
    }
135
136
    protected function getContainerExtensions(): iterable
137
    {
138
        return [
139
            new SyliusUserExtension(),
140
        ];
141
    }
142
}
143