@@ -312,6 +312,43 @@ func TestHandler_Multipart_Basic_ErrBadMap(t *testing.T) {
312
312
}
313
313
}
314
314
315
+ func TestHandler_Multipart_Basic_ErrBadMapRoot (t * testing.T ) {
316
+ body := & bytes.Buffer {}
317
+ writer := multipart .NewWriter (body )
318
+
319
+ queryString := `{
320
+ "query":"query HeroNameQuery { hero { name } }",
321
+ "variables":{"file":null}
322
+ }`
323
+
324
+ writer .WriteField ("operations" , queryString )
325
+ writer .WriteField ("map" , `{"0":["xxx.file"]}` )
326
+ part , _ := writer .CreateFormFile ("0" , "test.txt" )
327
+
328
+ if _ , err := io .Copy (part , strings .NewReader ("How now brown cow" )); err != nil {
329
+ t .Fatalf ("unexpected copy writer fail %v" , err )
330
+ }
331
+
332
+ err := writer .Close ()
333
+ if err != nil {
334
+ t .Fatalf ("unexpected writer fail %v" , err )
335
+ }
336
+
337
+ req , err := http .NewRequest ("POST" , "/graphql" , body )
338
+ req .Header .Set ("Content-Type" , writer .FormDataContentType ())
339
+
340
+ h := handler .New (& handler.Config {
341
+ Schema : & testutil .StarWarsSchema ,
342
+ })
343
+ result , resp := executeTest (t , h , req )
344
+ if resp .Code != http .StatusOK {
345
+ t .Fatalf ("unexpected server response %v" , resp .Code )
346
+ }
347
+ if len (result .Errors ) != 1 || result .Errors [0 ].Message != "Must provide an operation." {
348
+ t .Fatalf ("unexpected response %+v" , result )
349
+ }
350
+ }
351
+
315
352
func TestHandler_Multipart_Basic_Upload (t * testing.T ) {
316
353
expected := & graphql.Result {
317
354
Data : map [string ]interface {}{
@@ -359,3 +396,56 @@ func TestHandler_Multipart_Basic_Upload(t *testing.T) {
359
396
t .Fatalf ("wrong result, graphql result diff: %v" , testutil .Diff (expected , result ))
360
397
}
361
398
}
399
+
400
+ func TestHandler_Multipart_Basic_UploadSlice (t * testing.T ) {
401
+ expected := & graphql.Result {
402
+ Data : map [string ]interface {}{
403
+ "hero" : map [string ]interface {}{
404
+ "name" : "R2-D2" ,
405
+ },
406
+ },
407
+ }
408
+
409
+ body := & bytes.Buffer {}
410
+ writer := multipart .NewWriter (body )
411
+
412
+ queryString := `{
413
+ "query":"query HeroNameQuery { hero { name } }",
414
+ "variables":{"file":[null,null]}
415
+ }`
416
+
417
+ writer .WriteField ("operations" , queryString )
418
+ writer .WriteField ("map" , `{"0":["variables.file.0"],"1":["variables.file.1"]}` )
419
+
420
+ part1 , _ := writer .CreateFormFile ("0" , "test.txt" )
421
+ if _ , err := io .Copy (part1 , strings .NewReader ("How now brown cow" )); err != nil {
422
+ t .Fatalf ("unexpected copy writer fail %v" , err )
423
+ }
424
+
425
+ part2 , _ := writer .CreateFormFile ("1" , "test.txt" )
426
+ if _ , err := io .Copy (part2 , strings .NewReader ("How now gold fish" )); err != nil {
427
+ t .Fatalf ("unexpected copy writer fail %v" , err )
428
+ }
429
+
430
+ err := writer .Close ()
431
+ if err != nil {
432
+ t .Fatalf ("unexpected writer fail %v" , err )
433
+ }
434
+
435
+ req , err := http .NewRequest ("POST" , "/graphql" , body )
436
+ req .Header .Set ("Content-Type" , writer .FormDataContentType ())
437
+
438
+ h := handler .New (& handler.Config {
439
+ Schema : & testutil .StarWarsSchema ,
440
+ })
441
+ result , resp := executeTest (t , h , req )
442
+ if resp .Code != http .StatusOK {
443
+ t .Fatalf ("unexpected server response %v" , resp .Code )
444
+ }
445
+ if resp .Code != http .StatusOK {
446
+ t .Fatalf ("unexpected server response %v" , resp .Code )
447
+ }
448
+ if ! reflect .DeepEqual (result , expected ) {
449
+ t .Fatalf ("wrong result, graphql result diff: %v" , testutil .Diff (expected , result ))
450
+ }
451
+ }
0 commit comments