package routes_test import ( "gitea.deepak.science/deepak/gogmagog/routes" "gitea.deepak.science/deepak/gogmagog/tokens" "github.com/stretchr/testify/assert" "net/http" "net/http/httptest" "strings" "testing" ) func TestPingHandler(t *testing.T) { // set up assert := assert.New(t) m := getEmptyModel() router := routes.NewRouter(m, tokens.New("whatever")) req, _ := http.NewRequest("GET", "/ping", nil) rr := httptest.NewRecorder() // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusOK, status) expected := `{"ping": "pong"}` assert.JSONEq(expected, rr.Body.String()) contentType := rr.Header().Get("Content-Type") assert.Equal("application/json", contentType) } func TestPingPostHandler(t *testing.T) { // set up assert := assert.New(t) m := getEmptyModel() router := routes.NewRouter(m, tokens.New("whatever")) req, _ := http.NewRequest("POST", "/ping", nil) rr := httptest.NewRecorder() // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusMethodNotAllowed, status) expected := http.StatusText(http.StatusMethodNotAllowed) assert.Equal(expected, strings.TrimSpace(rr.Body.String())) } func TestNotFoundHandler(t *testing.T) { // set up assert := assert.New(t) m := getEmptyModel() router := routes.NewRouter(m, tokens.New("whatever")) req, _ := http.NewRequest("POST", "/null", nil) rr := httptest.NewRecorder() // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusNotFound, status) expected := http.StatusText(http.StatusNotFound) assert.Equal(expected, strings.TrimSpace(rr.Body.String())) } func TestPingError(t *testing.T) { // set up assert := assert.New(t) m := getEmptyModel() router := routes.NewRouter(m, tokens.New("whatever")) req, _ := http.NewRequest("GET", "/ping", nil) rr := NewBadWriter() // function under test router.ServeHTTP(rr, req) // check results status := rr.Code assert.Equal(http.StatusInternalServerError, status) }