@@ -36,13 +36,51 @@ func decodeResponse(t *testing.T, recorder *httptest.ResponseRecorder) *graphql.
3636 }
3737 return & target
3838}
39+
3940func executeTest (t * testing.T , h * handler.Handler , req * http.Request ) (* graphql.Result , * httptest.ResponseRecorder ) {
4041 resp := httptest .NewRecorder ()
4142 h .ServeHTTP (resp , req )
4243 result := decodeResponse (t , resp )
4344 return result , resp
4445}
4546
47+ func uploadTest (t * testing.T , mapData string ) * http.Request {
48+ body := & bytes.Buffer {}
49+ writer := multipart .NewWriter (body )
50+
51+ queryString := `{
52+ "query":"query HeroNameQuery { hero { name } }",
53+ "variables":{"file":[null,null]}
54+ }`
55+
56+ writer .WriteField ("operations" , queryString )
57+ if mapData != "" {
58+ writer .WriteField ("map" , mapData )
59+
60+ part1 , _ := writer .CreateFormFile ("0" , "test1.txt" )
61+ if _ , err := io .Copy (part1 , strings .NewReader ("How now brown cow" )); err != nil {
62+ t .Fatalf ("unexpected copy writer fail %v" , err )
63+ }
64+ part2 , _ := writer .CreateFormFile ("1" , "test2.txt" )
65+ if _ , err := io .Copy (part2 , strings .NewReader ("How now gold fish" )); err != nil {
66+ t .Fatalf ("unexpected copy writer fail %v" , err )
67+ }
68+ }
69+
70+ err := writer .Close ()
71+ if err != nil {
72+ t .Fatalf ("unexpected writer fail %v" , err )
73+ }
74+
75+ req , err := http .NewRequest ("POST" , "/graphql" , body )
76+ if err != nil {
77+ t .Fatalf ("unexpected NewRequest fail %v" , err )
78+ }
79+ req .Header .Set ("Content-Type" , writer .FormDataContentType ())
80+
81+ return req
82+ }
83+
4684func TestContextPropagated (t * testing.T ) {
4785 myNameQuery := graphql .NewObject (graphql.ObjectConfig {
4886 Name : "Query" ,
@@ -226,27 +264,15 @@ func TestHandler_Post(t *testing.T) {
226264}
227265
228266func TestHandler_Multipart_Basic (t * testing.T ) {
229- body := & bytes.Buffer {}
230-
231- writer := multipart .NewWriter (body )
232-
233267 expected := & graphql.Result {
234268 Data : map [string ]interface {}{
235269 "hero" : map [string ]interface {}{
236270 "name" : "R2-D2" ,
237271 },
238272 },
239273 }
240- queryString := `{"query":"query HeroNameQuery { hero { name } }"}`
241274
242- writer .WriteField ("operations" , queryString )
243- err := writer .Close ()
244- if err != nil {
245- t .Fatalf ("unexpected writer fail %v" , err )
246- }
247-
248- req , err := http .NewRequest ("POST" , "/graphql" , body )
249- req .Header .Set ("Content-Type" , writer .FormDataContentType ())
275+ req := uploadTest (t , "" )
250276
251277 h := handler .New (& handler.Config {
252278 Schema : & testutil .StarWarsSchema ,
@@ -285,20 +311,7 @@ func TestHandler_Multipart_Basic_ErrNoOperation(t *testing.T) {
285311}
286312
287313func TestHandler_Multipart_Basic_ErrBadMap (t * testing.T ) {
288- body := & bytes.Buffer {}
289- writer := multipart .NewWriter (body )
290-
291- queryString := `{"query":"query HeroNameQuery { hero { name } }"}`
292- writer .WriteField ("operations" , queryString )
293- writer .WriteField ("map" , "{" )
294-
295- err := writer .Close ()
296- if err != nil {
297- t .Fatalf ("unexpected writer fail %v" , err )
298- }
299-
300- req , err := http .NewRequest ("POST" , "/graphql" , body )
301- req .Header .Set ("Content-Type" , writer .FormDataContentType ())
314+ req := uploadTest (t , `{` )
302315
303316 h := handler .New (& handler.Config {
304317 Schema : & testutil .StarWarsSchema ,
@@ -313,29 +326,7 @@ func TestHandler_Multipart_Basic_ErrBadMap(t *testing.T) {
313326}
314327
315328func 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 ())
329+ req := uploadTest (t , `{"0":["xxx.file"]}` )
339330
340331 h := handler .New (& handler.Config {
341332 Schema : & testutil .StarWarsSchema ,
@@ -358,29 +349,7 @@ func TestHandler_Multipart_Basic_Upload(t *testing.T) {
358349 },
359350 }
360351
361- body := & bytes.Buffer {}
362- writer := multipart .NewWriter (body )
363-
364- queryString := `{
365- "query":"query HeroNameQuery { hero { name } }",
366- "variables":{"file":null}
367- }`
368-
369- writer .WriteField ("operations" , queryString )
370- writer .WriteField ("map" , `{"0":["variables.file"]}` )
371- part , _ := writer .CreateFormFile ("0" , "test.txt" )
372-
373- if _ , err := io .Copy (part , strings .NewReader ("How now brown cow" )); err != nil {
374- t .Fatalf ("unexpected copy writer fail %v" , err )
375- }
376-
377- err := writer .Close ()
378- if err != nil {
379- t .Fatalf ("unexpected writer fail %v" , err )
380- }
381-
382- req , err := http .NewRequest ("POST" , "/graphql" , body )
383- req .Header .Set ("Content-Type" , writer .FormDataContentType ())
352+ req := uploadTest (t , `{"0":["variables.file"]}` )
384353
385354 h := handler .New (& handler.Config {
386355 Schema : & testutil .StarWarsSchema ,
@@ -403,34 +372,7 @@ func TestHandler_Multipart_Basic_UploadSlice(t *testing.T) {
403372 },
404373 }
405374
406- body := & bytes.Buffer {}
407- writer := multipart .NewWriter (body )
408-
409- queryString := `{
410- "query":"query HeroNameQuery { hero { name } }",
411- "variables":{"file":[null,null]}
412- }`
413-
414- writer .WriteField ("operations" , queryString )
415- writer .WriteField ("map" , `{"0":["variables.file.0"],"1":["variables.file.1"]}` )
416-
417- part1 , _ := writer .CreateFormFile ("0" , "test.txt" )
418- if _ , err := io .Copy (part1 , strings .NewReader ("How now brown cow" )); err != nil {
419- t .Fatalf ("unexpected copy writer fail %v" , err )
420- }
421-
422- part2 , _ := writer .CreateFormFile ("1" , "test.txt" )
423- if _ , err := io .Copy (part2 , strings .NewReader ("How now gold fish" )); err != nil {
424- t .Fatalf ("unexpected copy writer fail %v" , err )
425- }
426-
427- err := writer .Close ()
428- if err != nil {
429- t .Fatalf ("unexpected writer fail %v" , err )
430- }
431-
432- req , err := http .NewRequest ("POST" , "/graphql" , body )
433- req .Header .Set ("Content-Type" , writer .FormDataContentType ())
375+ req := uploadTest (t , `{"0":["variables.file.0"],"1":["variables.file.1"]}` )
434376
435377 h := handler .New (& handler.Config {
436378 Schema : & testutil .StarWarsSchema ,
@@ -445,29 +387,7 @@ func TestHandler_Multipart_Basic_UploadSlice(t *testing.T) {
445387}
446388
447389func 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 ())
390+ req := uploadTest (t , `{"0":["variables.file.x"]}` )
471391
472392 h := handler .New (& handler.Config {
473393 Schema : & testutil .StarWarsSchema ,
@@ -482,29 +402,7 @@ func TestHandler_Multipart_Basic_BadSlice(t *testing.T) {
482402}
483403
484404func 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 ())
405+ req := uploadTest (t , `{"0":["variables.file.0.test"]}` )
508406
509407 h := handler .New (& handler.Config {
510408 Schema : & testutil .StarWarsSchema ,
@@ -519,29 +417,7 @@ func TestHandler_Multipart_Basic_BadSliceLast(t *testing.T) {
519417}
520418
521419func 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 ())
420+ req := uploadTest (t , `{"0":["variables.file.x.test"]}` )
545421
546422 h := handler .New (& handler.Config {
547423 Schema : & testutil .StarWarsSchema ,
0 commit comments