Improving tests by handling multiple test cases
This commit is contained in:
parent
f67aed4942
commit
0f17b3405e
@ -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 {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package dbrepo
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"go-udemy-web-1/internal/models"
|
||||
"time"
|
||||
)
|
||||
@ -33,5 +34,9 @@ func (m *testDBRepo) SearchAvailabilityForAllRooms(start, end time.Time) ([]mode
|
||||
// GetRoomById gets a room by id
|
||||
func (m *testDBRepo) GetRoomById(id int) (models.Room, error) {
|
||||
var room models.Room
|
||||
|
||||
if id > 2 {
|
||||
return room, errors.New("Deliberate error")
|
||||
}
|
||||
return room, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user