Failed Conditions
Push — master ( 177394...bf4e7d )
by Vladimir
09:19
created

ProvidedRequiredArgumentsTest   A

Complexity

Total Complexity 20

Size/Duplication

Total Lines 342
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 20
eloc 176
dl 0
loc 342
rs 10
c 0
b 0
f 0

20 Methods

Rating   Name   Duplication   Size   Complexity  
A testArgOnOptionalArg() 0 5 1
A testMultipleReqsOnMixedList() 0 5 1
A testMultipleArgsReverseOrder() 0 5 1
A testNoArgsOnMultipleOptional() 0 5 1
A testSecondArgOnMultipleOptional() 0 5 1
A testIgnoresUnknownArguments() 0 6 1
A testOneArgOnMultipleOptional() 0 5 1
A testAllReqsAndOptsOnMixedList() 0 5 1
A testWithDirectivesOfValidTypes() 0 5 1
A missingDirectiveArg() 0 5 1
A testMissingMultipleNonNullableArguments() 0 14 1
A testNoArgOnNonNullFieldWithDefault() 0 5 1
A testNoArgOnOptionalArg() 0 5 1
A missingFieldArg() 0 5 1
A testWithDirectiveWithMissingTypes() 0 14 1
A testMissingOneNonNullableArgument() 0 12 1
A testIgnoresUnknownDirectives() 0 5 1
A testMultipleReqsAndOneOptOnMixedList() 0 5 1
A testMultipleArgs() 0 5 1
A testIncorrectValueAndMissingArgument() 0 13 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace GraphQL\Tests\Validator;
6
7
use GraphQL\Error\FormattedError;
8
use GraphQL\Language\SourceLocation;
9
use GraphQL\Validator\Rules\ProvidedRequiredArguments;
10
11
class ProvidedRequiredArgumentsTest extends ValidatorTestCase
12
{
13
    // Validate: Provided required arguments
14
    /**
15
     * @see it('ignores unknown arguments')
16
     */
17
    public function testIgnoresUnknownArguments() : void
18
    {
19
        // ignores unknown arguments
20
        $this->expectPassesRule(
21
            new ProvidedRequiredArguments(),
22
            '
23
      {
24
        dog {
25
          isHousetrained(unknownArgument: true)
26
        }
27
      }
28
        '
29
        );
30
    }
31
32
    // Valid non-nullable value:
33
34
    /**
35
     * @see it('Arg on optional arg')
36
     */
37
    public function testArgOnOptionalArg() : void
38
    {
39
        $this->expectPassesRule(
40
            new ProvidedRequiredArguments(),
41
            '
42
        {
43
          dog {
44
            isHousetrained(atOtherHomes: true)
45
          }
46
        }
47
        '
48
        );
49
    }
50
51
    /**
52
     * @see it('No Arg on optional arg')
53
     */
54
    public function testNoArgOnOptionalArg() : void
55
    {
56
        $this->expectPassesRule(
57
            new ProvidedRequiredArguments(),
58
            '
59
        {
60
          dog {
61
            isHousetrained
62
          }
63
        }
64
        '
65
        );
66
    }
67
68
    /**
69
     * @see it('No arg on non-null field with default')
70
     */
71
    public function testNoArgOnNonNullFieldWithDefault()
72
    {
73
        $this->expectPassesRule(
74
            new ProvidedRequiredArguments(),
75
            '
76
            {
77
              complicatedArgs {
78
                nonNullFieldWithDefault
79
              }
80
            }
81
            '
82
        );
83
    }
84
85
    /**
86
     * @see it('Multiple args')
87
     */
88
    public function testMultipleArgs() : void
89
    {
90
        $this->expectPassesRule(
91
            new ProvidedRequiredArguments(),
92
            '
93
        {
94
          complicatedArgs {
95
            multipleReqs(req1: 1, req2: 2)
96
          }
97
        }
98
        '
99
        );
100
    }
101
102
    /**
103
     * @see it('Multiple args reverse order')
104
     */
105
    public function testMultipleArgsReverseOrder() : void
106
    {
107
        $this->expectPassesRule(
108
            new ProvidedRequiredArguments(),
109
            '
110
        {
111
          complicatedArgs {
112
            multipleReqs(req2: 2, req1: 1)
113
          }
114
        }
115
        '
116
        );
117
    }
118
119
    /**
120
     * @see it('No args on multiple optional')
121
     */
122
    public function testNoArgsOnMultipleOptional() : void
123
    {
124
        $this->expectPassesRule(
125
            new ProvidedRequiredArguments(),
126
            '
127
        {
128
          complicatedArgs {
129
            multipleOpts
130
          }
131
        }
132
        '
133
        );
134
    }
135
136
    /**
137
     * @see it('One arg on multiple optional')
138
     */
139
    public function testOneArgOnMultipleOptional() : void
140
    {
141
        $this->expectPassesRule(
142
            new ProvidedRequiredArguments(),
143
            '
144
        {
145
          complicatedArgs {
146
            multipleOpts(opt1: 1)
147
          }
148
        }
149
        '
150
        );
151
    }
152
153
    /**
154
     * @see it('Second arg on multiple optional')
155
     */
156
    public function testSecondArgOnMultipleOptional() : void
157
    {
158
        $this->expectPassesRule(
159
            new ProvidedRequiredArguments(),
160
            '
161
        {
162
          complicatedArgs {
163
            multipleOpts(opt2: 1)
164
          }
165
        }
166
        '
167
        );
168
    }
169
170
    /**
171
     * @see it('Multiple reqs on mixedList')
172
     */
173
    public function testMultipleReqsOnMixedList() : void
174
    {
175
        $this->expectPassesRule(
176
            new ProvidedRequiredArguments(),
177
            '
178
        {
179
          complicatedArgs {
180
            multipleOptAndReq(req1: 3, req2: 4)
181
          }
182
        }
183
        '
184
        );
185
    }
186
187
    /**
188
     * @see it('Multiple reqs and one opt on mixedList')
189
     */
190
    public function testMultipleReqsAndOneOptOnMixedList() : void
191
    {
192
        $this->expectPassesRule(
193
            new ProvidedRequiredArguments(),
194
            '
195
        {
196
          complicatedArgs {
197
            multipleOptAndReq(req1: 3, req2: 4, opt1: 5)
198
          }
199
        }
200
        '
201
        );
202
    }
203
204
    /**
205
     * @see it('All reqs and opts on mixedList')
206
     */
207
    public function testAllReqsAndOptsOnMixedList() : void
208
    {
209
        $this->expectPassesRule(
210
            new ProvidedRequiredArguments(),
211
            '
212
        {
213
          complicatedArgs {
214
            multipleOptAndReq(req1: 3, req2: 4, opt1: 5, opt2: 6)
215
          }
216
        }
217
        '
218
        );
219
    }
220
221
    // Invalid non-nullable value
222
223
    /**
224
     * @see it('Missing one non-nullable argument')
225
     */
226
    public function testMissingOneNonNullableArgument() : void
227
    {
228
        $this->expectFailsRule(
229
            new ProvidedRequiredArguments(),
230
            '
231
        {
232
          complicatedArgs {
233
            multipleReqs(req2: 2)
234
          }
235
        }
236
        ',
237
            [$this->missingFieldArg('multipleReqs', 'req1', 'Int!', 4, 13)]
238
        );
239
    }
240
241
    private function missingFieldArg($fieldName, $argName, $typeName, $line, $column)
242
    {
243
        return FormattedError::create(
0 ignored issues
show
Deprecated Code introduced by
The function GraphQL\Error\FormattedError::create() has been deprecated: as of v0.8.0 ( Ignorable by Annotation )

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

243
        return /** @scrutinizer ignore-deprecated */ FormattedError::create(

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
244
            ProvidedRequiredArguments::missingFieldArgMessage($fieldName, $argName, $typeName),
245
            [new SourceLocation($line, $column)]
246
        );
247
    }
248
249
    /**
250
     * @see it('Missing multiple non-nullable arguments')
251
     */
252
    public function testMissingMultipleNonNullableArguments() : void
253
    {
254
        $this->expectFailsRule(
255
            new ProvidedRequiredArguments(),
256
            '
257
        {
258
          complicatedArgs {
259
            multipleReqs
260
          }
261
        }
262
        ',
263
            [
264
                $this->missingFieldArg('multipleReqs', 'req1', 'Int!', 4, 13),
265
                $this->missingFieldArg('multipleReqs', 'req2', 'Int!', 4, 13),
266
            ]
267
        );
268
    }
269
270
    // Describe: Directive arguments
271
272
    /**
273
     * @see it('Incorrect value and missing argument')
274
     */
275
    public function testIncorrectValueAndMissingArgument() : void
276
    {
277
        $this->expectFailsRule(
278
            new ProvidedRequiredArguments(),
279
            '
280
        {
281
          complicatedArgs {
282
            multipleReqs(req1: "one")
283
          }
284
        }
285
        ',
286
            [
287
                $this->missingFieldArg('multipleReqs', 'req2', 'Int!', 4, 13),
288
            ]
289
        );
290
    }
291
292
    /**
293
     * @see it('ignores unknown directives')
294
     */
295
    public function testIgnoresUnknownDirectives() : void
296
    {
297
        $this->expectPassesRule(
298
            new ProvidedRequiredArguments(),
299
            '
300
        {
301
          dog @unknown
302
        }
303
        '
304
        );
305
    }
306
307
    /**
308
     * @see it('with directives of valid types')
309
     */
310
    public function testWithDirectivesOfValidTypes() : void
311
    {
312
        $this->expectPassesRule(
313
            new ProvidedRequiredArguments(),
314
            '
315
        {
316
          dog @include(if: true) {
317
            name
318
          }
319
          human @skip(if: false) {
320
            name
321
          }
322
        }
323
        '
324
        );
325
    }
326
327
    /**
328
     * @see it('with directive with missing types')
329
     */
330
    public function testWithDirectiveWithMissingTypes() : void
331
    {
332
        $this->expectFailsRule(
333
            new ProvidedRequiredArguments(),
334
            '
335
        {
336
          dog @include {
337
            name @skip
338
          }
339
        }
340
        ',
341
            [
342
                $this->missingDirectiveArg('include', 'if', 'Boolean!', 3, 15),
343
                $this->missingDirectiveArg('skip', 'if', 'Boolean!', 4, 18),
344
            ]
345
        );
346
    }
347
348
    private function missingDirectiveArg($directiveName, $argName, $typeName, $line, $column)
349
    {
350
        return FormattedError::create(
0 ignored issues
show
Deprecated Code introduced by
The function GraphQL\Error\FormattedError::create() has been deprecated: as of v0.8.0 ( Ignorable by Annotation )

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

350
        return /** @scrutinizer ignore-deprecated */ FormattedError::create(

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
351
            ProvidedRequiredArguments::missingDirectiveArgMessage($directiveName, $argName, $typeName),
352
            [new SourceLocation($line, $column)]
353
        );
354
    }
355
}
356