@@ -151,6 +151,175 @@ type Query {
151
151
152
152
result . ShouldBe ( serializedExpectedResult ) ;
153
153
}
154
+
155
+ [ Fact ]
156
+ public void can_use_source_without_params ( )
157
+ {
158
+ var schema = Schema . For ( @"
159
+ type Query {
160
+ source: Boolean
161
+ }
162
+ " , _=>
163
+ {
164
+ _ . Types . Include < ParametersType > ( ) ;
165
+ } ) ;
166
+
167
+ var result = schema . Execute ( _ =>
168
+ {
169
+ _ . Query = "{ source }" ;
170
+ _ . Root = new { Hello = "World" } ;
171
+ } ) ;
172
+
173
+ var expectedResult = CreateQueryResult ( "{ 'source': true }" ) ;
174
+ var serializedExpectedResult = Writer . Write ( expectedResult ) ;
175
+
176
+ result . ShouldBe ( serializedExpectedResult ) ;
177
+ }
178
+
179
+ [ Fact ]
180
+ public void can_use_resolvefieldcontext_without_params ( )
181
+ {
182
+ var schema = Schema . For ( @"
183
+ type Query {
184
+ resolve: String
185
+ }
186
+ " , _=>
187
+ {
188
+ _ . Types . Include < ParametersType > ( ) ;
189
+ } ) ;
190
+
191
+ var result = schema . Execute ( _ =>
192
+ {
193
+ _ . Query = "{ resolve }" ;
194
+ _ . ExposeExceptions = true ;
195
+ } ) ;
196
+
197
+ var expectedResult = CreateQueryResult ( "{ 'resolve': 'Resolved' }" ) ;
198
+ var serializedExpectedResult = Writer . Write ( expectedResult ) ;
199
+
200
+ result . ShouldBe ( serializedExpectedResult ) ;
201
+ }
202
+
203
+ [ Fact ]
204
+ public void can_use_resolvefieldcontext_with_params ( )
205
+ {
206
+ var schema = Schema . For ( @"
207
+ type Query {
208
+ resolveWithParam(id: String): String
209
+ }
210
+ " , _=>
211
+ {
212
+ _ . Types . Include < ParametersType > ( ) ;
213
+ } ) ;
214
+
215
+ var result = schema . Execute ( _ =>
216
+ {
217
+ _ . Query = @"{ resolveWithParam(id: ""abcd"") }" ;
218
+ } ) ;
219
+
220
+ var expectedResult = CreateQueryResult ( "{ 'resolveWithParam': 'Resolved abcd' }" ) ;
221
+ var serializedExpectedResult = Writer . Write ( expectedResult ) ;
222
+
223
+ result . ShouldBe ( serializedExpectedResult ) ;
224
+ }
225
+
226
+ [ Fact ]
227
+ public void can_use_usercontext ( )
228
+ {
229
+ var schema = Schema . For ( @"
230
+ type Query {
231
+ userContext: String
232
+ }
233
+ " , _=>
234
+ {
235
+ _ . Types . Include < ParametersType > ( ) ;
236
+ } ) ;
237
+
238
+ var result = schema . Execute ( _ =>
239
+ {
240
+ _ . Query = @"{ userContext }" ;
241
+ _ . UserContext = new MyUserContext { Name = "Quinn" } ;
242
+ } ) ;
243
+
244
+ var expectedResult = CreateQueryResult ( "{ 'userContext': 'Quinn' }" ) ;
245
+ var serializedExpectedResult = Writer . Write ( expectedResult ) ;
246
+
247
+ result . ShouldBe ( serializedExpectedResult ) ;
248
+ }
249
+
250
+ [ Fact ]
251
+ public void can_use_usercontext_with_params ( )
252
+ {
253
+ var schema = Schema . For ( @"
254
+ type Query {
255
+ userContextWithParam(id: String): String
256
+ }
257
+ " , _=>
258
+ {
259
+ _ . Types . Include < ParametersType > ( ) ;
260
+ } ) ;
261
+
262
+ var result = schema . Execute ( _ =>
263
+ {
264
+ _ . Query = @"{ userContextWithParam(id: ""abcd"") }" ;
265
+ _ . UserContext = new MyUserContext { Name = "Quinn" } ;
266
+ } ) ;
267
+
268
+ var expectedResult = CreateQueryResult ( "{ 'userContextWithParam': 'Quinn abcd' }" ) ;
269
+ var serializedExpectedResult = Writer . Write ( expectedResult ) ;
270
+
271
+ result . ShouldBe ( serializedExpectedResult ) ;
272
+ }
273
+
274
+ [ Fact ]
275
+ public void can_use_context_source_usercontext ( )
276
+ {
277
+ var schema = Schema . For ( @"
278
+ type Query {
279
+ three: Boolean
280
+ }
281
+ " , _=>
282
+ {
283
+ _ . Types . Include < ParametersType > ( ) ;
284
+ } ) ;
285
+
286
+ var result = schema . Execute ( _ =>
287
+ {
288
+ _ . Query = @"{ three }" ;
289
+ _ . Root = new { Hello = "World" } ;
290
+ _ . UserContext = new MyUserContext { Name = "Quinn" } ;
291
+ } ) ;
292
+
293
+ var expectedResult = CreateQueryResult ( "{ 'three': true }" ) ;
294
+ var serializedExpectedResult = Writer . Write ( expectedResult ) ;
295
+
296
+ result . ShouldBe ( serializedExpectedResult ) ;
297
+ }
298
+
299
+ [ Fact ]
300
+ public void can_use_context_source_usercontext_with_params ( )
301
+ {
302
+ var schema = Schema . For ( @"
303
+ type Query {
304
+ four(id: Int): Boolean
305
+ }
306
+ " , _=>
307
+ {
308
+ _ . Types . Include < ParametersType > ( ) ;
309
+ } ) ;
310
+
311
+ var result = schema . Execute ( _ =>
312
+ {
313
+ _ . Query = @"{ four(id: 123) }" ;
314
+ _ . Root = new { Hello = "World" } ;
315
+ _ . UserContext = new MyUserContext { Name = "Quinn" } ;
316
+ } ) ;
317
+
318
+ var expectedResult = CreateQueryResult ( "{ 'four': true }" ) ;
319
+ var serializedExpectedResult = Writer . Write ( expectedResult ) ;
320
+
321
+ result . ShouldBe ( serializedExpectedResult ) ;
322
+ }
154
323
}
155
324
156
325
public class PostData
@@ -220,4 +389,48 @@ public Pet Pet(PetKind type)
220
389
return new Cat { Name = "Biscuit" , Meows = true } ;
221
390
}
222
391
}
392
+
393
+ [ GraphQLMetadata ( "Query" ) ]
394
+ class ParametersType
395
+ {
396
+ public bool Source ( object source )
397
+ {
398
+ return source != null ;
399
+ }
400
+
401
+ public string Resolve ( ResolveFieldContext context )
402
+ {
403
+ return "Resolved" ;
404
+ }
405
+
406
+ public string ResolveWithParam ( ResolveFieldContext context , string id )
407
+ {
408
+ return $ "Resolved { id } ";
409
+ }
410
+
411
+ public string UserContext ( MyUserContext context )
412
+ {
413
+ return context . Name ;
414
+ }
415
+
416
+ public string UserContextWithParam ( MyUserContext context , string id )
417
+ {
418
+ return $ "{ context . Name } { id } ";
419
+ }
420
+
421
+ public bool Three ( ResolveFieldContext resolveContext , object source , MyUserContext context )
422
+ {
423
+ return resolveContext != null && context != null && source != null ;
424
+ }
425
+
426
+ public bool Four ( ResolveFieldContext resolveContext , object source , MyUserContext context , int id )
427
+ {
428
+ return resolveContext != null && context != null && source != null && id != 0 ;
429
+ }
430
+ }
431
+
432
+ class MyUserContext
433
+ {
434
+ public string Name { get ; set ; }
435
+ }
223
436
}
0 commit comments