@@ -389,9 +389,6 @@ func TestHandler_Multipart_Basic_Upload(t *testing.T) {
389389 if resp .Code != http .StatusOK {
390390 t .Fatalf ("unexpected server response %v" , resp .Code )
391391 }
392- if resp .Code != http .StatusOK {
393- t .Fatalf ("unexpected server response %v" , resp .Code )
394- }
395392 if ! reflect .DeepEqual (result , expected ) {
396393 t .Fatalf ("wrong result, graphql result diff: %v" , testutil .Diff (expected , result ))
397394 }
@@ -442,10 +439,118 @@ func TestHandler_Multipart_Basic_UploadSlice(t *testing.T) {
442439 if resp .Code != http .StatusOK {
443440 t .Fatalf ("unexpected server response %v" , resp .Code )
444441 }
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 )
445476 if resp .Code != http .StatusOK {
446477 t .Fatalf ("unexpected server response %v" , resp .Code )
447478 }
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 )
450555 }
451556}
0 commit comments