From 096a08708e2310becba56a237ef63b5cf6e3c4c4 Mon Sep 17 00:00:00 2001 From: Michael Hunteman Date: Sun, 25 Aug 2024 12:44:32 -0700 Subject: Add admin dashboard --- server/test/guest_test.go | 89 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 63 insertions(+), 26 deletions(-) (limited to 'server/test') diff --git a/server/test/guest_test.go b/server/test/guest_test.go index c675ddb..206837a 100644 --- a/server/test/guest_test.go +++ b/server/test/guest_test.go @@ -11,53 +11,59 @@ import ( "strings" "testing" + "git.huntm.net/wedding/server/admin" "git.huntm.net/wedding/server/guest" "github.com/jackc/pgx/v5/pgxpool" ) var ( user = os.Getenv("USER") - pass = os.Getenv("PASS") + password = os.Getenv("PASS") host = "localhost" port = "5432" database = "postgres" ) func TestUpdateRSVP(test *testing.T) { - db, err := pgxpool.New(context.Background(), fmt.Sprintf("postgres://%s:%s@%s:%s/%s", user, pass, host, port, database)) + databasePool, err := pgxpool.New(context.Background(), + fmt.Sprintf("postgres://%s:%s@%s:%s/%s", user, password, host, port, database)) if err != nil { test.Error(err) } - defer db.Close() - store := guest.NewMemStore(db) - guestHandler := guest.NewGuestHandler(store) + defer databasePool.Close() + guestStore := guest.NewStore(databasePool) + guestHandler := guest.NewGuestHandler(guestStore) + adminStore := admin.NewStore(databasePool) + adminHandler := admin.NewAdminHandler(adminStore, guestStore) - login := logIn(guestHandler, test) - token := login.Token + guestLogin := logInGuest(guestHandler, test) + guestToken := guestLogin.Token + addPartyGuest(guestHandler, guestToken, test) - addPartyGuest(guestHandler, token, test) - guestSlice := getGuests(guestHandler, token, test) - guest := guestSlice[0] + adminLogin := logInAdmin(adminHandler, test) + adminToken := adminLogin.Token + guests := getGuests(guestHandler, adminToken, test) + guest := findGuest(guests) assertEquals(test, guest.Attendance, "accept") - assertEquals(test, guest.Email, "mhunteman@yahoo.com") + assertEquals(test, guest.Email, "mhunteman@cox.net") assertEquals(test, guest.Message, "We'll be there!") assertEquals(test, guest.PartySize, 2) assertEquals(test, guest.PartyList[0].FirstName, "Madison") assertEquals(test, guest.PartyList[0].LastName, "Rossitto") - deletePartyGuest(guestHandler, token, test) - guestSlice = getGuests(guestHandler, token, test) - guest = guestSlice[0] - assertEquals(test, guest.Attendance, "decline") + deletePartyGuest(guestHandler, guestToken, test) + guests = getGuests(guestHandler, adminToken, test) + guest = findGuest(guests) + assertEquals(test, guest.Attendance, "") assertEquals(test, guest.Email, "") assertEquals(test, guest.Message, "") assertEquals(test, guest.PartySize, 1) } -func logIn(guestHandler *guest.GuestHandler, test *testing.T) guest.LoginResponse { +func logInGuest(guestHandler *guest.GuestHandler, test *testing.T) guest.LoginResponse { response := httptest.NewRecorder() - loginRequest, err := http.NewRequest(http.MethodPost, "http://localhost:8080/guest/login", - strings.NewReader(getCredentials())) + loginRequest, err := http.NewRequest(http.MethodPost, + "http://localhost:8080/guest/login", strings.NewReader(getName())) if err != nil { test.Error(err) } @@ -73,7 +79,8 @@ func logIn(guestHandler *guest.GuestHandler, test *testing.T) guest.LoginRespons func addPartyGuest(guestHandler *guest.GuestHandler, token string, test *testing.T) { response := httptest.NewRecorder() guestWithParty := getGuestWithParty() - putRequest, err := http.NewRequest(http.MethodPut, "http://localhost:8080/guest/1", strings.NewReader(guestWithParty)) + putRequest, err := http.NewRequest(http.MethodPut, "http://localhost:8080/guest/1", + strings.NewReader(guestWithParty)) if err != nil { test.Error(err) } @@ -82,22 +89,39 @@ func addPartyGuest(guestHandler *guest.GuestHandler, token string, test *testing assertEquals(test, response.Result().StatusCode, 200) } +func logInAdmin(adminHandler *admin.AdminHandler, test *testing.T) admin.LoginResponse { + response := httptest.NewRecorder() + loginRequest, err := http.NewRequest(http.MethodPost, + "http://localhost:8080/admin/login", strings.NewReader(getCredentials())) + if err != nil { + test.Error(err) + } + adminHandler.ServeHTTP(response, loginRequest) + assertEquals(test, response.Result().StatusCode, 200) + var login admin.LoginResponse + if err = json.NewDecoder(response.Body).Decode(&login); err != nil { + log.Fatal(err) + } + return login +} + func getGuests(guestHandler *guest.GuestHandler, token string, test *testing.T) []guest.Guest { response := httptest.NewRecorder() getRequest, _ := http.NewRequest(http.MethodGet, "http://localhost:8080/guest/", nil) getRequest.Header.Set("Authorization", token) guestHandler.ServeHTTP(response, getRequest) assertEquals(test, response.Result().StatusCode, 200) - var guestSlice []guest.Guest - if err := json.NewDecoder(response.Body).Decode(&guestSlice); err != nil { + var guests []guest.Guest + if err := json.NewDecoder(response.Body).Decode(&guests); err != nil { test.Error(err) } - return guestSlice + return guests } func deletePartyGuest(guestHandler *guest.GuestHandler, token string, test *testing.T) { response := httptest.NewRecorder() - putRequest, err := http.NewRequest(http.MethodPut, "http://localhost:8080/guest/1", strings.NewReader(getGuestWithoutParty())) + putRequest, err := http.NewRequest(http.MethodPut, "http://localhost:8080/guest/1", + strings.NewReader(getGuestWithoutParty())) if err != nil { test.Error(err) } @@ -106,6 +130,15 @@ func deletePartyGuest(guestHandler *guest.GuestHandler, token string, test *test assertEquals(test, response.Result().StatusCode, 200) } +func findGuest(guests []guest.Guest) *guest.Guest { + for _, guest := range guests { + if guest.ID == 1 { + return &guest + } + } + return nil +} + func assertEquals(test testing.TB, actual any, expected any) { test.Helper() if actual != expected { @@ -113,17 +146,21 @@ func assertEquals(test testing.TB, actual any, expected any) { } } -func getCredentials() string { +func getName() string { return "{ \"firstName\": \"Michael\", \"lastName\": \"Hunteman\"}" } +func getCredentials() string { + return "{ \"username\": \"mhunteman\", \"password\": \"password\"}" +} + func getGuestWithParty() string { return `{"id":1,"firstName":"Michael","lastName":"Hunteman", "attendance":"accept", - "email":"mhunteman@yahoo.com","message":"We'll be there!","partySize":2, + "email":"mhunteman@cox.net","message":"We'll be there!","partySize":2, "partyList":[{"firstName":"Madison","lastName":"Rossitto"}]}` } func getGuestWithoutParty() string { - return `{"id":1,"firstName":"Michael","lastName":"Hunteman","attendance":"decline", + return `{"id":1,"firstName":"Michael","lastName":"Hunteman","attendance":"", "email":"","message":"","partySize":1,"partyList":[]}` } -- cgit v1.2.3