summaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
authorElizabeth <elizabeth@simponic.xyz>2024-04-03 15:59:19 -0600
committerElizabeth <elizabeth@simponic.xyz>2024-04-03 16:07:40 -0600
commitb74a955dcb8cc1d5d2599a1b096510a60e55e7d7 (patch)
tree03236728050cf65e3f0151faa1f98ebff821fe4c /api
parent8c7d9b376249807e1595f440fa72c77cafbdaf6f (diff)
downloadhatecomputers.club-b74a955dcb8cc1d5d2599a1b096510a60e55e7d7.tar.gz
hatecomputers.club-b74a955dcb8cc1d5d2599a1b096510a60e55e7d7.zip
add guestbook tests
Diffstat (limited to 'api')
-rw-r--r--api/guestbook_test.go129
-rw-r--r--api/serve.go18
2 files changed, 135 insertions, 12 deletions
diff --git a/api/guestbook_test.go b/api/guestbook_test.go
new file mode 100644
index 0000000..5c1831f
--- /dev/null
+++ b/api/guestbook_test.go
@@ -0,0 +1,129 @@
+package api_test
+
+import (
+ "database/sql"
+ "net/http"
+ "net/http/httptest"
+ "os"
+ "testing"
+
+ "git.hatecomputers.club/hatecomputers/hatecomputers.club/api"
+ "git.hatecomputers.club/hatecomputers/hatecomputers.club/args"
+ "git.hatecomputers.club/hatecomputers/hatecomputers.club/database"
+ "git.hatecomputers.club/hatecomputers/hatecomputers.club/utils"
+)
+
+func setup() (*sql.DB, *api.RequestContext, func()) {
+ randomDb := utils.RandomId()
+
+ testDb := database.MakeConn(&randomDb)
+ database.Migrate(testDb)
+
+ context := &api.RequestContext{
+ DBConn: testDb,
+ Args: &args.Arguments{},
+ TemplateData: &(map[string]interface{}{}),
+ }
+
+ return testDb, context, func() {
+ testDb.Close()
+ os.Remove(randomDb)
+ }
+}
+
+func TestValidGuestbookPutsInDatabase(t *testing.T) {
+ db, context, cleanup := setup()
+ defer cleanup()
+
+ entries, err := database.GetGuestbookEntries(db)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(entries) > 0 {
+ t.Errorf("expected no entries, got entries")
+ }
+
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ api.SignGuestbookContinuation(context, r, w)(api.IdContinuation, api.IdContinuation)
+ }))
+ defer ts.Close()
+
+ req := httptest.NewRequest("POST", ts.URL, nil)
+ req.Form = map[string][]string{
+ "name": {"test"},
+ "message": {"test"},
+ }
+
+ w := httptest.NewRecorder()
+ ts.Config.Handler.ServeHTTP(w, req)
+
+ if w.Code != http.StatusOK {
+ t.Errorf("expected status code 200, got %d", w.Code)
+ }
+
+ entries, err = database.GetGuestbookEntries(db)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if len(entries) != 1 {
+ t.Errorf("expected 1 entry, got %d", len(entries))
+ }
+
+ if entries[0].Name != req.FormValue("name") {
+ t.Errorf("expected name %s, got %s", req.FormValue("name"), entries[0].Name)
+ }
+}
+
+func TestInvalidGuestbookNotFoundInDatabase(t *testing.T) {
+ db, context, cleanup := setup()
+ defer cleanup()
+
+ entries, err := database.GetGuestbookEntries(db)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(entries) > 0 {
+ t.Errorf("expected no entries, got entries")
+ }
+
+ testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ api.SignGuestbookContinuation(context, r, w)(api.IdContinuation, api.IdContinuation)
+ }))
+ defer testServer.Close()
+
+ reallyLongStringThatWouldTakeTooMuchSpace := "a\na\na\na\na\na\na\na\na\na\na\n"
+ invalidRequests := []struct {
+ name string
+ message string
+ }{
+ {"", "test"},
+ {"test", ""},
+ {"", ""},
+ {"test", reallyLongStringThatWouldTakeTooMuchSpace},
+ }
+
+ for _, form := range invalidRequests {
+ req := httptest.NewRequest("POST", testServer.URL, nil)
+ req.Form = map[string][]string{
+ "name": {form.name},
+ "message": {form.message},
+ }
+
+ responseRecorder := httptest.NewRecorder()
+ testServer.Config.Handler.ServeHTTP(responseRecorder, req)
+
+ if responseRecorder.Code != http.StatusBadRequest {
+ t.Errorf("expected status code 400, got %d", responseRecorder.Code)
+ }
+ }
+
+ entries, err = database.GetGuestbookEntries(db)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if len(entries) != 0 {
+ t.Errorf("expected 0 entries, got %d", len(entries))
+ }
+}
diff --git a/api/serve.go b/api/serve.go
index 1b632a1..9547ee0 100644
--- a/api/serve.go
+++ b/api/serve.go
@@ -88,9 +88,8 @@ func MakeServer(argv *args.Arguments, dbConn *sql.DB) *http.Server {
makeRequestContext := func() *RequestContext {
return &RequestContext{
- DBConn: dbConn,
- Args: argv,
-
+ DBConn: dbConn,
+ Args: argv,
TemplateData: &map[string]interface{}{},
}
}
@@ -100,7 +99,7 @@ func MakeServer(argv *args.Arguments, dbConn *sql.DB) *http.Server {
LogRequestContinuation(requestContext, r, w)(VerifySessionContinuation, FailurePassingContinuation)(IdContinuation, IdContinuation)(TemplateContinuation("home.html", true), FailurePassingContinuation)(LogExecutionTimeContinuation, LogExecutionTimeContinuation)(IdContinuation, IdContinuation)
})
- mux.HandleFunc("GET /api/health", func(w http.ResponseWriter, r *http.Request) {
+ mux.HandleFunc("GET /health", func(w http.ResponseWriter, r *http.Request) {
requestContext := makeRequestContext()
LogRequestContinuation(requestContext, r, w)(HealthCheckContinuation, FailurePassingContinuation)(LogExecutionTimeContinuation, LogExecutionTimeContinuation)(IdContinuation, IdContinuation)
})
@@ -112,12 +111,7 @@ func MakeServer(argv *args.Arguments, dbConn *sql.DB) *http.Server {
mux.HandleFunc("GET /auth", func(w http.ResponseWriter, r *http.Request) {
requestContext := makeRequestContext()
- LogRequestContinuation(requestContext, r, w)(InterceptCodeContinuation, FailurePassingContinuation)(LogExecutionTimeContinuation, LogExecutionTimeContinuation)(IdContinuation, IdContinuation)
- })
-
- mux.HandleFunc("GET /me", func(w http.ResponseWriter, r *http.Request) {
- requestContext := makeRequestContext()
- LogRequestContinuation(requestContext, r, w)(VerifySessionContinuation, FailurePassingContinuation)(RefreshSessionContinuation, GoLoginContinuation)(LogExecutionTimeContinuation, LogExecutionTimeContinuation)(IdContinuation, IdContinuation)
+ LogRequestContinuation(requestContext, r, w)(InterceptOauthCodeContinuation, FailurePassingContinuation)(LogExecutionTimeContinuation, LogExecutionTimeContinuation)(IdContinuation, IdContinuation)
})
mux.HandleFunc("GET /logout", func(w http.ResponseWriter, r *http.Request) {
@@ -157,12 +151,12 @@ func MakeServer(argv *args.Arguments, dbConn *sql.DB) *http.Server {
mux.HandleFunc("GET /guestbook", func(w http.ResponseWriter, r *http.Request) {
requestContext := makeRequestContext()
- LogRequestContinuation(requestContext, r, w)(VerifySessionContinuation, FailurePassingContinuation)(HcaptchaArgsContinuation, HcaptchaArgsContinuation)(ListGuestbookContinuation, ListGuestbookContinuation)(TemplateContinuation("guestbook.html", true), FailurePassingContinuation)(LogExecutionTimeContinuation, LogExecutionTimeContinuation)(IdContinuation, IdContinuation)
+ LogRequestContinuation(requestContext, r, w)(VerifySessionContinuation, FailurePassingContinuation)(CaptchaArgsContinuation, CaptchaArgsContinuation)(ListGuestbookContinuation, ListGuestbookContinuation)(TemplateContinuation("guestbook.html", true), FailurePassingContinuation)(LogExecutionTimeContinuation, LogExecutionTimeContinuation)(IdContinuation, IdContinuation)
})
mux.HandleFunc("POST /guestbook", func(w http.ResponseWriter, r *http.Request) {
requestContext := makeRequestContext()
- LogRequestContinuation(requestContext, r, w)(VerifySessionContinuation, FailurePassingContinuation)(HcaptchaArgsContinuation, HcaptchaArgsContinuation)(SignGuestbookContinuation, FailurePassingContinuation)(ListGuestbookContinuation, ListGuestbookContinuation)(TemplateContinuation("guestbook.html", true), TemplateContinuation("guestbook.html", true))(LogExecutionTimeContinuation, LogExecutionTimeContinuation)(IdContinuation, IdContinuation)
+ LogRequestContinuation(requestContext, r, w)(VerifySessionContinuation, FailurePassingContinuation)(CaptchaVerificationContinuation, CaptchaVerificationContinuation)(SignGuestbookContinuation, FailurePassingContinuation)(ListGuestbookContinuation, ListGuestbookContinuation)(CaptchaArgsContinuation, CaptchaArgsContinuation)(TemplateContinuation("guestbook.html", true), TemplateContinuation("guestbook.html", true))(LogExecutionTimeContinuation, LogExecutionTimeContinuation)(IdContinuation, IdContinuation)
})
mux.HandleFunc("GET /{name}", func(w http.ResponseWriter, r *http.Request) {