diff --git a/internal/handlers/login_test.go b/internal/handlers/postlogin_test.go similarity index 82% rename from internal/handlers/login_test.go rename to internal/handlers/postlogin_test.go index 4edde1f..319ab39 100644 --- a/internal/handlers/login_test.go +++ b/internal/handlers/postlogin_test.go @@ -91,18 +91,18 @@ func TestLogin(t *testing.T) { handler.ServeHTTP(rr, req) - assert.Equal(tc.expectedStatusCode, rr.Code) + assert.Equal(tc.expectedStatusCode, rr.Code, "handler returned wrong status code: got %v want %v", rr.Code, tc.expectedStatusCode) cookies := rr.Result().Cookies() if tc.expectedCookie != nil { sessionCookie := cookies[0] - assert.Equal(tc.expectedCookie.Name, sessionCookie.Name) - assert.Equal(tc.expectedCookie.Value, sessionCookie.Value) - assert.Equal(tc.expectedCookie.HttpOnly, sessionCookie.HttpOnly) + assert.Equal(tc.expectedCookie.Name, sessionCookie.Name, "handler returned wrong cookie name: got %v want %v", sessionCookie.Name, tc.expectedCookie.Name) + assert.Equal(tc.expectedCookie.Value, sessionCookie.Value, "handler returned wrong cookie value: got %v want %v", sessionCookie.Value, tc.expectedCookie.Value) + assert.Equal(tc.expectedCookie.HttpOnly, sessionCookie.HttpOnly, "handler returned wrong cookie HttpOnly: got %v want %v", sessionCookie.HttpOnly, tc.expectedCookie.HttpOnly) } else { - assert.Empty(cookies) + assert.Empty(cookies, "handler returned unexpected cookie: got %v want %v", cookies, tc.expectedCookie) } userStore.AssertExpectations(t) diff --git a/internal/handlers/postregister.go b/internal/handlers/postregister.go index b42422a..d6ac304 100644 --- a/internal/handlers/postregister.go +++ b/internal/handlers/postregister.go @@ -27,15 +27,18 @@ func (h *PostRegisterHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) err := h.userStore.CreateUser(email, password) if err != nil { - http.Error(w, "Error creating user", http.StatusInternalServerError) + + w.WriteHeader(http.StatusBadRequest) + c := templates.RegisterError() + c.Render(r.Context(), w) return } - c := templates.RegisterSucces() + c := templates.RegisterSuccess() err = c.Render(r.Context(), w) if err != nil { - http.Error(w, "Error rendering template", http.StatusInternalServerError) + http.Error(w, "error rendering template", http.StatusInternalServerError) return } diff --git a/internal/handlers/postregister_test.go b/internal/handlers/postregister_test.go new file mode 100644 index 0000000..dd05cf6 --- /dev/null +++ b/internal/handlers/postregister_test.go @@ -0,0 +1,66 @@ +package handlers + +import ( + "bytes" + + storemock "goth/internal/store/mock" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "gorm.io/gorm" +) + +func TestRegisterUserHandler(t *testing.T) { + + testCases := []struct { + name string + email string + password string + createUserError error + expectedStatusCode int + expectedBody []byte + }{ + { + name: "success", + email: "test@example.com", + password: "password", + expectedStatusCode: http.StatusOK, + expectedBody: []byte(`
Go to login
`), + }, + { + name: "fail - error creating user", + email: "test@example.com", + password: "password", + createUserError: gorm.ErrDuplicatedKey, + expectedStatusCode: http.StatusBadRequest, + expectedBody: []byte(`Go to login
} + + +templ RegisterError() { +There was an error registering your account
+There was an error registering your account