12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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)
- }
- }
- }
|