github.com/clerkinc/clerk-sdk-go@v1.49.1/clerk/sessions_test.go (about) 1 package clerk 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 "net/http" 9 "net/url" 10 "reflect" 11 "testing" 12 ) 13 14 func TestSessionsService_ListAll_happyPath_noParams(t *testing.T) { 15 client, mux, _, teardown := setup("token") 16 defer teardown() 17 18 expectedResponse := "[" + dummySessionJson + "]" 19 20 mux.HandleFunc("/sessions", func(w http.ResponseWriter, req *http.Request) { 21 testHttpMethod(t, req, "GET") 22 testHeader(t, req, "Authorization", "Bearer token") 23 fmt.Fprint(w, expectedResponse) 24 }) 25 26 var want []Session 27 _ = json.Unmarshal([]byte(expectedResponse), &want) 28 29 got, _ := client.Sessions().ListAll() 30 if len(got) != len(want) { 31 t.Errorf("Was expecting %d sessions to be returned, instead got %d", len(want), len(got)) 32 } 33 34 if !reflect.DeepEqual(got, want) { 35 t.Errorf("Response = %v, want %v", got, want) 36 } 37 } 38 39 func TestSessionsService_ListAll_pagination_and_filtering_params(t *testing.T) { 40 client, mux, _, teardown := setup("token") 41 defer teardown() 42 43 expectedResponse := "[" + dummySessionJson + "]" 44 45 mux.HandleFunc("/sessions", func(w http.ResponseWriter, req *http.Request) { 46 testHttpMethod(t, req, "GET") 47 testHeader(t, req, "Authorization", "Bearer token") 48 49 queryParams := url.Values{ 50 "limit": {}, 51 "offset": {}, 52 "client_id": {}, 53 "user_id": {}, 54 "status": {}, 55 } 56 57 testQuery(t, req, queryParams) 58 fmt.Fprint(w, expectedResponse) 59 }) 60 61 var want []Session 62 _ = json.Unmarshal([]byte(expectedResponse), &want) 63 64 limit := 2 65 offset := 2 66 status := SessionStatusEnded 67 userId := "user_1mebQggrD3xO5JfuHk7clQ94ysA" 68 clientId := "client_1mebPYz8NFNA17fi7NemNXIwp1p" 69 70 got, _ := client.Sessions().ListAllWithFiltering(ListAllSessionsParams{ 71 Limit: &limit, 72 Offset: &offset, 73 Status: &status, 74 UserID: &userId, 75 ClientID: &clientId, 76 }) 77 78 if len(got) != len(want) { 79 t.Errorf("Was expecting %d sessions to be returned, instead got %d", len(want), len(got)) 80 } 81 82 if !reflect.DeepEqual(got, want) { 83 t.Errorf("Response = %v, want %v", got, want) 84 } 85 } 86 87 func TestSessionsService_ListAll_pagination_and_filtering_empty_params(t *testing.T) { 88 client, mux, _, teardown := setup("token") 89 defer teardown() 90 91 expectedResponse := "[" + dummySessionJson + "]" 92 93 mux.HandleFunc("/sessions", func(w http.ResponseWriter, req *http.Request) { 94 testHttpMethod(t, req, "GET") 95 testHeader(t, req, "Authorization", "Bearer token") 96 97 queryParams := url.Values{} 98 99 testQuery(t, req, queryParams) 100 fmt.Fprint(w, expectedResponse) 101 }) 102 103 var want []Session 104 _ = json.Unmarshal([]byte(expectedResponse), &want) 105 106 limit := 2 107 offset := 2 108 status := SessionStatusEnded 109 userId := "user_1mebQggrD3xO5JfuHk7clQ94ysA" 110 clientId := "client_1mebPYz8NFNA17fi7NemNXIwp1p" 111 112 got, _ := client.Sessions().ListAllWithFiltering(ListAllSessionsParams{ 113 Limit: &limit, 114 Offset: &offset, 115 Status: &status, 116 UserID: &userId, 117 ClientID: &clientId, 118 }) 119 120 if len(got) != len(want) { 121 t.Errorf("Was expecting %d sessions to be returned, instead got %d", len(want), len(got)) 122 } 123 124 if !reflect.DeepEqual(got, want) { 125 t.Errorf("Response = %v, want %v", got, want) 126 } 127 } 128 129 func TestSessionsService_ListAll_invalidServer(t *testing.T) { 130 client, _ := NewClient("token") 131 132 sessions, err := client.Sessions().ListAll() 133 if err == nil { 134 t.Errorf("Expected error to be returned") 135 } 136 if sessions != nil { 137 t.Errorf("Was not expecting any sessions to be returned, instead got %v", sessions) 138 } 139 } 140 141 func TestSessionsService_Read_happyPath(t *testing.T) { 142 token := "token" 143 sessionId := "someSessionId" 144 expectedResponse := dummySessionJson 145 146 client, mux, _, teardown := setup(token) 147 defer teardown() 148 149 mux.HandleFunc("/sessions/"+sessionId, func(w http.ResponseWriter, req *http.Request) { 150 testHttpMethod(t, req, "GET") 151 testHeader(t, req, "Authorization", "Bearer "+token) 152 fmt.Fprint(w, expectedResponse) 153 }) 154 155 var want Session 156 _ = json.Unmarshal([]byte(expectedResponse), &want) 157 158 got, _ := client.Sessions().Read(sessionId) 159 if !reflect.DeepEqual(*got, want) { 160 t.Errorf("Response = %v, want %v", *got, want) 161 } 162 } 163 164 func TestSessionsService_Read_invalidServer(t *testing.T) { 165 client, _ := NewClient("token") 166 167 session, err := client.Sessions().Read("someSessionId") 168 if err == nil { 169 t.Errorf("Expected error to be returned") 170 } 171 if session != nil { 172 t.Errorf("Was not expecting any session to be returned, instead got %v", session) 173 } 174 } 175 176 func TestSessionsService_Revoke_happyPath(t *testing.T) { 177 token := "token" 178 sessionId := "someSessionId" 179 expectedResponse := dummySessionJson 180 181 client, mux, _, teardown := setup(token) 182 defer teardown() 183 184 mux.HandleFunc("/sessions/"+sessionId+"/revoke", func(w http.ResponseWriter, req *http.Request) { 185 testHttpMethod(t, req, "POST") 186 testHeader(t, req, "Authorization", "Bearer "+token) 187 fmt.Fprint(w, expectedResponse) 188 }) 189 190 var want Session 191 _ = json.Unmarshal([]byte(expectedResponse), &want) 192 193 got, _ := client.Sessions().Revoke(sessionId) 194 if !reflect.DeepEqual(*got, want) { 195 t.Errorf("Response = %v, want %v", *got, want) 196 } 197 } 198 199 func TestSessionsService_Revoke_invalidServer(t *testing.T) { 200 client, _ := NewClient("token") 201 202 session, err := client.Sessions().Revoke("someSessionId") 203 if err == nil { 204 t.Errorf("Expected error to be returned") 205 } 206 if session != nil { 207 t.Errorf("Was not expecting any session to be returned, instead got %v", session) 208 } 209 } 210 211 func TestSessionsService_Verify_happyPath(t *testing.T) { 212 token := "token" 213 sessionId := "someSessionId" 214 sessionToken := "someSessionToken" 215 expectedResponse := dummySessionJson 216 217 client, mux, _, teardown := setup(token) 218 defer teardown() 219 220 mux.HandleFunc("/sessions/"+sessionId+"/verify", func(w http.ResponseWriter, req *http.Request) { 221 testHttpMethod(t, req, "POST") 222 testHeader(t, req, "Authorization", "Bearer "+token) 223 fmt.Fprint(w, expectedResponse) 224 }) 225 226 var want Session 227 _ = json.Unmarshal([]byte(expectedResponse), &want) 228 229 got, _ := client.Sessions().Verify(sessionId, sessionToken) 230 if !reflect.DeepEqual(*got, want) { 231 t.Errorf("Response = %v, want %v", *got, want) 232 } 233 } 234 235 func TestSessionsService_Verify_invalidServer(t *testing.T) { 236 client, _ := NewClient("token") 237 238 session, err := client.Sessions().Verify("someSessionId", "someSessionToken") 239 if err == nil { 240 t.Errorf("Expected error to be returned") 241 } 242 if session != nil { 243 t.Errorf("Was not expecting any session to be returned, instead got %v", session) 244 } 245 } 246 247 func TestSessionsService_CreateTokenFromTemplate_Success(t *testing.T) { 248 const dummySessionTokenJSONTemplate = `{"object": "token", "jwt": "%s"}` 249 250 token := "token" 251 sessionID := "sess_2bp7pawkvFUR3m3QPBm6Cwx5ghZ" 252 templateSlug := "someTemplateSlug" 253 sessionToken := "someSessionToken" 254 expectedResponse := fmt.Sprintf(dummySessionTokenJSONTemplate, sessionToken) 255 256 clerkClient, mux, _, teardown := setup(token) 257 defer teardown() 258 259 mux.HandleFunc(fmt.Sprintf("/%s/%s/token/%s", SessionsUrl, sessionID, templateSlug), func(w http.ResponseWriter, req *http.Request) { 260 testHttpMethod(t, req, "POST") 261 testHeader(t, req, "Authorization", fmt.Sprintf("Bearer %s", token)) 262 w.WriteHeader(http.StatusOK) 263 _, _ = w.Write([]byte(expectedResponse)) 264 }) 265 266 var expectedSessionToken SessionToken 267 err := json.Unmarshal([]byte(expectedResponse), &expectedSessionToken) 268 assert.NoError(t, err) 269 270 received, err := clerkClient.Sessions().CreateTokenFromTemplate(sessionID, templateSlug) 271 require.NoError(t, err) 272 require.EqualValues(t, expectedSessionToken, *received) 273 } 274 275 const dummySessionJson = `{ 276 "abandon_at": 1612448988, 277 "client_id": "client_1mebPYz8NFNA17fi7NemNXIwp1p", 278 "expire_at": 1610461788, 279 "id": "sess_1mebQdHlQI14cjxln4e2eXNzwzi", 280 "last_active_at": 1609857251, 281 "object": "session", 282 "status": "ended", 283 "user_id": "user_1mebQggrD3xO5JfuHk7clQ94ysA" 284 }`