Completed
Pull Request — 2.6 (#7908)
by Luís
14:56 queued 08:08
created

numberAwareUnderscoreNamingLower()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 1
c 1
b 0
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Tests\ORM\Mapping;
6
7
use Doctrine\ORM\Mapping\DefaultNamingStrategy;
8
use Doctrine\ORM\Mapping\NamingStrategy;
9
use Doctrine\ORM\Mapping\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
    private static function defaultNaming() : DefaultNamingStrategy
21
    {
22
        return new DefaultNamingStrategy();
23
    }
24
25
    private static function underscoreNamingLower() : UnderscoreNamingStrategy
26
    {
27
        return new UnderscoreNamingStrategy(CASE_LOWER);
28
    }
29
30
    private static function underscoreNamingUpper() : UnderscoreNamingStrategy
31
    {
32
        return new UnderscoreNamingStrategy(CASE_UPPER);
33
    }
34
35
    private static function numberAwareUnderscoreNamingLower() : UnderscoreNamingStrategy
36
    {
37
        return new UnderscoreNamingStrategy(CASE_LOWER, true);
38
    }
39
40
    private static function numberAwareUnderscoreNamingUpper() : UnderscoreNamingStrategy
41
    {
42
        return new UnderscoreNamingStrategy(CASE_UPPER, true);
43
    }
44
45
    /**
46
     * Data Provider for NamingStrategy#classToTableName
47
     *
48
     * @return array<NamingStrategy|string>
49
     */
50
    public static function dataClassToTableName() : array
51
    {
52
        return [
53
            // DefaultNamingStrategy
54
            [self::defaultNaming(), 'SomeClassName', 'SomeClassName'],
55
            [self::defaultNaming(), 'SomeClassName', '\SomeClassName'],
56
            [self::defaultNaming(), 'Name', '\Some\Class\Name'],
57
            [self::defaultNaming(), 'Name2Test', '\Some\Class\Name2Test'],
58
59
            // UnderscoreNamingStrategy
60
            [self::underscoreNamingLower(), 'some_class_name', '\Name\Space\SomeClassName'],
61
            [self::underscoreNamingLower(), 'name', '\Some\Class\Name'],
62
            [self::underscoreNamingLower(), 'name2test', '\Some\Class\Name2Test'],
63
            [self::underscoreNamingUpper(), 'SOME_CLASS_NAME', '\Name\Space\SomeClassName'],
64
            [self::underscoreNamingUpper(), 'NAME', '\Some\Class\Name'],
65
            [self::underscoreNamingUpper(), 'NAME2TEST', '\Some\Class\Name2Test'],
66
67
            // NumberAwareUnderscoreNamingStrategy
68
            [self::numberAwareUnderscoreNamingLower(), 'some_class_name', '\Name\Space\SomeClassName'],
69
            [self::numberAwareUnderscoreNamingLower(), 'name', '\Some\Class\Name'],
70
            [self::numberAwareUnderscoreNamingLower(), 'name2_test', '\Some\Class\Name2Test'],
71
            [self::numberAwareUnderscoreNamingLower(), 'name2test', '\Some\Class\Name2test'],
72
            [self::numberAwareUnderscoreNamingUpper(), 'SOME_CLASS_NAME', '\Name\Space\SomeClassName'],
73
            [self::numberAwareUnderscoreNamingUpper(), 'NAME', '\Some\Class\Name'],
74
            [self::numberAwareUnderscoreNamingUpper(), 'NAME2_TEST', '\Some\Class\Name2Test'],
75
            [self::numberAwareUnderscoreNamingUpper(), 'NAME2TEST', '\Some\Class\Name2test'],
76
        ];
77
    }
78
79
    /**
80
     * @dataProvider dataClassToTableName
81
     */
82
    public function testClassToTableName(NamingStrategy $strategy, string $expected, string $className) : void
83
    {
84
        self::assertSame($expected, $strategy->classToTableName($className));
85
    }
86
87
    /**
88
     * Data Provider for NamingStrategy#propertyToColumnName
89
     *
90
     * @return array<NamingStrategy|string>
91
     */
92
    public static function dataPropertyToColumnName() : array
93
    {
94
        return [
95
            // DefaultNamingStrategy
96
            [self::defaultNaming(), 'someProperty', 'someProperty'],
97
            [self::defaultNaming(), 'SOME_PROPERTY', 'SOME_PROPERTY'],
98
            [self::defaultNaming(), 'some_property', 'some_property'],
99
            [self::defaultNaming(), 'base64Encoded', 'base64Encoded'],
100
            [self::defaultNaming(), 'base64_encoded', 'base64_encoded'],
101
102
            // UnderscoreNamingStrategy
103
            [self::underscoreNamingLower(), 'some_property', 'someProperty'],
104
            [self::underscoreNamingLower(), 'base64encoded', 'base64Encoded'],
105
            [self::underscoreNamingLower(), 'base64encoded', 'base64encoded'],
106
            [self::underscoreNamingUpper(), 'SOME_PROPERTY', 'someProperty'],
107
            [self::underscoreNamingUpper(), 'SOME_PROPERTY', 'some_property'],
108
            [self::underscoreNamingUpper(), 'SOME_PROPERTY', 'SOME_PROPERTY'],
109
            [self::underscoreNamingUpper(), 'BASE64ENCODED', 'base64Encoded'],
110
            [self::underscoreNamingUpper(), 'BASE64ENCODED', 'base64encoded'],
111
112
            // NumberAwareUnderscoreNamingStrategy
113
            [self::numberAwareUnderscoreNamingLower(), 'some_property', 'someProperty'],
114
            [self::numberAwareUnderscoreNamingLower(), 'base64_encoded', 'base64Encoded'],
115
            [self::numberAwareUnderscoreNamingLower(), 'base64encoded', 'base64encoded'],
116
            [self::numberAwareUnderscoreNamingUpper(), 'SOME_PROPERTY', 'someProperty'],
117
            [self::numberAwareUnderscoreNamingUpper(), 'SOME_PROPERTY', 'some_property'],
118
            [self::numberAwareUnderscoreNamingUpper(), 'SOME_PROPERTY', 'SOME_PROPERTY'],
119
            [self::numberAwareUnderscoreNamingUpper(), 'BASE64_ENCODED', 'base64Encoded'],
120
            [self::numberAwareUnderscoreNamingUpper(), 'BASE64ENCODED', 'base64encoded'],
121
        ];
122
    }
123
124
    /**
125
     * @dataProvider dataPropertyToColumnName
126
     */
127
    public function testPropertyToColumnName(NamingStrategy $strategy, string $expected, string $propertyName) : void
128
    {
129
        self::assertSame($expected, $strategy->propertyToColumnName($propertyName));
130
    }
131
132
    /**
133
     * Data Provider for NamingStrategy#referenceColumnName
134
     *
135
     * @return array<NamingStrategy|string>
136
     */
137
    public static function dataReferenceColumnName() : array
138
    {
139
        return [
140
            // DefaultNamingStrategy
141
            [self::defaultNaming(), 'id'],
142
143
            // UnderscoreNamingStrategy
144
            [self::underscoreNamingLower(), 'id'],
145
            [self::underscoreNamingUpper(), 'ID'],
146
147
            // NumberAwareUnderscoreNamingStrategy
148
            [self::numberAwareUnderscoreNamingLower(), 'id'],
149
            [self::numberAwareUnderscoreNamingUpper(), 'ID'],
150
        ];
151
    }
152
153
    /**
154
     * @dataProvider dataReferenceColumnName
155
     */
156
    public function testReferenceColumnName(NamingStrategy $strategy, string $expected) : void
157
    {
158
        self::assertSame($expected, $strategy->referenceColumnName());
159
    }
160
161
    /**
162
     * Data Provider for NamingStrategy#joinColumnName
163
     *
164
     * @return array<NamingStrategy|string|null>
165
     */
166
    public static function dataJoinColumnName() : array
167
    {
168
        return [
169
            // DefaultNamingStrategy
170
            [self::defaultNaming(), 'someColumn_id', 'someColumn', null],
171
            [self::defaultNaming(), 'some_column_id', 'some_column', null],
172
            [self::defaultNaming(), 'base64Encoded_id', 'base64Encoded', null],
173
            [self::defaultNaming(), 'base64_encoded_id', 'base64_encoded', null],
174
175
            // UnderscoreNamingStrategy
176
            [self::underscoreNamingLower(), 'some_column_id', 'someColumn', null],
177
            [self::underscoreNamingLower(), 'base64encoded_id', 'base64Encoded', null],
178
            [self::underscoreNamingUpper(), 'SOME_COLUMN_ID', 'someColumn', null],
179
            [self::underscoreNamingUpper(), 'BASE64ENCODED_ID', 'base64Encoded', null],
180
181
            // NumberAwareUnderscoreNamingStrategy
182
            [self::numberAwareUnderscoreNamingLower(), 'some_column_id', 'someColumn', null],
183
            [self::numberAwareUnderscoreNamingLower(), 'base64_encoded_id', 'base64Encoded', null],
184
            [self::numberAwareUnderscoreNamingLower(), 'base64encoded_id', 'base64encoded', null],
185
            [self::numberAwareUnderscoreNamingUpper(), 'SOME_COLUMN_ID', 'someColumn', null],
186
            [self::numberAwareUnderscoreNamingUpper(), 'BASE64_ENCODED_ID', 'base64Encoded', null],
187
            [self::numberAwareUnderscoreNamingUpper(), 'BASE64ENCODED_ID', 'base64encoded', null],
188
189
            // JoinColumnClassNamingStrategy
190
            [new JoinColumnClassNamingStrategy(), 'classname_someColumn_id', 'someColumn', 'Some\ClassName'],
191
            [new JoinColumnClassNamingStrategy(), 'classname_some_column_id', 'some_column', 'ClassName'],
192
        ];
193
    }
194
195
    /**
196
     * @dataProvider dataJoinColumnName
197
     */
198
    public function testJoinColumnName(
199
        NamingStrategy $strategy,
200
        string $expected,
201
        string $propertyName,
202
        ?string $className = null
203
    ) : void {
204
        self::assertSame($expected, $strategy->joinColumnName($propertyName, $className));
0 ignored issues
show
Unused Code introduced by
The call to Doctrine\ORM\Mapping\Nam...ategy::joinColumnName() has too many arguments starting with $className. ( Ignorable by Annotation )

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

204
        self::assertSame($expected, $strategy->/** @scrutinizer ignore-call */ joinColumnName($propertyName, $className));

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...
205
    }
206
207
    /**
208
     * Data Provider for NamingStrategy#joinTableName
209
     *
210
     * @return array<NamingStrategy|string|null>
211
     */
212
    public static function dataJoinTableName() : array
213
    {
214
        return [
215
            // DefaultNamingStrategy
216
            [self::defaultNaming(), 'someclassname_classname', 'SomeClassName', 'Some\ClassName', null],
217
            [self::defaultNaming(), 'someclassname_classname', '\SomeClassName', 'ClassName', null],
218
            [self::defaultNaming(), 'name_classname', '\Some\Class\Name', 'ClassName', null],
219
220
            // UnderscoreNamingStrategy
221
            [self::underscoreNamingLower(), 'some_class_name_class_name', 'SomeClassName', 'Some\ClassName', null],
222
            [self::underscoreNamingLower(), 'class1test_class2test', 'Class1Test', 'Some\Class2Test', null],
223
            [self::underscoreNamingLower(), 'some_class_name_class_name', '\SomeClassName', 'ClassName', null],
224
            [self::underscoreNamingLower(), 'name_class_name', '\Some\Class\Name', 'ClassName', null],
225
            [self::underscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME', 'SomeClassName', 'Some\ClassName', null],
226
            [self::underscoreNamingUpper(), 'CLASS1TEST_CLASS2TEST', 'Class1Test', 'Some\Class2Test', null],
227
            [self::underscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME', '\SomeClassName', 'ClassName', null],
228
            [self::underscoreNamingUpper(), 'NAME_CLASS_NAME', '\Some\Class\Name', 'ClassName', null],
229
230
            // NumberAwareUnderscoreNamingStrategy
231
            [self::numberAwareUnderscoreNamingLower(), 'some_class_name_class_name', 'SomeClassName', 'Some\ClassName', null],
232
            [self::numberAwareUnderscoreNamingLower(), 'class1_test_class2_test', 'Class1Test', 'Some\Class2Test', null],
233
            [self::numberAwareUnderscoreNamingLower(), 'some_class_name_class_name', '\SomeClassName', 'ClassName', null],
234
            [self::numberAwareUnderscoreNamingLower(), 'name_class_name', '\Some\Class\Name', 'ClassName', null],
235
            [self::numberAwareUnderscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME', 'SomeClassName', 'Some\ClassName', null],
236
            [self::numberAwareUnderscoreNamingUpper(), 'CLASS1_TEST_CLASS2_TEST', 'Class1Test', 'Some\Class2Test', null],
237
            [self::numberAwareUnderscoreNamingUpper(), 'SOME_CLASS_NAME_CLASS_NAME', '\SomeClassName', 'ClassName', null],
238
            [self::numberAwareUnderscoreNamingUpper(), 'NAME_CLASS_NAME', '\Some\Class\Name', 'ClassName', null],
239
        ];
240
    }
241
242
    /**
243
     * @dataProvider dataJoinTableName
244
     */
245
    public function testJoinTableName(
246
        NamingStrategy $strategy,
247
        string $expected,
248
        string $ownerEntity,
249
        string $associatedEntity,
250
        ?string $propertyName = null
251
    ) : void {
252
        self::assertSame($expected, $strategy->joinTableName($ownerEntity, $associatedEntity, $propertyName));
253
    }
254
255
    /**
256
     * Data Provider for NamingStrategy#joinKeyColumnName
257
     *
258
     * @return array<NamingStrategy|string|null>
259
     */
260
    public static function dataJoinKeyColumnName() : array
261
    {
262
        return [
263
            // DefaultNamingStrategy
264
            [self::defaultNaming(), 'someclassname_id', 'SomeClassName', null, null],
265
            [self::defaultNaming(), 'name_identifier', '\Some\Class\Name', 'identifier', null],
266
267
            // UnderscoreNamingStrategy
268
            [self::underscoreNamingLower(), 'some_class_name2test_id', 'SomeClassName2Test', null, null],
269
            [self::underscoreNamingLower(), 'some_class_name_id', 'SomeClassName', null, null],
270
            [self::underscoreNamingLower(), 'class_name_identifier', '\Some\Class\ClassName', 'identifier', null],
271
            [self::underscoreNamingLower(), 'name2test_identifier', '\Some\Class\Name2Test', 'identifier', null],
272
            [self::underscoreNamingUpper(), 'SOME_CLASS_NAME_ID', 'SomeClassName', null, null],
273
            [self::underscoreNamingUpper(), 'SOME_CLASS_NAME2TEST_ID', 'SomeClassName2Test', null, null],
274
            [self::underscoreNamingUpper(), 'CLASS_NAME_IDENTIFIER', '\Some\Class\ClassName', 'IDENTIFIER', null],
275
            [self::underscoreNamingUpper(), 'NAME2TEST_IDENTIFIER', '\Some\Class\Name2Test', 'IDENTIFIER', null],
276
277
            // NumberAwareUnderscoreNamingStrategy
278
            [self::numberAwareUnderscoreNamingLower(), 'some_class_name2_test_id', 'SomeClassName2Test', null, null],
279
            [self::numberAwareUnderscoreNamingLower(), 'some_class_name_id', 'SomeClassName', null, null],
280
            [self::numberAwareUnderscoreNamingLower(), 'class_name_identifier', '\Some\Class\ClassName', 'identifier', null],
281
            [self::numberAwareUnderscoreNamingLower(), 'name2_test_identifier', '\Some\Class\Name2Test', 'identifier', null],
282
            [self::numberAwareUnderscoreNamingUpper(), 'SOME_CLASS_NAME_ID', 'SomeClassName', null, null],
283
            [self::numberAwareUnderscoreNamingUpper(), 'SOME_CLASS_NAME2_TEST_ID', 'SomeClassName2Test', null, null],
284
            [self::numberAwareUnderscoreNamingUpper(), 'CLASS_NAME_IDENTIFIER', '\Some\Class\ClassName', 'IDENTIFIER', null],
285
            [self::numberAwareUnderscoreNamingUpper(), 'NAME2_TEST_IDENTIFIER', '\Some\Class\Name2Test', 'IDENTIFIER', null],
286
        ];
287
    }
288
289
    /**
290
     * @dataProvider dataJoinKeyColumnName
291
     */
292
    public function testJoinKeyColumnName(
293
        NamingStrategy $strategy,
294
        string $expected,
295
        string $propertyEntityName,
296
        ?string $referencedColumnName = null,
297
        ?string $propertyName = null
298
    ) : void {
299
        self::assertSame($expected, $strategy->joinKeyColumnName($propertyEntityName, $referencedColumnName, $propertyName));
0 ignored issues
show
Unused Code introduced by
The call to Doctrine\ORM\Mapping\Nam...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

299
        self::assertSame($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...
300
    }
301
}
302