33from .utils import expect_fails_rule , expect_passes_rule
44
55
6- def undefined_field (field , type , line , column ):
6+ def undefined_field (field , type , suggestions , line , column ):
77 return {
8- 'message' : FieldsOnCorrectType .undefined_field_message (field , type ),
8+ 'message' : FieldsOnCorrectType .undefined_field_message (field , type , suggestions ),
99 'locations' : [SourceLocation (line , column )]
1010 }
1111
@@ -71,8 +71,8 @@ def test_reports_errors_when_type_is_known_again():
7171 }
7272 },
7373 ''' , [
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 )
7676 ])
7777
7878
@@ -82,7 +82,7 @@ def test_field_not_defined_on_fragment():
8282 meowVolume
8383 }
8484 ''' , [
85- undefined_field ('meowVolume' , 'Dog' , 3 , 9 )
85+ undefined_field ('meowVolume' , 'Dog' , [], 3 , 9 )
8686 ])
8787
8888
@@ -94,7 +94,7 @@ def test_ignores_deeply_unknown_field():
9494 }
9595 }
9696 ''' , [
97- undefined_field ('unknown_field' , 'Dog' , 3 , 9 )
97+ undefined_field ('unknown_field' , 'Dog' , [], 3 , 9 )
9898 ])
9999
100100
@@ -106,7 +106,7 @@ def test_sub_field_not_defined():
106106 }
107107 }
108108 ''' , [
109- undefined_field ('unknown_field' , 'Pet' , 4 , 11 )
109+ undefined_field ('unknown_field' , 'Pet' , [], 4 , 11 )
110110 ])
111111
112112
@@ -118,7 +118,7 @@ def test_field_not_defined_on_inline_fragment():
118118 }
119119 }
120120 ''' , [
121- undefined_field ('meowVolume' , 'Dog' , 4 , 11 )
121+ undefined_field ('meowVolume' , 'Dog' , [], 4 , 11 )
122122 ])
123123
124124
@@ -128,7 +128,7 @@ def test_aliased_field_target_not_defined():
128128 volume : mooVolume
129129 }
130130 ''' , [
131- undefined_field ('mooVolume' , 'Dog' , 3 , 9 )
131+ undefined_field ('mooVolume' , 'Dog' , [], 3 , 9 )
132132 ])
133133
134134
@@ -138,7 +138,7 @@ def test_aliased_lying_field_target_not_defined():
138138 barkVolume : kawVolume
139139 }
140140 ''' , [
141- undefined_field ('kawVolume' , 'Dog' , 3 , 9 )
141+ undefined_field ('kawVolume' , 'Dog' , [], 3 , 9 )
142142 ])
143143
144144
@@ -148,7 +148,7 @@ def test_not_defined_on_interface():
148148 tailLength
149149 }
150150 ''' , [
151- undefined_field ('tailLength' , 'Pet' , 3 , 9 )
151+ undefined_field ('tailLength' , 'Pet' , [], 3 , 9 )
152152 ])
153153
154154
@@ -158,7 +158,7 @@ def test_defined_on_implementors_but_not_on_interface():
158158 nickname
159159 }
160160 ''' , [
161- undefined_field ('nickname' , 'Pet' , 3 , 9 )
161+ undefined_field ('nickname' , 'Pet' , [ 'Cat' , 'Dog' ], 3 , 9 )
162162 ])
163163
164164
@@ -176,7 +176,7 @@ def test_direct_field_selection_on_union():
176176 directField
177177 }
178178 ''' , [
179- undefined_field ('directField' , 'CatOrDog' , 3 , 9 )
179+ undefined_field ('directField' , 'CatOrDog' , [], 3 , 9 )
180180 ])
181181
182182
@@ -186,7 +186,13 @@ def test_defined_on_implementors_queried_on_union():
186186 name
187187 }
188188 ''' , [
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+ )
190196 ])
191197
192198
@@ -201,3 +207,27 @@ def test_valid_field_in_inline_fragment():
201207 }
202208 }
203209 ''' )
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