Completed
Push — master ( 97be4b...1dea1e )
by Portey
03:17
created

ProcessorTest::predefinedSchemaProvider()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 106
Code Lines 40

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
c 3
b 0
f 0
dl 0
loc 106
rs 8.2857
cc 1
eloc 40
nc 1
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/*
3
* This file is a part of graphql-youshido project.
4
*
5
* @author Alexandr Viniychuk <[email protected]>
6
* created: 11/28/15 2:02 AM
7
*/
8
9
namespace Youshido\Tests;
10
11
use Youshido\GraphQL\Schema;
12
use Youshido\GraphQL\Type\Object\ObjectType;
13
use Youshido\GraphQL\Processor;
14
use Youshido\GraphQL\Validator\ResolveValidator\ResolveValidator;
15
use Youshido\Tests\DataProvider\UserType;
16
17
class ProcessorTest extends \PHPUnit_Framework_TestCase
18
{
19
20
    /**
21
     * @param $query
22
     * @param $response
23
     *
24
     * @dataProvider predefinedSchemaProvider
25
     */
26
    public function testPredefinedQueries($query, $response)
27
    {
28
        $schema = new Schema([
29
            'query' => new ObjectType([
30
                'name'        => 'TestSchema',
31
                'description' => 'Root of TestSchema'
32
            ])
33
        ]);
34
        $schema->addQuery('latest',
35
            new ObjectType(
36
                [
37
                    'name'    => 'latest',
38
                    'fields'  => [
39
                        'id'   => ['type' => 'int'],
40
                        'name' => ['type' => 'string']
41
                    ],
42
                    'resolve' => function () {
43
                        return [
44
                            'id'   => 1,
45
                            'name' => 'Alex'
46
                        ];
47
                    }
48
                ]),
49
            [
50
                'description' => 'latest description',
51
                'deprecationReason' => 'for test',
52
                'isDeprecated' => true,
53
            ]
54
        );
55
56
        $validator = new ResolveValidator();
57
        $processor = new Processor($validator);
58
59
        $processor->setSchema($schema);
60
61
        $processor->processQuery($query);
62
63
        $a = $processor->getResponseData();
0 ignored issues
show
Unused Code introduced by
$a is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
64
65
        $this->assertEquals($processor->getResponseData(), $response);
66
    }
67
68
    public function predefinedSchemaProvider()
69
    {
70
        return [
71
            [
72
                '{
73
                    __schema {
74
                        types {
75
                            name,
76
                            fields {
77
                                name
78
                            }
79
                        }
80
                    }
81
                }',
82
                [
83
                    'data' => [
84
                        '__schema' => [
85
                            'types' => [
86
                                ['name' => 'latest', 'fields' => [['name' => 'id'], ['name' => 'name']]],
87
                                ['name' => 'Int', 'fields' => []],
88
                                ['name' => 'String', 'fields' => []],
89
                                ['name' => '__Schema', 'fields' => [['name' => 'queryType'], ['name' => 'mutationType'], ['name' => 'types']]],
90
                                ['name' => '__Type', 'fields' => [['name' => 'name'], ['name' => 'kind'], ['name' => 'description'], ['name' => 'ofType'], ['name' => 'inputFields'], ['name' => 'enumValues'], ['name' => 'fields'], ['name' => 'interfaces'], ['name' => 'possibleTypes']]],
91
                                ['name' => '__TypeList', 'fields' => [['name' => 'name'], ['name' => 'kind'], ['name' => 'description'], ['name' => 'ofType'], ['name' => 'inputFields'], ['name' => 'enumValues'], ['name' => 'fields'], ['name' => 'interfaces'], ['name' => 'possibleTypes']]],
92
                                ['name' => '__InputValuesList', 'fields' => [['name' => 'name'], ['name' => 'description'], ['name' => 'type'], ['name' => 'defaultValue']]],
93
                                ['name' => '__EnumValueList', 'fields' => [['name' => 'name'], ['name' => 'description'], ['name' => 'deprecationReason'], ['name' => 'isDeprecated']]],
94
                                ['name' => 'Boolean', 'fields' => []],
95
                                ['name' => '__FieldList', 'fields' => [['name' => 'name'], ['name' => 'description'], ['name' => 'isDeprecated'], ['name' => 'deprecationReason'], ['name' => 'type'], ['name' => 'args']]],
96
                                ['name' => '__ArgumentList', 'fields' => [['name' => 'name'], ['name' => 'description']]],
97
                                ['name' => '__InterfaceList', 'fields' => [['name' => 'name'], ['name' => 'kind'], ['name' => 'description'], ['name' => 'ofType'], ['name' => 'inputFields'], ['name' => 'enumValues'], ['name' => 'fields'], ['name' => 'interfaces'], ['name' => 'possibleTypes']]],
98
                                ['name' => '__PossibleOfList', 'fields' => [['name' => 'name'], ['name' => 'kind'], ['name' => 'description'], ['name' => 'ofType'], ['name' => 'inputFields'], ['name' => 'enumValues'], ['name' => 'fields'], ['name' => 'interfaces'], ['name' => 'possibleTypes']]],
99
                            ]
100
                        ]
101
                    ]
102
                ]
103
            ],
104
            [
105
                '{
106
                  test : __schema {
107
                    queryType {
108
                      kind,
109
                      name,
110
                      fields {
111
                        name,
112
                        isDeprecated,
113
                        deprecationReason,
114
                        description,
115
                        type {
116
                          name
117
                        }
118
                      }
119
                    }
120
                  }
121
                }',
122
                ['data' => [
123
                    'test' => [
124
                        'queryType' => [
125
                            'name'   => 'TestSchema',
126
                            'kind'   => 'OBJECT',
127
                            'fields' => [
128
                                ['name' => 'latest', 'isDeprecated' => true, 'deprecationReason' => 'for test', 'description' => 'for test', 'type' => ['name' => 'latest']],
129
                                ['name' => '__schema', 'isDeprecated' => false, 'deprecationReason' => '', 'description' => '', 'type' => ['name' => '__Schema']],
130
                                ['name' => '__type', 'isDeprecated' => false, 'deprecationReason' => '', 'description' => '', 'type' => ['name' => '__Type']]
131
                            ]
132
                        ]
133
                    ]
134
                ]]
135
            ],
136
            [
137
                '{
138
                  __schema {
139
                    queryType {
140
                      kind,
141
                      name,
142
                      description,
143
                      interfaces {
144
                        name
145
                      },
146
                      possibleTypes {
147
                        name
148
                      },
149
                      inputFields {
150
                        name
151
                      },
152
                      ofType{
153
                        name
154
                      }
155
                    }
156
                  }
157
                }',
158
                ['data' => [
159
                    '__schema' => [
160
                        'queryType' => [
161
                            'kind'          => 'OBJECT',
162
                            'name'          => 'TestSchema',
163
                            'description'   => 'Root of TestSchema',
164
                            'interfaces'    => [],
165
                            'possibleTypes' => [],
166
                            'inputFields'   => [],
167
                            'ofType'        => []
168
                        ]
169
                    ]
170
                ]]
171
            ]
172
        ];
173
    }
174
175
176
    /**
177
     * @dataProvider schemaProvider
178
     */
179
    public function testProcessor($query, $response)
180
    {
181
        $schema = new Schema();
182
        $schema->addQuery('latest',
183
            new ObjectType(
184
                [
185
                    'name'    => 'latest',
186
                    'fields'  => [
187
                        'id'   => ['type' => 'int'],
188
                        'name' => ['type' => 'string']
189
                    ],
190
                    'resolve' => function () {
191
                        return [
192
                            'id'   => 1,
193
                            'name' => 'Alex'
194
                        ];
195
                    }
196
                ]));
197
198
        $schema->addQuery('user', new UserType());
199
200
        $validator = new ResolveValidator();
201
        $processor = new Processor($validator);
202
203
        $processor->setSchema($schema);
204
        $processor->processQuery($query);
205
206
        $this->assertEquals(
207
            $processor->getResponseData(),
208
            $response
209
        );
210
    }
211
212
    public function schemaProvider()
213
    {
214
        return [
215
            [
216
                '{ latest { name } }',
217
                [
218
                    'data' => ['latest' => null]
219
                ]
220
            ],
221
            [
222
                '{ user(id:1) { id, name } }',
223
                [
224
                    'data' => ['user' => ['id' => 1, 'name' => 'John']]
225
                ]
226
            ]
227
        ];
228
    }
229
230
}
231