Completed
Push — 1.0-conflict-with-twig10 ( 2d43e5 )
by Kamil
73:48 queued 41:54
created

ConfigurationTest::it_requires_only_grid_name()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 26
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 15
nc 1
nop 0
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\GridBundle\Tests\DependencyInjection;
15
16
use Matthias\SymfonyConfigTest\PhpUnit\ConfigurationTestCaseTrait;
17
use Sylius\Bundle\GridBundle\DependencyInjection\Configuration;
18
use Sylius\Bundle\GridBundle\Doctrine\ORM\Driver;
19
20
final class ConfigurationTest extends \PHPUnit_Framework_TestCase
21
{
22
    use ConfigurationTestCaseTrait;
23
24
    /**
25
     * @test
26
     */
27
    public function it_requires_only_grid_name(): void
28
    {
29
        $this->assertProcessedConfigurationEquals(
30
            [[
31
                'grids' => [
32
                    'sylius_admin_tax_category' => null,
33
                ],
34
            ]],
35
            [
36
                'grids' => [
37
                    'sylius_admin_tax_category' => [
38
                        'driver' => [
39
                            'name' => Driver::NAME,
40
                            'options' => [],
41
                        ],
42
                        'sorting' => [],
43
                        'limits' => [10, 25, 50],
44
                        'fields' => [],
45
                        'filters' => [],
46
                        'actions' => [],
47
                    ],
48
                ],
49
            ],
50
            'grids'
51
        );
52
    }
53
54
    /**
55
     * @test
56
     */
57
    public function it_uses_doctrine_orm_as_default_driver(): void
58
    {
59
        $this->assertProcessedConfigurationEquals(
60
            [[]],
61
            ['drivers' => ['doctrine/orm']],
62
            'drivers'
63
        );
64
    }
65
66
    /**
67
     * @test
68
     */
69
    public function it_has_empty_action_and_filter_templates_by_default(): void
70
    {
71
        $this->assertProcessedConfigurationEquals(
72
            [[]],
73
            [
74
                'templates' => [
75
                    'action' => [],
76
                    'filter' => [],
77
                ],
78
            ],
79
            'templates'
80
        );
81
    }
82
83
    /**
84
     * @test
85
     */
86
    public function its_driver_cannot_be_empty(): void
87
    {
88
        $this->assertConfigurationIsInvalid([[
89
            'grids' => [
90
                'sylius_admin_tax_category' => [
91
                    'driver' => [
92
                        'name' => null,
93
                    ],
94
                ],
95
            ],
96
        ]]);
97
    }
98
99
    /**
100
     * @test
101
     */
102
    public function it_requires_field_type_to_be_defined(): void
103
    {
104
        $this->assertConfigurationIsInvalid([[
105
            'grids' => [
106
                'sylius_admin_tax_category' => [
107
                    'fields' => [
108
                        'code' => [
109
                            'label' => 'Internal code',
110
                        ],
111
                    ],
112
                ],
113
            ],
114
        ]]);
115
    }
116
117
    /**
118
     * @test
119
     */
120
    public function its_base_sorting_can_be_overwritten(): void
121
    {
122
        $this->assertProcessedConfigurationEquals(
123
            [
124
                ['grids' => [
125
                    'sylius_admin_tax_category' => [
126
                        'sorting' => ['code' => 'asc'],
127
                    ],
128
                ]],
129
                ['grids' => [
130
                    'sylius_admin_tax_category' => [
131
                        'sorting' => ['name' => 'desc'],
132
                    ],
133
                ]],
134
            ],
135
            ['grids' => [
136
                'sylius_admin_tax_category' => [
137
                    'sorting' => ['name' => 'desc'],
138
                ],
139
            ]],
140
            'grids.*.sorting'
141
        );
142
143
        $this->assertProcessedConfigurationEquals(
144
            [
145
                ['grids' => [
146
                    'sylius_admin_tax_category' => [
147
                        'sorting' => ['code' => 'asc'],
148
                    ],
149
                ]],
150
                ['grids' => [
151
                    'sylius_admin_tax_category' => [
152
                        'sorting' => null,
153
                    ],
154
                ]],
155
            ],
156
            ['grids' => [
157
                'sylius_admin_tax_category' => [
158
                    'sorting' => [],
159
                ],
160
            ]],
161
            'grids.*.sorting'
162
        );
163
    }
164
165
    /**
166
     * @test
167
     */
168
    public function its_sorting_order_can_be_only_ascending_or_descending(): void
169
    {
170
        $this->assertConfigurationIsValid([[
171
            'grids' => [
172
                'sylius_admin_tax_category' => [
173
                    'sorting' => ['code' => 'asc'],
174
                ],
175
            ],
176
        ]]);
177
178
        $this->assertConfigurationIsValid([[
179
            'grids' => [
180
                'sylius_admin_tax_category' => [
181
                    'sorting' => ['code' => 'desc'],
182
                ],
183
            ],
184
        ]]);
185
186
        $this->assertConfigurationIsInvalid([[
187
            'grids' => [
188
                'sylius_admin_tax_category' => [
189
                    'sorting' => ['code' => 'left'],
190
                ],
191
            ],
192
        ]]);
193
194
        $this->assertConfigurationIsInvalid([[
195
            'grids' => [
196
                'sylius_admin_tax_category' => [
197
                    'sorting' => ['code' => null],
198
                ],
199
            ],
200
        ]]);
201
    }
202
203
    /**
204
     * @test
205
     */
206
    public function its_limits_can_only_be_a_collection_of_integers(): void
207
    {
208
        $this->assertConfigurationIsValid([[
209
            'grids' => [
210
                'sylius_admin_tax_category' => [
211
                    'limits' => [10],
212
                ],
213
            ],
214
        ]]);
215
216
        $this->assertConfigurationIsValid([[
217
            'grids' => [
218
                'sylius_admin_tax_category' => [
219
                    'limits' => [10, 25],
220
                ],
221
            ],
222
        ]]);
223
224
        $this->assertConfigurationIsInvalid([[
225
            'grids' => [
226
                'sylius_admin_tax_category' => [
227
                    'limits' => [10.0, 25.0],
228
                ],
229
            ],
230
        ]]);
231
232
        $this->assertConfigurationIsInvalid([[
233
            'grids' => [
234
                'sylius_admin_tax_category' => [
235
                    'limits' => [10, 25, 'surprise!'],
236
                ],
237
            ],
238
        ]]);
239
    }
240
241
    /**
242
     * @test
243
     */
244
    public function its_base_limits_can_be_overwritten(): void
245
    {
246
        $this->assertProcessedConfigurationEquals(
247
            [
248
                ['grids' => [
249
                    'sylius_admin_tax_category' => [
250
                        'limits' => [10, 25],
251
                    ],
252
                ]],
253
                ['grids' => [
254
                    'sylius_admin_tax_category' => [
255
                        'limits' => [6, 12, 24],
256
                    ],
257
                ]],
258
            ],
259
            ['grids' => [
260
                'sylius_admin_tax_category' => [
261
                    'limits' => [6, 12, 24],
262
                ],
263
            ]],
264
            'grids.*.limits'
265
        );
266
267
        $this->assertProcessedConfigurationEquals(
268
            [
269
                ['grids' => [
270
                    'sylius_admin_tax_category' => [
271
                        'limits' => [10, 25, 50],
272
                    ],
273
                ]],
274
                ['grids' => [
275
                    'sylius_admin_tax_category' => [
276
                        'limits' => null,
277
                    ],
278
                ]],
279
            ],
280
            ['grids' => [
281
                'sylius_admin_tax_category' => [
282
                    'limits' => [],
283
                ],
284
            ]],
285
            'grids.*.limits'
286
        );
287
    }
288
289
    /**
290
     * @test
291
     */
292
    public function it_should_throw_an_exception_if_an_invalid_driver_is_enabled(): void
293
    {
294
        $this->assertConfigurationIsInvalid([[
295
            'drivers' => ['doctrine/orm', 'foo/invalid'],
296
        ]]);
297
    }
298
299
    /**
300
     * {@inheritdoc}
301
     */
302
    protected function getConfiguration(): Configuration
303
    {
304
        return new Configuration();
305
    }
306
}
307