@@ -4,6 +4,8 @@ import { setupServer } from "msw/node"
4
4
import { Client , FetchError , PUBLISHABLE_KEY_HEADER } from "../client"
5
5
6
6
const baseUrl = "https://someurl.com"
7
+ const token = "token-123"
8
+ const jwtTokenStorageKey = "medusa_auth_token"
7
9
8
10
// This is just a network-layer mocking, it doesn't start an actual server
9
11
const server = setupServer (
@@ -77,7 +79,7 @@ const server = setupServer(
77
79
return HttpResponse . json ( { test : "test" } )
78
80
} ) ,
79
81
http . get ( `${ baseUrl } /jwt` , ( { request } ) => {
80
- if ( request . headers . get ( "authorization" ) === " Bearer token-123" ) {
82
+ if ( request . headers . get ( "authorization" ) === ` Bearer ${ token } ` ) {
81
83
return HttpResponse . json ( {
82
84
test : "test" ,
83
85
} )
@@ -259,9 +261,8 @@ describe("Client", () => {
259
261
} )
260
262
} )
261
263
262
- describe ( "Authrized requests" , ( ) => {
264
+ describe ( "Authorized requests" , ( ) => {
263
265
it ( "should not store the token by default" , async ( ) => {
264
- const token = "token-123" // Eg. from a response after a successful authentication
265
266
client . setToken ( token )
266
267
267
268
const resp = await client . fetch < any > ( "nostore" )
@@ -274,13 +275,12 @@ describe("Client", () => {
274
275
localStorage : { setItem : jest . fn ( ) , getItem : ( ) => token } as any ,
275
276
} as any
276
277
277
- const token = "token-123" // Eg. from a response after a successful authentication
278
278
client . setToken ( token )
279
279
280
280
const resp = await client . fetch < any > ( "jwt" )
281
281
expect ( resp ) . toEqual ( { test : "test" } )
282
282
expect ( global . window . localStorage . setItem ) . toHaveBeenCalledWith (
283
- "medusa_auth_token" ,
283
+ jwtTokenStorageKey ,
284
284
token
285
285
)
286
286
@@ -289,5 +289,105 @@ describe("Client", () => {
289
289
} )
290
290
} )
291
291
292
-
292
+ describe ( "Custom Storage" , ( ) => {
293
+ const mockSyncStorage = {
294
+ storage : new Map < string , string > ( ) ,
295
+ getItem : jest . fn (
296
+ ( key : string ) => mockSyncStorage . storage . get ( key ) || null
297
+ ) ,
298
+ setItem : jest . fn ( ( key : string , value : string ) =>
299
+ mockSyncStorage . storage . set ( key , value )
300
+ ) ,
301
+ removeItem : jest . fn ( ( key : string ) => mockSyncStorage . storage . delete ( key ) ) ,
302
+ }
303
+
304
+ const mockAsyncStorage = {
305
+ storage : new Map < string , string > ( ) ,
306
+ getItem : jest . fn (
307
+ async ( key : string ) => mockAsyncStorage . storage . get ( key ) || null
308
+ ) ,
309
+ setItem : jest . fn ( async ( key : string , value : string ) =>
310
+ mockAsyncStorage . storage . set ( key , value )
311
+ ) ,
312
+ removeItem : jest . fn ( async ( key : string ) =>
313
+ mockAsyncStorage . storage . delete ( key )
314
+ ) ,
315
+ }
316
+
317
+ describe ( "Synchronous Custom Storage" , ( ) => {
318
+ let client : Client
319
+
320
+ beforeEach ( ( ) => {
321
+ mockSyncStorage . storage . clear ( )
322
+ client = new Client ( {
323
+ baseUrl,
324
+ auth : {
325
+ type : "jwt" ,
326
+ jwtTokenStorageMethod : "custom" ,
327
+ storage : mockSyncStorage ,
328
+ } ,
329
+ } )
330
+ } )
331
+
332
+ it ( "should store and retrieve token" , async ( ) => {
333
+ await client . setToken ( token )
334
+ expect ( mockSyncStorage . setItem ) . toHaveBeenCalledWith (
335
+ jwtTokenStorageKey ,
336
+ token
337
+ )
338
+ const resp = await client . fetch < any > ( "jwt" )
339
+ expect ( resp ) . toEqual ( { test : "test" } )
340
+ expect ( mockSyncStorage . getItem ) . toHaveBeenCalledWith ( jwtTokenStorageKey )
341
+ } )
342
+
343
+ it ( "should clear token" , async ( ) => {
344
+ await client . setToken ( token )
345
+ await client . clearToken ( )
346
+ const resp = await client . fetch < any > ( "nostore" )
347
+ expect ( resp ) . toEqual ( { test : "test" } )
348
+ } )
349
+ } )
350
+
351
+ describe ( "Asynchronous Custom Storage" , ( ) => {
352
+ let client : Client
353
+
354
+ beforeEach ( ( ) => {
355
+ mockAsyncStorage . storage . clear ( )
356
+ jest . clearAllMocks ( )
357
+ client = new Client ( {
358
+ baseUrl,
359
+ auth : {
360
+ type : "jwt" ,
361
+ jwtTokenStorageMethod : "custom" ,
362
+ storage : mockAsyncStorage ,
363
+ } ,
364
+ } )
365
+ } )
366
+
367
+ it ( "should store and retrieve token asynchronously" , async ( ) => {
368
+ await client . setToken ( token )
369
+
370
+ expect ( mockAsyncStorage . setItem ) . toHaveBeenCalledWith (
371
+ jwtTokenStorageKey ,
372
+ token
373
+ )
374
+
375
+ const resp = await client . fetch < any > ( "jwt" )
376
+ expect ( resp ) . toEqual ( { test : "test" } )
377
+ expect ( mockAsyncStorage . getItem ) . toHaveBeenCalled ( )
378
+ } )
379
+
380
+ it ( "should clear token asynchronously" , async ( ) => {
381
+ await client . setToken ( token )
382
+ await client . clearToken ( )
383
+
384
+ expect ( mockAsyncStorage . removeItem ) . toHaveBeenCalledWith (
385
+ jwtTokenStorageKey
386
+ )
387
+
388
+ const resp = await client . fetch < any > ( "nostore" )
389
+ expect ( resp ) . toEqual ( { test : "test" } )
390
+ } )
391
+ } )
392
+ } )
293
393
} )
0 commit comments