add guestbook tests
This commit is contained in:
		
							parent
							
								
									8c7d9b3762
								
							
						
					
					
						commit
						b74a955dcb
					
				|  | @ -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)) | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										18
									
								
								api/serve.go
								
								
								
								
							
							
						
						
									
										18
									
								
								api/serve.go
								
								
								
								
							|  | @ -88,9 +88,8 @@ func MakeServer(argv *args.Arguments, dbConn *sql.DB) *http.Server { | ||||||
| 
 | 
 | ||||||
| 	makeRequestContext := func() *RequestContext { | 	makeRequestContext := func() *RequestContext { | ||||||
| 		return &RequestContext{ | 		return &RequestContext{ | ||||||
| 			DBConn: dbConn, | 			DBConn:       dbConn, | ||||||
| 			Args:   argv, | 			Args:         argv, | ||||||
| 
 |  | ||||||
| 			TemplateData: &map[string]interface{}{}, | 			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) | 		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() | 		requestContext := makeRequestContext() | ||||||
| 		LogRequestContinuation(requestContext, r, w)(HealthCheckContinuation, FailurePassingContinuation)(LogExecutionTimeContinuation, LogExecutionTimeContinuation)(IdContinuation, IdContinuation) | 		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) { | 	mux.HandleFunc("GET /auth", func(w http.ResponseWriter, r *http.Request) { | ||||||
| 		requestContext := makeRequestContext() | 		requestContext := makeRequestContext() | ||||||
| 		LogRequestContinuation(requestContext, r, w)(InterceptCodeContinuation, FailurePassingContinuation)(LogExecutionTimeContinuation, LogExecutionTimeContinuation)(IdContinuation, IdContinuation) | 		LogRequestContinuation(requestContext, r, w)(InterceptOauthCodeContinuation, 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) |  | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	mux.HandleFunc("GET /logout", func(w http.ResponseWriter, r *http.Request) { | 	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) { | 	mux.HandleFunc("GET /guestbook", func(w http.ResponseWriter, r *http.Request) { | ||||||
| 		requestContext := makeRequestContext() | 		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) { | 	mux.HandleFunc("POST /guestbook", func(w http.ResponseWriter, r *http.Request) { | ||||||
| 		requestContext := makeRequestContext() | 		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) { | 	mux.HandleFunc("GET /{name}", func(w http.ResponseWriter, r *http.Request) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue