3
3
from .utils import expect_fails_rule , expect_passes_rule
4
4
5
5
6
- def undefined_field (field , type , line , column ):
6
+ def undefined_field (field , type , suggestions , line , column ):
7
7
return {
8
- 'message' : FieldsOnCorrectType .undefined_field_message (field , type ),
8
+ 'message' : FieldsOnCorrectType .undefined_field_message (field , type , suggestions ),
9
9
'locations' : [SourceLocation (line , column )]
10
10
}
11
11
@@ -71,8 +71,8 @@ def test_reports_errors_when_type_is_known_again():
71
71
}
72
72
},
73
73
''' , [
74
- undefined_field ('unknown_pet_field' , 'Pet' , 3 , 9 ),
75
- undefined_field ('unknown_cat_field' , 'Cat' , 5 , 13 )
74
+ undefined_field ('unknown_pet_field' , 'Pet' , [], 3 , 9 ),
75
+ undefined_field ('unknown_cat_field' , 'Cat' , [], 5 , 13 )
76
76
])
77
77
78
78
@@ -82,7 +82,7 @@ def test_field_not_defined_on_fragment():
82
82
meowVolume
83
83
}
84
84
''' , [
85
- undefined_field ('meowVolume' , 'Dog' , 3 , 9 )
85
+ undefined_field ('meowVolume' , 'Dog' , [], 3 , 9 )
86
86
])
87
87
88
88
@@ -94,7 +94,7 @@ def test_ignores_deeply_unknown_field():
94
94
}
95
95
}
96
96
''' , [
97
- undefined_field ('unknown_field' , 'Dog' , 3 , 9 )
97
+ undefined_field ('unknown_field' , 'Dog' , [], 3 , 9 )
98
98
])
99
99
100
100
@@ -106,7 +106,7 @@ def test_sub_field_not_defined():
106
106
}
107
107
}
108
108
''' , [
109
- undefined_field ('unknown_field' , 'Pet' , 4 , 11 )
109
+ undefined_field ('unknown_field' , 'Pet' , [], 4 , 11 )
110
110
])
111
111
112
112
@@ -118,7 +118,7 @@ def test_field_not_defined_on_inline_fragment():
118
118
}
119
119
}
120
120
''' , [
121
- undefined_field ('meowVolume' , 'Dog' , 4 , 11 )
121
+ undefined_field ('meowVolume' , 'Dog' , [], 4 , 11 )
122
122
])
123
123
124
124
@@ -128,7 +128,7 @@ def test_aliased_field_target_not_defined():
128
128
volume : mooVolume
129
129
}
130
130
''' , [
131
- undefined_field ('mooVolume' , 'Dog' , 3 , 9 )
131
+ undefined_field ('mooVolume' , 'Dog' , [], 3 , 9 )
132
132
])
133
133
134
134
@@ -138,7 +138,7 @@ def test_aliased_lying_field_target_not_defined():
138
138
barkVolume : kawVolume
139
139
}
140
140
''' , [
141
- undefined_field ('kawVolume' , 'Dog' , 3 , 9 )
141
+ undefined_field ('kawVolume' , 'Dog' , [], 3 , 9 )
142
142
])
143
143
144
144
@@ -148,7 +148,7 @@ def test_not_defined_on_interface():
148
148
tailLength
149
149
}
150
150
''' , [
151
- undefined_field ('tailLength' , 'Pet' , 3 , 9 )
151
+ undefined_field ('tailLength' , 'Pet' , [], 3 , 9 )
152
152
])
153
153
154
154
@@ -158,7 +158,7 @@ def test_defined_on_implementors_but_not_on_interface():
158
158
nickname
159
159
}
160
160
''' , [
161
- undefined_field ('nickname' , 'Pet' , 3 , 9 )
161
+ undefined_field ('nickname' , 'Pet' , [ 'Cat' , 'Dog' ], 3 , 9 )
162
162
])
163
163
164
164
@@ -176,7 +176,7 @@ def test_direct_field_selection_on_union():
176
176
directField
177
177
}
178
178
''' , [
179
- undefined_field ('directField' , 'CatOrDog' , 3 , 9 )
179
+ undefined_field ('directField' , 'CatOrDog' , [], 3 , 9 )
180
180
])
181
181
182
182
@@ -186,7 +186,13 @@ def test_defined_on_implementors_queried_on_union():
186
186
name
187
187
}
188
188
''' , [
189
- undefined_field ('name' , 'CatOrDog' , 3 , 9 )
189
+ undefined_field (
190
+ 'name' ,
191
+ 'CatOrDog' ,
192
+ ['Being' , 'Pet' , 'Canine' , 'Cat' , 'Dog' ],
193
+ 3 ,
194
+ 9
195
+ )
190
196
])
191
197
192
198
@@ -201,3 +207,27 @@ def test_valid_field_in_inline_fragment():
201
207
}
202
208
}
203
209
''' )
210
+
211
+
212
+ def test_fields_correct_type_no_suggestion ():
213
+ message = FieldsOnCorrectType .undefined_field_message ('T' , 'f' , [])
214
+ assert message == 'Cannot query field "T" on type "f".'
215
+
216
+
217
+ def test_fields_correct_type_no_small_number_suggestions ():
218
+ message = FieldsOnCorrectType .undefined_field_message ('T' , 'f' , ['A' , 'B' ])
219
+ assert message == (
220
+ 'Cannot query field "T" on type "f". ' +
221
+ 'However, this field exists on "A", "B". ' +
222
+ 'Perhaps you meant to use an inline fragment?'
223
+ )
224
+
225
+
226
+ def test_fields_correct_type_lot_suggestions ():
227
+ message = FieldsOnCorrectType .undefined_field_message ('T' , 'f' , ['A' , 'B' , 'C' , 'D' , 'E' , 'F' ])
228
+ assert message == (
229
+ 'Cannot query field "T" on type "f". ' +
230
+ 'However, this field exists on "A", "B", "C", "D", "E", ' +
231
+ 'and 1 other types. ' +
232
+ 'Perhaps you meant to use an inline fragment?'
233
+ )
0 commit comments