Skip to content

Commit 42fc4ce

Browse files
author
David Koblas
committed
More coverage updates
1 parent bb93313 commit 42fc4ce

File tree

2 files changed

+98
-4
lines changed

2 files changed

+98
-4
lines changed

handler.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,15 +148,17 @@ func NewRequestOptions(r *http.Request, maxMemory int64) *RequestOptions {
148148
if vv == "variables" {
149149
node = opts.Variables
150150
} else {
151-
panic("Invalid top level tag")
151+
// panic("Invalid top level tag")
152+
return &RequestOptions{}
152153
}
153154
case map[string]interface{}:
154155
node = node.(map[string]interface{})[vv]
155156
case []interface{}:
156157
if idx, err := strconv.ParseInt(vv, 10, 64); err == nil {
157158
node = node.([]interface{})[idx]
158159
} else {
159-
panic("Unable to lookup index")
160+
// panic("Unable to lookup index")
161+
return &RequestOptions{}
160162
}
161163
default:
162164
panic(fmt.Errorf("Unknown type %T", node))
@@ -172,10 +174,12 @@ func NewRequestOptions(r *http.Request, maxMemory int64) *RequestOptions {
172174
if idx, err := strconv.ParseInt(last, 10, 64); err == nil {
173175
node.([]interface{})[idx] = data
174176
} else {
175-
panic("Unable to lookup index")
177+
// panic("Unable to lookup index")
178+
return &RequestOptions{}
176179
}
177180
default:
178-
panic(fmt.Errorf("Unknown last type %T", node))
181+
// panic(fmt.Errorf("Unknown last type %T", node))
182+
return &RequestOptions{}
179183
}
180184
}
181185
}

handler_test.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,43 @@ func TestHandler_Multipart_Basic_ErrBadMap(t *testing.T) {
312312
}
313313
}
314314

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+
315352
func TestHandler_Multipart_Basic_Upload(t *testing.T) {
316353
expected := &graphql.Result{
317354
Data: map[string]interface{}{
@@ -359,3 +396,56 @@ func TestHandler_Multipart_Basic_Upload(t *testing.T) {
359396
t.Fatalf("wrong result, graphql result diff: %v", testutil.Diff(expected, result))
360397
}
361398
}
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

Comments
 (0)