Improving tests by handling multiple test cases
This commit is contained in:
		@ -80,13 +80,15 @@ func (m *Repository) MakeReservation(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	// filled with the info when sent back.
 | 
			
		||||
	res, ok := m.App.Session.Get(r.Context(), "reservation").(models.Reservation)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		helpers.ServerError(w, errors.New("cannot get reservation from session"))
 | 
			
		||||
		m.App.Session.Put(r.Context(), "error", "can't get reservation from session")
 | 
			
		||||
		http.Redirect(w, r, "/", http.StatusTemporaryRedirect)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	room, err := m.DB.GetRoomById(res.RoomID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		helpers.ServerError(w, err)
 | 
			
		||||
		m.App.Session.Put(r.Context(), "error", "can't find room")
 | 
			
		||||
		http.Redirect(w, r, "/", http.StatusTemporaryRedirect)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,6 @@ import (
 | 
			
		||||
	"log"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"net/http/httptest"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -19,16 +18,15 @@ var theTests = []struct {
 | 
			
		||||
	name               string
 | 
			
		||||
	url                string
 | 
			
		||||
	method             string
 | 
			
		||||
	params             []postData
 | 
			
		||||
	expectedStatusCode int
 | 
			
		||||
}{
 | 
			
		||||
	// {"home", "/", "GET", []postData{}, http.StatusOK},
 | 
			
		||||
	// {"about", "/about", "GET", []postData{}, http.StatusOK},
 | 
			
		||||
	// {"gq", "/generals-quarters", "GET", []postData{}, http.StatusOK},
 | 
			
		||||
	// {"ms", "/majors-suite", "GET", []postData{}, http.StatusOK},
 | 
			
		||||
	// {"sa", "/availability", "GET", []postData{}, http.StatusOK},
 | 
			
		||||
	// {"contact", "/contact", "GET", []postData{}, http.StatusOK},
 | 
			
		||||
	// {"ma", "/make-reservation", "GET", []postData{}, http.StatusOK},
 | 
			
		||||
	{"home", "/", "GET", http.StatusOK},
 | 
			
		||||
	{"about", "/about", "GET", http.StatusOK},
 | 
			
		||||
	{"gq", "/generals-quarters", "GET", http.StatusOK},
 | 
			
		||||
	{"ms", "/majors-suite", "GET", http.StatusOK},
 | 
			
		||||
	{"sa", "/availability", "GET", http.StatusOK},
 | 
			
		||||
	{"contact", "/contact", "GET", http.StatusOK},
 | 
			
		||||
 | 
			
		||||
	// {"post-search-avail", "/availability", "POST", []postData{
 | 
			
		||||
	// 	{key: "start", value: "2020-01-01"},
 | 
			
		||||
	// 	{key: "end", value: "2020-01-02"},
 | 
			
		||||
@ -51,28 +49,13 @@ func TestHandlers(t *testing.T) {
 | 
			
		||||
	defer ts.Close()
 | 
			
		||||
 | 
			
		||||
	for _, e := range theTests {
 | 
			
		||||
		if e.method == "GET" {
 | 
			
		||||
			resp, err := ts.Client().Get(ts.URL + e.url)
 | 
			
		||||
			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)
 | 
			
		||||
			}
 | 
			
		||||
		} 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)
 | 
			
		||||
			}
 | 
			
		||||
		resp, err := ts.Client().Get(ts.URL + e.url)
 | 
			
		||||
		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)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -103,6 +86,32 @@ func TestRepository_Reservation(t *testing.T) {
 | 
			
		||||
		t.Errorf("Reservation handler returned response code: got %d, wanted %d",
 | 
			
		||||
			rr.Code, http.StatusOK)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// test case where reservation is not in session (reset everything)
 | 
			
		||||
	req, _ = http.NewRequest("GET", "/make-reservation", nil)
 | 
			
		||||
	ctx = getCtx(req)
 | 
			
		||||
	req = req.WithContext(ctx)
 | 
			
		||||
	rr = httptest.NewRecorder()
 | 
			
		||||
 | 
			
		||||
	handler.ServeHTTP(rr, req)
 | 
			
		||||
	if rr.Code != http.StatusTemporaryRedirect {
 | 
			
		||||
		t.Errorf("Reservation handler returned response code: got %d, wanted %d",
 | 
			
		||||
			rr.Code, http.StatusTemporaryRedirect)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// test with non-existant room
 | 
			
		||||
	req, _ = http.NewRequest("GET", "/make-reservation", nil)
 | 
			
		||||
	ctx = getCtx(req)
 | 
			
		||||
	req = req.WithContext(ctx)
 | 
			
		||||
	rr = httptest.NewRecorder()
 | 
			
		||||
	reservation.RoomID = 100
 | 
			
		||||
	session.Put(ctx, "reservation", reservation)
 | 
			
		||||
 | 
			
		||||
	handler.ServeHTTP(rr, req)
 | 
			
		||||
	if rr.Code != http.StatusTemporaryRedirect {
 | 
			
		||||
		t.Errorf("Reservation handler returned response code: got %d, wanted %d",
 | 
			
		||||
			rr.Code, http.StatusTemporaryRedirect)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getCtx(req *http.Request) context.Context {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user