Failed Conditions
Pull Request — master (#7724)
by
unknown
09:25
created

NamingStrategyTest   A

Complexity

Total Complexity 18

Size/Duplication

Total Lines 576
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 266
c 3
b 0
f 0
dl 0
loc 576
rs 10
wmc 18

18 Methods

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

593
        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...
594
    }
595
}
596