1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
package test
import (
"context"
"encoding/json"
"fmt"
"log"
"net/http"
"net/http/httptest"
"os"
"strings"
"testing"
"git.huntm.net/wedding/server/guest"
"github.com/jackc/pgx/v5/pgxpool"
)
var (
user = os.Getenv("USER")
pass = 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))
if err != nil {
test.Error(err)
}
defer db.Close()
store := guest.NewMemStore(db)
guestHandler := guest.NewGuestHandler(store)
login := logIn(guestHandler, test)
token := login.Token
addPartyGuest(guestHandler, token, test)
guestSlice := getGuests(guestHandler, token, test)
guest := guestSlice[0]
assertEquals(test, guest.Attendance, "accept")
assertEquals(test, guest.Email, "mhunteman@yahoo.com")
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")
assertEquals(test, guest.Email, "")
assertEquals(test, guest.Message, "")
assertEquals(test, guest.PartySize, 1)
}
func logIn(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()))
if err != nil {
test.Error(err)
}
guestHandler.ServeHTTP(response, loginRequest)
assertEquals(test, response.Result().StatusCode, 200)
var login guest.LoginResponse
if err = json.NewDecoder(response.Body).Decode(&login); err != nil {
log.Fatal(err)
}
return login
}
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))
if err != nil {
test.Error(err)
}
putRequest.Header.Set("Authorization", token)
guestHandler.ServeHTTP(response, putRequest)
assertEquals(test, response.Result().StatusCode, 200)
}
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 {
test.Error(err)
}
return guestSlice
}
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()))
if err != nil {
test.Error(err)
}
putRequest.Header.Set("Authorization", token)
guestHandler.ServeHTTP(response, putRequest)
assertEquals(test, response.Result().StatusCode, 200)
}
func assertEquals(test testing.TB, actual any, expected any) {
test.Helper()
if actual != expected {
test.Errorf("Actual: %s, expected: %s", actual, expected)
}
}
func getCredentials() string {
return "{ \"firstName\": \"Michael\", \"lastName\": \"Hunteman\"}"
}
func getGuestWithParty() string {
return `{"id":1,"firstName":"Michael","lastName":"Hunteman", "attendance":"accept",
"email":"mhunteman@yahoo.com","message":"We'll be there!","partySize":2,
"partyList":[{"firstName":"Madison","lastName":"Rossitto"}]}`
}
func getGuestWithoutParty() string {
return `{"id":1,"firstName":"Michael","lastName":"Hunteman","attendance":"decline",
"email":"","message":"","partySize":1,"partyList":[]}`
}
|