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 { | ||||
| 		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) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue