1
1
import { describe , expect , it , vi , beforeEach , afterEach } from "vitest" ;
2
2
import { exchangeAuthCode } from "." ;
3
3
import { MemoryStorage , StorageKeys } from "../sessionManager" ;
4
- import { setActiveStorage } from "./token" ;
4
+ import { setActiveStorage , clearActiveStorage , clearInsecureStorage } from "./token" ;
5
5
import createFetchMock from "vitest-fetch-mock" ;
6
6
import { frameworkSettings } from "./exchangeAuthCode" ;
7
7
import * as refreshTokenTimer from "./refreshTimer" ;
@@ -120,6 +120,7 @@ describe("exchangeAuthCode", () => {
120
120
121
121
await store . setItems ( {
122
122
[ StorageKeys . state ] : state ,
123
+ [ StorageKeys . codeVerifier ] : "verifier" ,
123
124
} ) ;
124
125
125
126
const input = "hello" ;
@@ -176,6 +177,7 @@ describe("exchangeAuthCode", () => {
176
177
177
178
await store . setItems ( {
178
179
[ StorageKeys . state ] : state ,
180
+ [ StorageKeys . codeVerifier ] : "verifier" ,
179
181
} ) ;
180
182
181
183
const input = "hello" ;
@@ -227,6 +229,7 @@ describe("exchangeAuthCode", () => {
227
229
228
230
await store . setItems ( {
229
231
[ StorageKeys . state ] : state ,
232
+ [ StorageKeys . codeVerifier ] : "verifier" ,
230
233
} ) ;
231
234
232
235
frameworkSettings . framework = "Framework" ;
@@ -274,6 +277,7 @@ describe("exchangeAuthCode", () => {
274
277
275
278
await store . setItems ( {
276
279
[ StorageKeys . state ] : state ,
280
+ [ StorageKeys . codeVerifier ] : "verifier" ,
277
281
} ) ;
278
282
279
283
const input = "hello" ;
@@ -306,6 +310,7 @@ describe("exchangeAuthCode", () => {
306
310
307
311
await store . setItems ( {
308
312
[ StorageKeys . state ] : state ,
313
+ [ StorageKeys . codeVerifier ] : "verifier" ,
309
314
} ) ;
310
315
311
316
frameworkSettings . framework = "Framework" ;
@@ -360,6 +365,8 @@ describe("exchangeAuthCode", () => {
360
365
} ) ;
361
366
362
367
it ( "should return error if storage is not available" , async ( ) => {
368
+ clearActiveStorage ( ) ;
369
+ clearInsecureStorage ( ) ;
363
370
const urlParams = new URLSearchParams ( ) ;
364
371
urlParams . append ( "state" , "test" ) ;
365
372
urlParams . append ( "code" , "test" ) ;
@@ -373,11 +380,12 @@ describe("exchangeAuthCode", () => {
373
380
374
381
expect ( result ) . toEqual ( {
375
382
success : false ,
376
- error : "Invalid state; supplied test, expected null " ,
383
+ error : "Authentication storage is not initialized " ,
377
384
} ) ;
378
385
} ) ;
379
386
380
387
it ( "should return error if state is invalid" , async ( ) => {
388
+ setActiveStorage ( new MemoryStorage ( ) ) ;
381
389
const urlParams = new URLSearchParams ( ) ;
382
390
urlParams . append ( "state" , "test" ) ;
383
391
urlParams . append ( "code" , "test" ) ;
@@ -397,13 +405,13 @@ describe("exchangeAuthCode", () => {
397
405
} ) ;
398
406
399
407
it ( "should return error if code verifier is missing" , async ( ) => {
408
+ const state = new MemoryStorage ( ) ;
409
+ await state . setSessionItem ( StorageKeys . state , "test" ) ;
410
+ setActiveStorage ( state ) ;
400
411
const urlParams = new URLSearchParams ( ) ;
401
412
urlParams . append ( "state" , "test" ) ;
402
413
urlParams . append ( "code" , "test" ) ;
403
- mockStorage . getItem . mockImplementation ( ( key ) => {
404
- if ( key === StorageKeys . state ) return "test" ;
405
- return null ;
406
- } ) ;
414
+
407
415
408
416
const result = await exchangeAuthCode ( {
409
417
urlParams,
@@ -414,11 +422,15 @@ describe("exchangeAuthCode", () => {
414
422
415
423
expect ( result ) . toEqual ( {
416
424
success : false ,
417
- error : "Invalid state; supplied test, expected null " ,
425
+ error : "Code verifier not found " ,
418
426
} ) ;
419
427
} ) ;
420
428
421
429
it ( "should return error if fetch fails" , async ( ) => {
430
+ const store = new MemoryStorage ( ) ;
431
+ setActiveStorage ( store ) ;
432
+ await store . setSessionItem ( StorageKeys . state , "test" ) ;
433
+ await store . setSessionItem ( StorageKeys . codeVerifier , "verifier" ) ;
422
434
const urlParams = new URLSearchParams ( ) ;
423
435
urlParams . append ( "state" , "test" ) ;
424
436
urlParams . append ( "code" , "test" ) ;
@@ -429,20 +441,24 @@ describe("exchangeAuthCode", () => {
429
441
} ) ;
430
442
fetchMock . mockRejectOnce ( new Error ( "Fetch failed" ) ) ;
431
443
432
- const result = await exchangeAuthCode ( {
433
- urlParams ,
434
- domain : "test.com" ,
435
- clientId : "test" ,
436
- redirectURL : "test.com " ,
437
- } ) ;
438
-
439
- expect ( result ) . toEqual ( {
440
- success : false ,
441
- error : "Invalid state; supplied test, expected null" ,
442
- } ) ;
444
+ try {
445
+ await exchangeAuthCode ( {
446
+ urlParams ,
447
+ domain : "test.com " ,
448
+ clientId : "test" ,
449
+ redirectURL : "test.com" ,
450
+ } ) ;
451
+ } catch ( error ) {
452
+
453
+ expect ( ( error as Error ) . message ) . toBe ( "Fetch failed" ) ;
454
+ }
443
455
} ) ;
444
456
445
457
it ( "should return error if token response is invalid" , async ( ) => {
458
+ const store = new MemoryStorage ( ) ;
459
+ setActiveStorage ( store ) ;
460
+ await store . setSessionItem ( StorageKeys . state , "test" ) ;
461
+ await store . setSessionItem ( StorageKeys . codeVerifier , "verifier" ) ;
446
462
const urlParams = new URLSearchParams ( ) ;
447
463
urlParams . append ( "state" , "test" ) ;
448
464
urlParams . append ( "code" , "test" ) ;
@@ -465,7 +481,7 @@ describe("exchangeAuthCode", () => {
465
481
466
482
expect ( result ) . toEqual ( {
467
483
success : false ,
468
- error : "Invalid state; supplied test, expected null " ,
484
+ error : "No access token recieved " ,
469
485
} ) ;
470
486
} ) ;
471
487
@@ -475,6 +491,7 @@ describe("exchangeAuthCode", () => {
475
491
setActiveStorage ( store ) ;
476
492
await store . setItems ( {
477
493
[ StorageKeys . state ] : "test" ,
494
+ [ StorageKeys . codeVerifier ] : "verifier" ,
478
495
} ) ;
479
496
vi . spyOn ( store , "setSessionItem" ) ;
480
497
const urlParams = new URLSearchParams ( ) ;
0 commit comments