test resp

master
breel 2020-08-08 21:56:05 -06:00
parent ac7833338c
commit 2174361d8e
1 changed files with 75 additions and 0 deletions

75
server/response_test.go Normal file
View File

@ -0,0 +1,75 @@
package server
import (
"encoding/json"
"errors"
"net/http"
"net/http/httptest"
"testing"
"gopkg.in/mgo.v2/bson"
)
func TestResponse(t *testing.T) {
cases := map[string]struct {
foo func(*REST, http.ResponseWriter)
body string
status int
}{
"OK": {
foo: func(rest *REST, w http.ResponseWriter) {
rest.respOK(w)
},
body: `{"ok":true}`,
status: http.StatusOK,
},
"not found": {
foo: func(rest *REST, w http.ResponseWriter) {
rest.respNotFound(w)
},
body: `{"error":"not found"}`,
status: http.StatusNotFound,
},
"conflict": {
foo: func(rest *REST, w http.ResponseWriter) {
rest.respConflict(w)
},
body: `{"error":"collision found"}`,
status: http.StatusConflict,
},
"error": {
foo: func(rest *REST, w http.ResponseWriter) {
rest.respError(w, errors.New("my err"))
},
body: `{"error":"my err"}`,
status: http.StatusInternalServerError,
},
"bad req": {
foo: func(rest *REST, w http.ResponseWriter) {
rest.respBadRequest(w, "bad dog")
},
body: `{"error":"bad dog"}`,
status: http.StatusBadRequest,
},
}
for name, d := range cases {
c := d
t.Run(name, func(t *testing.T) {
rest := &REST{}
w := httptest.NewRecorder()
c.foo(rest, w)
if w.Code != c.status {
t.Fatalf("want status %d, got %d", c.status, w.Code)
}
var m bson.M
if err := json.NewDecoder(w.Body).Decode(&m); err != nil {
t.Fatal(err)
}
body, _ := json.Marshal(m)
if s := string(body); s != c.body {
t.Fatalf("want body %q, got %q", c.body, s)
}
})
}
}