add request body read tests
This commit is contained in:
@@ -0,0 +1,61 @@
|
|||||||
|
package rest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestReadRequestJSON(t *testing.T) {
|
||||||
|
type TestInput struct {
|
||||||
|
Title string `json:"title"`
|
||||||
|
Serves int `json:"serves"`
|
||||||
|
Author string `json:"author,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type TestCase struct {
|
||||||
|
Req *http.Request
|
||||||
|
Input TestInput
|
||||||
|
Err error
|
||||||
|
}
|
||||||
|
|
||||||
|
testCases := []TestCase{
|
||||||
|
{
|
||||||
|
Req: httptest.NewRequest("POST", "/recipes", nil),
|
||||||
|
Err: errors.New("unexpected end of JSON input"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Req: httptest.NewRequest("POST", "/recipes", strings.NewReader(`{"title":"Gnocchi","serves":2}`)),
|
||||||
|
Input: TestInput{Title: "Gnocchi", Serves: 2},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Req: httptest.NewRequest("POST", "/recipes", strings.NewReader(`{"title":"Spaghetti","serves":4,"author":"Mom"}`)),
|
||||||
|
Input: TestInput{Title: "Spaghetti", Serves: 4, Author: "Mom"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, tc := range testCases {
|
||||||
|
t.Logf("(%d) Testing request body against %+v", i, tc.Input)
|
||||||
|
|
||||||
|
input := TestInput{}
|
||||||
|
err := ReadRequestJSON(tc.Req, &input)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if tc.Err != nil {
|
||||||
|
// Compare error strings, as json.SyntaxError isn't directly comparable
|
||||||
|
if err.Error() != tc.Err.Error() {
|
||||||
|
t.Errorf("Expected error %v, got %v", tc.Err, err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
t.Errorf("Expected error %v, got %v", tc.Err, err)
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if input != tc.Input {
|
||||||
|
t.Errorf("Expected %v, got %v", tc.Input, input)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user