github.com/clerkinc/clerk-sdk-go@v1.49.1/clerk/verification_test.go (about) 1 package clerk 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "net/http" 7 "net/url" 8 "reflect" 9 "testing" 10 ) 11 12 func TestVerificationService_Verify_useSessionId(t *testing.T) { 13 apiToken := "apiToken" 14 sessionId := "someSessionId" 15 sessionToken := "someSessionToken" 16 request := setupRequest(&sessionId, &sessionToken) 17 18 client, mux, _, teardown := setup(apiToken) 19 defer teardown() 20 21 expectedResponse := dummySessionJson 22 23 mux.HandleFunc("/sessions/"+sessionId+"/verify", func(w http.ResponseWriter, req *http.Request) { 24 testHttpMethod(t, req, "POST") 25 testHeader(t, req, "Authorization", "Bearer "+apiToken) 26 fmt.Fprint(w, expectedResponse) 27 }) 28 29 got, err := client.Verification().Verify(request) 30 if err != nil { 31 t.Errorf("Was not expecting error to be returned, got %v instead", err) 32 } 33 34 var want Session 35 _ = json.Unmarshal([]byte(expectedResponse), &want) 36 37 if !reflect.DeepEqual(*got, want) { 38 t.Errorf("Response = %v, want %v", *got, want) 39 } 40 } 41 42 func TestVerificationService_Verify_handleServerErrorWhenUsingSessionId(t *testing.T) { 43 sessionId := "someSessionId" 44 sessionToken := "someSessionToken" 45 request := setupRequest(&sessionId, &sessionToken) 46 47 client, mux, _, teardown := setup("apiToken") 48 defer teardown() 49 50 mux.HandleFunc("/sessions/"+sessionId+"/verify", func(w http.ResponseWriter, req *http.Request) { 51 testHttpMethod(t, req, "POST") 52 w.WriteHeader(400) 53 }) 54 55 _, err := client.Verification().Verify(request) 56 if err == nil { 57 t.Errorf("Was expecting error to be returned") 58 } 59 } 60 61 func TestVerificationService_Verify_useClientActiveSession(t *testing.T) { 62 apiToken := "apiToken" 63 sessionToken := "someSessionToken" 64 request := setupRequest(nil, &sessionToken) 65 66 client, mux, _, teardown := setup(apiToken) 67 defer teardown() 68 69 clientResponseJson := dummyClientResponseJson 70 var clientResponse ClientResponse 71 _ = json.Unmarshal([]byte(clientResponseJson), &clientResponse) 72 73 sessionJson := dummySessionJson 74 75 mux.HandleFunc("/clients/verify", func(w http.ResponseWriter, req *http.Request) { 76 testHttpMethod(t, req, "POST") 77 testHeader(t, req, "Authorization", "Bearer "+apiToken) 78 fmt.Fprint(w, clientResponseJson) 79 }) 80 81 got, err := client.Verification().Verify(request) 82 if err != nil { 83 t.Errorf("Was not expecting error to be returned, got %v instead", err) 84 } 85 86 var want Session 87 _ = json.Unmarshal([]byte(sessionJson), &want) 88 89 if !reflect.DeepEqual(*got, want) { 90 t.Errorf("Response = %v, want %v", *got, want) 91 } 92 } 93 94 func TestVerificationService_Verify_handleServerErrorWhenUsingClientActiveSession(t *testing.T) { 95 sessionToken := "someSessionToken" 96 request := setupRequest(nil, &sessionToken) 97 98 client, mux, _, teardown := setup("apiToken") 99 defer teardown() 100 101 mux.HandleFunc("/clients/verify", func(w http.ResponseWriter, req *http.Request) { 102 testHttpMethod(t, req, "POST") 103 w.WriteHeader(400) 104 }) 105 106 _, err := client.Verification().Verify(request) 107 if err == nil { 108 t.Errorf("Was expecting error to be returned") 109 } 110 } 111 112 func TestVerificationService_Verify_noActiveSessionWhenUsingClientActiveSession(t *testing.T) { 113 apiToken := "apiToken" 114 sessionToken := "someSessionToken" 115 request := setupRequest(nil, &sessionToken) 116 117 client, mux, _, teardown := setup(apiToken) 118 defer teardown() 119 120 var clientResponse ClientResponse 121 _ = json.Unmarshal([]byte(dummyClientResponseJson), &clientResponse) 122 clientResponse.LastActiveSessionID = nil 123 124 mux.HandleFunc("/clients/verify", func(w http.ResponseWriter, req *http.Request) { 125 testHttpMethod(t, req, "POST") 126 jsonResp, _ := json.Marshal(clientResponse) 127 fmt.Fprint(w, string(jsonResp)) 128 }) 129 130 _, err := client.Verification().Verify(request) 131 if err == nil { 132 t.Errorf("Was expecting error to be returned") 133 } 134 } 135 136 func TestVerificationService_Verify_activeSessionNotIncludedInSessions(t *testing.T) { 137 apiToken := "apiToken" 138 sessionToken := "someSessionToken" 139 request := setupRequest(nil, &sessionToken) 140 141 client, mux, _, teardown := setup(apiToken) 142 defer teardown() 143 144 var clientResponse ClientResponse 145 _ = json.Unmarshal([]byte(dummyClientResponseJson), &clientResponse) 146 clientResponse.Sessions = make([]*Session, 0) 147 148 mux.HandleFunc("/clients/verify", func(w http.ResponseWriter, req *http.Request) { 149 testHttpMethod(t, req, "POST") 150 jsonResp, _ := json.Marshal(clientResponse) 151 fmt.Fprint(w, string(jsonResp)) 152 }) 153 154 _, err := client.Verification().Verify(request) 155 if err == nil { 156 t.Errorf("Was expecting error to be returned") 157 } 158 } 159 160 func TestVerificationService_Verify_notFailForEmptyRequest(t *testing.T) { 161 client, _, _, teardown := setup("apiToken") 162 defer teardown() 163 164 session, err := client.Verification().Verify(nil) 165 if err == nil { 166 t.Errorf("Expected error to be returned") 167 } 168 169 if session != nil { 170 t.Errorf("Expected no session to returned, got %v instead", session) 171 } 172 } 173 174 func TestVerificationService_Verify_noSessionCookie(t *testing.T) { 175 client, _, _, teardown := setup("apiToken") 176 defer teardown() 177 178 request := setupRequest(nil, nil) 179 180 session, err := client.Verification().Verify(request) 181 if err == nil { 182 t.Errorf("Expected error to be returned") 183 } 184 185 if session != nil { 186 t.Errorf("Expected no session to returned, got %v instead", session) 187 } 188 } 189 190 func setupRequest(sessionId, sessionToken *string) *http.Request { 191 var request http.Request 192 request.Method = "GET" 193 194 url := url.URL{ 195 Scheme: "http", 196 Host: "host.com", 197 Path: "/path", 198 } 199 request.URL = &url 200 201 if sessionToken != nil { 202 // add session token as cookie 203 sessionCookie := http.Cookie{ 204 Name: CookieSession, 205 Value: *sessionToken, 206 } 207 request.Header = make(map[string][]string) 208 request.AddCookie(&sessionCookie) 209 } 210 211 if sessionId != nil { 212 // add session id as query parameter 213 addQueryParam(&request, QueryParamSessionId, *sessionId) 214 } 215 216 return &request 217 } 218 219 func addQueryParam(req *http.Request, key, value string) { 220 url := req.URL 221 query := url.Query() 222 query.Add(key, value) 223 url.RawQuery = query.Encode() 224 }