@@ -389,9 +389,6 @@ func TestHandler_Multipart_Basic_Upload(t *testing.T) {
389
389
if resp .Code != http .StatusOK {
390
390
t .Fatalf ("unexpected server response %v" , resp .Code )
391
391
}
392
- if resp .Code != http .StatusOK {
393
- t .Fatalf ("unexpected server response %v" , resp .Code )
394
- }
395
392
if ! reflect .DeepEqual (result , expected ) {
396
393
t .Fatalf ("wrong result, graphql result diff: %v" , testutil .Diff (expected , result ))
397
394
}
@@ -442,10 +439,118 @@ func TestHandler_Multipart_Basic_UploadSlice(t *testing.T) {
442
439
if resp .Code != http .StatusOK {
443
440
t .Fatalf ("unexpected server response %v" , resp .Code )
444
441
}
442
+ if ! reflect .DeepEqual (result , expected ) {
443
+ t .Fatalf ("wrong result, graphql result diff: %v" , testutil .Diff (expected , result ))
444
+ }
445
+ }
446
+
447
+ func TestHandler_Multipart_Basic_BadSlice (t * testing.T ) {
448
+ body := & bytes.Buffer {}
449
+ writer := multipart .NewWriter (body )
450
+
451
+ queryString := `{
452
+ "query":"query HeroNameQuery { hero { name } }",
453
+ "variables":{"file":[null,null]}
454
+ }`
455
+
456
+ writer .WriteField ("operations" , queryString )
457
+ writer .WriteField ("map" , `{"0":["variables.file.x"]}` )
458
+
459
+ part , _ := writer .CreateFormFile ("0" , "test.txt" )
460
+ if _ , err := io .Copy (part , strings .NewReader ("How now brown cow" )); err != nil {
461
+ t .Fatalf ("unexpected copy writer fail %v" , err )
462
+ }
463
+
464
+ err := writer .Close ()
465
+ if err != nil {
466
+ t .Fatalf ("unexpected writer fail %v" , err )
467
+ }
468
+
469
+ req , err := http .NewRequest ("POST" , "/graphql" , body )
470
+ req .Header .Set ("Content-Type" , writer .FormDataContentType ())
471
+
472
+ h := handler .New (& handler.Config {
473
+ Schema : & testutil .StarWarsSchema ,
474
+ })
475
+ result , resp := executeTest (t , h , req )
445
476
if resp .Code != http .StatusOK {
446
477
t .Fatalf ("unexpected server response %v" , resp .Code )
447
478
}
448
- if ! reflect .DeepEqual (result , expected ) {
449
- t .Fatalf ("wrong result, graphql result diff: %v" , testutil .Diff (expected , result ))
479
+ if len (result .Errors ) != 1 || result .Errors [0 ].Message != "Must provide an operation." {
480
+ t .Fatalf ("unexpected response %+v" , result )
481
+ }
482
+ }
483
+
484
+ func TestHandler_Multipart_Basic_BadSliceLast (t * testing.T ) {
485
+ body := & bytes.Buffer {}
486
+ writer := multipart .NewWriter (body )
487
+
488
+ queryString := `{
489
+ "query":"query HeroNameQuery { hero { name } }",
490
+ "variables":{"file":[null,null]}
491
+ }`
492
+
493
+ writer .WriteField ("operations" , queryString )
494
+ writer .WriteField ("map" , `{"0":["variables.file.0.test"]}` )
495
+
496
+ part , _ := writer .CreateFormFile ("0" , "test.txt" )
497
+ if _ , err := io .Copy (part , strings .NewReader ("How now brown cow" )); err != nil {
498
+ t .Fatalf ("unexpected copy writer fail %v" , err )
499
+ }
500
+
501
+ err := writer .Close ()
502
+ if err != nil {
503
+ t .Fatalf ("unexpected writer fail %v" , err )
504
+ }
505
+
506
+ req , err := http .NewRequest ("POST" , "/graphql" , body )
507
+ req .Header .Set ("Content-Type" , writer .FormDataContentType ())
508
+
509
+ h := handler .New (& handler.Config {
510
+ Schema : & testutil .StarWarsSchema ,
511
+ })
512
+ result , resp := executeTest (t , h , req )
513
+ if resp .Code != http .StatusOK {
514
+ t .Fatalf ("unexpected server response %v" , resp .Code )
515
+ }
516
+ if len (result .Errors ) != 1 || result .Errors [0 ].Message != "Must provide an operation." {
517
+ t .Fatalf ("unexpected response %+v" , result )
518
+ }
519
+ }
520
+
521
+ func TestHandler_Multipart_Basic_BadSliceMiddle (t * testing.T ) {
522
+ body := & bytes.Buffer {}
523
+ writer := multipart .NewWriter (body )
524
+
525
+ queryString := `{
526
+ "query":"query HeroNameQuery { hero { name } }",
527
+ "variables":{"file":[null,null]}
528
+ }`
529
+
530
+ writer .WriteField ("operations" , queryString )
531
+ writer .WriteField ("map" , `{"0":["variables.file.x.test"]}` )
532
+
533
+ part , _ := writer .CreateFormFile ("0" , "test.txt" )
534
+ if _ , err := io .Copy (part , strings .NewReader ("How now brown cow" )); err != nil {
535
+ t .Fatalf ("unexpected copy writer fail %v" , err )
536
+ }
537
+
538
+ err := writer .Close ()
539
+ if err != nil {
540
+ t .Fatalf ("unexpected writer fail %v" , err )
541
+ }
542
+
543
+ req , err := http .NewRequest ("POST" , "/graphql" , body )
544
+ req .Header .Set ("Content-Type" , writer .FormDataContentType ())
545
+
546
+ h := handler .New (& handler.Config {
547
+ Schema : & testutil .StarWarsSchema ,
548
+ })
549
+ result , resp := executeTest (t , h , req )
550
+ if resp .Code != http .StatusOK {
551
+ t .Fatalf ("unexpected server response %v" , resp .Code )
552
+ }
553
+ if len (result .Errors ) != 1 || result .Errors [0 ].Message != "Must provide an operation." {
554
+ t .Fatalf ("unexpected response %+v" , result )
450
555
}
451
556
}
0 commit comments