Completed
Pull Request — master (#7724)
by
unknown
09:18
created

NamingStrategyTest::underscoreNamingUpper()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Tests\ORM\Mapping;
6
7
use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy;
8
use Doctrine\ORM\Mapping\Factory\NamingStrategy;
9
use Doctrine\ORM\Mapping\Factory\UnderscoreNamingStrategy;
10
use Doctrine\ORM\Mapping\Factory\UnderscorePluralNamingStrategy;
11
use Doctrine\Tests\ORM\Mapping\NamingStrategy\JoinColumnClassNamingStrategy;
12
use Doctrine\Tests\OrmTestCase;
13
use const CASE_LOWER;
14
use const CASE_UPPER;
15
16
/**
17
 * @group DDC-559
18
 */
19
class NamingStrategyTest extends OrmTestCase
20
{
21
    /**
22
     * @return DefaultNamingStrategy
23
     */
24
    private static function defaultNaming()
25
    {
26
        return new DefaultNamingStrategy();
27
    }
28
29
    /**
30
     * @return UnderscoreNamingStrategy
31
     */
32
    private static function underscoreNamingLower()
33
    {
34
        return new UnderscoreNamingStrategy(CASE_LOWER);
35
    }
36
37
    /**
38
     * @return UnderscoreNamingStrategy
39
     */
40
    private static function underscoreNamingUpper()
41
    {
42
        return new UnderscoreNamingStrategy(CASE_UPPER);
43
    }
44
45
    /**
46
     * @return UnderscoreNamingStrategy
47
     */
48
    private static function underscorePluralNamingLower()
49
    {
50
        return new UnderscorePluralNamingStrategy(CASE_LOWER);
0 ignored issues
show
Bug Best Practice introduced by
The expression return new Doctrine\ORM\...ingStrategy(CASE_LOWER) returns the type Doctrine\ORM\Mapping\Fac...orePluralNamingStrategy which is incompatible with the documented return type Doctrine\ORM\Mapping\Fac...nderscoreNamingStrategy.
Loading history...
51
    }
52
53
    /**
54
     * @return UnderscoreNamingStrategy
55
     */
56
    private static function underscorePluralNamingUpper()
57
    {
58
        return new UnderscorePluralNamingStrategy(CASE_UPPER);
0 ignored issues
show
Bug Best Practice introduced by
The expression return new Doctrine\ORM\...ingStrategy(CASE_UPPER) returns the type Doctrine\ORM\Mapping\Fac...orePluralNamingStrategy which is incompatible with the documented return type Doctrine\ORM\Mapping\Fac...nderscoreNamingStrategy.
Loading history...
59
    }
60
61
    /**
62
     * Data Provider for NamingStrategy#classToTableName
63
     *
64
     * @return array
65
     */
66
    public static function dataClassToTableName()
67
    {
68
        return [
69
            // DefaultNamingStrategy
70
            [
71
                self::defaultNaming(),
72
                'SomeClassName',
73
                'SomeClassName',
74
            ],
75
            [
76
                self::defaultNaming(),
77
                'SomeClassName',
78
                '\SomeClassName',
79
            ],
80
            [
81
                self::defaultNaming(),
82
                'Name',
83
                '\Some\Class\Name',
84
            ],
85
86
            // UnderscoreNamingStrategy
87
            [
88
                self::underscoreNamingLower(),
89
                'some_class_name',
90
                '\Name\Space\SomeClassName',
91
            ],
92
            [
93
                self::underscoreNamingLower(),
94
                'name',
95
                '\Some\Class\Name',
96
            ],
97
            [
98
                self::underscoreNamingUpper(),
99
                'SOME_CLASS_NAME',
100
                '\Name\Space\SomeClassName',
101
            ],
102
            [
103
                self::underscoreNamingUpper(),
104
                'NAME',
105
                '\Some\Class\Name',
106
            ],
107
108
            // UnderscorePluralNamingStrategy
109
            [
110
                self::underscorePluralNamingLower(),
111
                'some_class_names',
112
                '\Name\Space\SomeClassName',
113
            ],
114
            [
115
                self::underscorePluralNamingLower(),
116
                'names',
117
                '\Some\Class\Name',
118
            ],
119
            [
120
                self::underscorePluralNamingUpper(),
121
                'SOME_CLASS_NAMES',
122
                '\Name\Space\SomeClassName',
123
            ],
124
            [
125
                self::underscorePluralNamingUpper(),
126
                'NAMES',
127
                '\Some\Class\Name',
128
            ],
129
        ];
130
    }
131
132
    /**
133
     * @dataProvider dataClassToTableName
134
     */
135
    public function testClassToTableName(NamingStrategy $strategy, $expected, $className) : void
136
    {
137
        self::assertEquals($expected, $strategy->classToTableName($className));
138
    }
139
140
    /**
141
     * Data Provider for NamingStrategy#propertyToColumnName
142
     *
143
     * @return array
144
     */
145
    public static function dataPropertyToColumnName()
146
    {
147
        return [
148
            // DefaultNamingStrategy
149
            [
150
                self::defaultNaming(),
151
                'someProperty',
152
                'someProperty',
153
            ],
154
            [
155
                self::defaultNaming(),
156
                'SOME_PROPERTY',
157
                'SOME_PROPERTY',
158
            ],
159
            [
160
                self::defaultNaming(),
161
                'some_property',
162
                'some_property',
163
            ],
164
165
            // UnderscoreNamingStrategy
166
            [
167
                self::underscoreNamingLower(),
168
                'some_property',
169
                'someProperty',
170
            ],
171
            [
172
                self::underscoreNamingUpper(),
173
                'SOME_PROPERTY',
174
                'someProperty',
175
            ],
176
            [
177
                self::underscoreNamingUpper(),
178
                'SOME_PROPERTY',
179
                'some_property',
180
            ],
181
            [
182
                self::underscoreNamingUpper(),
183
                'SOME_PROPERTY',
184
                'SOME_PROPERTY',
185
            ],
186
187
            // UnderscorePluralNamingStrategy
188
            [
189
                self::underscorePluralNamingLower(),
190
                'some_property',
191
                'someProperty',
192
            ],
193
            [
194
                self::underscorePluralNamingUpper(),
195
                'SOME_PROPERTY',
196
                'someProperty',
197
            ],
198
            [
199
                self::underscorePluralNamingUpper(),
200
                'SOME_PROPERTY',
201
                'some_property',
202
            ],
203
            [
204
                self::underscorePluralNamingUpper(),
205
                'SOME_PROPERTY',
206
                'SOME_PROPERTY',
207
            ],
208
        ];
209
    }
210
211
    /**
212
     * @param string $expected
213
     * @param string $propertyName
214
     *
215
     * @dataProvider dataPropertyToColumnName
216
     */
217
    public function testPropertyToColumnName(NamingStrategy $strategy, $expected, $propertyName) : void
218
    {
219
        self::assertEquals($expected, $strategy->propertyToColumnName($propertyName));
220
    }
221
222
    /**
223
     * Data Provider for NamingStrategy#referenceColumnName
224
     *
225
     * @return array
226
     */
227
    public static function dataReferenceColumnName()
228
    {
229
        return [
230
            // DefaultNamingStrategy
231
            [self::defaultNaming(), 'id'],
232
233
            // UnderscoreNamingStrategy
234
            [self::underscoreNamingLower(), 'id'],
235
            [self::underscoreNamingUpper(), 'ID'],
236
237
            // UnderscorePluralNamingStrategy
238
            [self::underscorePluralNamingLower(), 'id'],
239
            [self::underscorePluralNamingUpper(), 'ID'],
240
        ];
241
    }
242
243
    /**
244
     * @param string $expected
245
     *
246
     * @dataProvider dataReferenceColumnName
247
     */
248
    public function testReferenceColumnName(NamingStrategy $strategy, $expected) : void
249
    {
250
        self::assertEquals($expected, $strategy->referenceColumnName());
251
    }
252
253
    /**
254
     * Data Provider for NamingStrategy#joinColumnName
255
     *
256
     * @return array
257
     */
258
    public static function dataJoinColumnName()
259
    {
260
        return [
261
            // DefaultNamingStrategy
262
            [self::defaultNaming(), 'someColumn_id', 'someColumn', null],
263
            [self::defaultNaming(), 'some_column_id', 'some_column', null],
264
265
            // UnderscoreNamingStrategy
266
            [self::underscoreNamingLower(), 'some_column_id', 'someColumn', null],
267
            [self::underscoreNamingUpper(), 'SOME_COLUMN_ID', 'someColumn', null],
268
            // UnderscorePluralNamingStrategy
269
            [self::underscorePluralNamingLower(), 'some_column_id', 'someColumn', null],
270
            [self::underscorePluralNamingUpper(), 'SOME_COLUMN_ID', 'someColumn', null],
271
            // JoinColumnClassNamingStrategy
272
            [new JoinColumnClassNamingStrategy(), 'classname_someColumn_id', 'someColumn', 'Some\ClassName'],
273
            [new JoinColumnClassNamingStrategy(), 'classname_some_column_id', 'some_column', 'ClassName'],
274
        ];
275
    }
276
277
    /**
278
     * @param string $expected
279
     * @param string $propertyName
280
     *
281
     * @dataProvider dataJoinColumnName
282
     */
283
    public function testJoinColumnName(NamingStrategy $strategy, $expected, $propertyName, $className = null) : void
284
    {
285
        self::assertEquals($expected, $strategy->joinColumnName($propertyName, $className));
286
    }
287
288
    /**
289
     * Data Provider for NamingStrategy#joinTableName
290
     *
291
     * @return array
292
     */
293
    public static function dataJoinTableName()
294
    {
295
        return [
296
            // DefaultNamingStrategy
297
            [
298
                self::defaultNaming(),
299
                'someclassname_classname',
300
                'SomeClassName',
301
                'Some\ClassName',
302
                null,
303
            ],
304
            [
305
                self::defaultNaming(),
306
                'someclassname_classname',
307
                '\SomeClassName',
308
                'ClassName',
309
                null,
310
            ],
311
            [
312
                self::defaultNaming(),
313
                'name_classname',
314
                '\Some\Class\Name',
315
                'ClassName',
316
                null,
317
            ],
318
319
            // UnderscoreNamingStrategy
320
            [
321
                self::underscoreNamingLower(),
322
                'some_class_name_class_name',
323
                'SomeClassName',
324
                'Some\ClassName',
325
                null,
326
            ],
327
            [
328
                self::underscoreNamingLower(),
329
                'some_class_name_class_name',
330
                '\SomeClassName',
331
                'ClassName',
332
                null,
333
            ],
334
            [
335
                self::underscoreNamingLower(),
336
                'name_class_name',
337
                '\Some\Class\Name',
338
                'ClassName',
339
                null,
340
            ],
341
342
            [
343
                self::underscoreNamingUpper(),
344
                'SOME_CLASS_NAME_CLASS_NAME',
345
                'SomeClassName',
346
                'Some\ClassName',
347
                null,
348
            ],
349
            [
350
                self::underscoreNamingUpper(),
351
                'SOME_CLASS_NAME_CLASS_NAME',
352
                '\SomeClassName',
353
                'ClassName',
354
                null,
355
            ],
356
            [
357
                self::underscoreNamingUpper(),
358
                'NAME_CLASS_NAME',
359
                '\Some\Class\Name',
360
                'ClassName',
361
                null,
362
            ],
363
364
            // UnderscorePluralNamingStrategy
365
            [
366
                self::underscorePluralNamingLower(),
367
                'some_class_name_class_name',
368
                'SomeClassName',
369
                'Some\ClassName',
370
                null,
371
            ],
372
            [
373
                self::underscorePluralNamingLower(),
374
                'some_class_name_class_name',
375
                '\SomeClassName',
376
                'ClassName',
377
                null,
378
            ],
379
            [
380
                self::underscorePluralNamingLower(),
381
                'name_class_name',
382
                '\Some\Class\Name',
383
                'ClassName',
384
                null,
385
            ],
386
387
            [
388
                self::underscorePluralNamingUpper(),
389
                'SOME_CLASS_NAME_CLASS_NAME',
390
                'SomeClassName',
391
                'Some\ClassName',
392
                null,
393
            ],
394
            [
395
                self::underscorePluralNamingUpper(),
396
                'SOME_CLASS_NAME_CLASS_NAME',
397
                '\SomeClassName',
398
                'ClassName',
399
                null,
400
            ],
401
            [
402
                self::underscorePluralNamingUpper(),
403
                'NAME_CLASS_NAME',
404
                '\Some\Class\Name',
405
                'ClassName',
406
                null,
407
            ],
408
        ];
409
    }
410
411
    /**
412
     * @param string $expected
413
     * @param string $ownerEntity
414
     * @param string $associatedEntity
415
     * @param string $propertyName
416
     *
417
     * @dataProvider dataJoinTableName
418
     */
419
    public function testJoinTableName(NamingStrategy $strategy, $expected, $ownerEntity, $associatedEntity, $propertyName = null) : void
420
    {
421
        self::assertEquals($expected, $strategy->joinTableName($ownerEntity, $associatedEntity, $propertyName));
422
    }
423
424
    /**
425
     * Data Provider for NamingStrategy#joinKeyColumnName
426
     *
427
     * @return array
428
     */
429
    public static function dataJoinKeyColumnName()
430
    {
431
        return [
432
            // DefaultNamingStrategy
433
            [
434
                self::defaultNaming(),
435
                'someclassname_id',
436
                'SomeClassName',
437
                null,
438
                null,
439
            ],
440
            [
441
                self::defaultNaming(),
442
                'name_identifier',
443
                '\Some\Class\Name',
444
                'identifier',
445
                null,
446
            ],
447
448
            // UnderscoreNamingStrategy
449
            [
450
                self::underscoreNamingLower(),
451
                'some_class_name_id',
452
                'SomeClassName',
453
                null,
454
                null,
455
            ],
456
            [
457
                self::underscoreNamingLower(),
458
                'class_name_identifier',
459
                '\Some\Class\ClassName',
460
                'identifier',
461
                null,
462
            ],
463
464
            [
465
                self::underscoreNamingUpper(),
466
                'SOME_CLASS_NAME_ID',
467
                'SomeClassName',
468
                null,
469
                null,
470
            ],
471
            [
472
                self::underscoreNamingUpper(),
473
                'CLASS_NAME_IDENTIFIER',
474
                '\Some\Class\ClassName',
475
                'IDENTIFIER',
476
                null,
477
            ],
478
479
            // UnderscorePluralNamingStrategy
480
            [
481
                self::underscorePluralNamingLower(),
482
                'some_class_name_id',
483
                'SomeClassName',
484
                null,
485
                null,
486
            ],
487
            [
488
                self::underscorePluralNamingLower(),
489
                'class_name_identifier',
490
                '\Some\Class\ClassName',
491
                'identifier',
492
                null,
493
            ],
494
495
            [
496
                self::underscorePluralNamingUpper(),
497
                'SOME_CLASS_NAME_ID',
498
                'SomeClassName',
499
                null,
500
                null,
501
            ],
502
            [
503
                self::underscorePluralNamingUpper(),
504
                'CLASS_NAME_IDENTIFIER',
505
                '\Some\Class\ClassName',
506
                'IDENTIFIER',
507
                null,
508
            ],
509
        ];
510
    }
511
512
    /**
513
     * @param string $expected
514
     * @param string $propertyEntityName
515
     * @param string $referencedColumnName
516
     * @param string $propertyName
517
     *
518
     * @dataProvider dataJoinKeyColumnName
519
     */
520
    public function testJoinKeyColumnName(NamingStrategy $strategy, $expected, $propertyEntityName, $referencedColumnName = null, $propertyName = null) : void
521
    {
522
        self::assertEquals($expected, $strategy->joinKeyColumnName($propertyEntityName, $referencedColumnName, $propertyName));
0 ignored issues
show
Unused Code introduced by
The call to Doctrine\ORM\Mapping\Fac...gy::joinKeyColumnName() has too many arguments starting with $propertyName. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

522
        self::assertEquals($expected, $strategy->/** @scrutinizer ignore-call */ joinKeyColumnName($propertyEntityName, $referencedColumnName, $propertyName));

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
523
    }
524
}
525