Writing tests for POST handlers

This commit is contained in:
Muyao CHEN 2024-07-02 13:16:27 +02:00
parent 21478b20ae
commit 70996c6f60
2 changed files with 28 additions and 1 deletions

View File

@ -3,6 +3,7 @@ package handlers
import ( import (
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"net/url"
"testing" "testing"
) )
@ -25,6 +26,20 @@ var theTests = []struct {
{"sa", "/availability", "GET", []postData{}, http.StatusOK}, {"sa", "/availability", "GET", []postData{}, http.StatusOK},
{"contact", "/contact", "GET", []postData{}, http.StatusOK}, {"contact", "/contact", "GET", []postData{}, http.StatusOK},
{"ma", "/make-reservation", "GET", []postData{}, http.StatusOK}, {"ma", "/make-reservation", "GET", []postData{}, http.StatusOK},
{"post-search-avail", "/availability", "POST", []postData{
{key: "start", value: "2020-01-01"},
{key: "end", value: "2020-01-02"},
}, http.StatusOK},
{"post-search-avail-json", "/availability-json", "POST", []postData{
{key: "start", value: "2020-01-01"},
{key: "end", value: "2020-01-02"},
}, http.StatusOK},
{"make-reservation", "/make-reservation", "POST", []postData{
{key: "first_name", value: "John"},
{key: "last_name", value: "Smith"},
{key: "email", value: "me@here.com"},
{key: "phone", value: "12345"},
}, http.StatusOK},
} }
func TestHandlers(t *testing.T) { func TestHandlers(t *testing.T) {
@ -43,6 +58,18 @@ func TestHandlers(t *testing.T) {
t.Errorf("for %s, expected %d but got %d", e.name, e.expectedStatusCode, resp.StatusCode) t.Errorf("for %s, expected %d but got %d", e.name, e.expectedStatusCode, resp.StatusCode)
} }
} else { } else {
values := url.Values{}
for _, x := range e.params {
values.Add(x.key, x.value)
}
resp, err := ts.Client().PostForm(ts.URL+e.url, values)
if err != nil {
t.Log(err)
t.Fatal(err)
}
if resp.StatusCode != e.expectedStatusCode {
t.Errorf("for %s, expected %d but got %d", e.name, e.expectedStatusCode, resp.StatusCode)
}
} }
} }
} }

View File

@ -53,7 +53,7 @@ func getRoutes() http.Handler {
mux := chi.NewMux() mux := chi.NewMux()
mux.Use(middleware.Recoverer) mux.Use(middleware.Recoverer)
mux.Use(NoSurf) // mux.Use(NoSurf) // No need to test
mux.Use(SessionLoad) mux.Use(SessionLoad)
mux.Get("/", Repo.Home) mux.Get("/", Repo.Home)