@@ -4,16 +4,22 @@ import { MemoryStorage, StorageKeys } from "../sessionManager";
44import { setActiveStorage } from "./token" ;
55import createFetchMock from "vitest-fetch-mock" ;
66import { frameworkSettings } from "./exchangeAuthCode" ;
7+ import * as refreshTokenTimer from "./refreshTimer" ;
8+ import * as main from "../main" ;
79
810const fetchMock = createFetchMock ( vi ) ;
911
1012describe ( "exchangeAuthCode" , ( ) => {
1113 beforeEach ( ( ) => {
1214 fetchMock . enableMocks ( ) ;
15+ vi . spyOn ( refreshTokenTimer , "setRefreshTimer" ) ;
16+ vi . spyOn ( main , "refreshToken" ) ;
17+ vi . useFakeTimers ( ) ;
1318 } ) ;
1419
1520 afterEach ( ( ) => {
1621 fetchMock . resetMocks ( ) ;
22+ vi . useRealTimers ( ) ;
1723 } ) ;
1824
1925 it ( "missing state param" , async ( ) => {
@@ -142,10 +148,14 @@ describe("exchangeAuthCode", () => {
142148 expect ( url ) . toBe ( "http://test.kinde.com/oauth2/token" ) ;
143149 expect ( options ) . toMatchObject ( {
144150 method : "POST" ,
145- headers : {
146- "Content-type" : "application/x-www-form-urlencoded; charset=UTF-8" ,
147- } ,
148151 } ) ;
152+ expect ( ( options ?. headers as Headers ) . get ( "Content-type" ) ) . toEqual (
153+ "application/x-www-form-urlencoded; charset=UTF-8" ,
154+ ) ;
155+ expect ( ( options ?. headers as Headers ) . get ( "Cache-Control" ) ) . toEqual (
156+ "no-store" ,
157+ ) ;
158+ expect ( ( options ?. headers as Headers ) . get ( "Pragma" ) ) . toEqual ( "no-cache" ) ;
149159 } ) ;
150160
151161 it ( "set the framework and version on header" , async ( ) => {
@@ -173,6 +183,7 @@ describe("exchangeAuthCode", () => {
173183 access_token : "access_token" ,
174184 refresh_token : "refresh_token" ,
175185 id_token : "id_token" ,
186+ expires_in : 3600 ,
176187 } ) ,
177188 ) ;
178189
@@ -188,11 +199,10 @@ describe("exchangeAuthCode", () => {
188199 expect ( url ) . toBe ( "http://test.kinde.com/oauth2/token" ) ;
189200 expect ( options ) . toMatchObject ( {
190201 method : "POST" ,
191- headers : {
192- "Content-type" : "application/x-www-form-urlencoded; charset=UTF-8" ,
193- "Kinde-SDK" : "Framework/Version" ,
194- } ,
195202 } ) ;
203+ expect ( ( options ?. headers as Headers ) . get ( "Kinde-SDK" ) ) . toEqual (
204+ "Framework/Version" ,
205+ ) ;
196206 } ) ;
197207
198208 it ( "should handle token exchange failure" , async ( ) => {
@@ -226,4 +236,50 @@ describe("exchangeAuthCode", () => {
226236 error : "Token exchange failed: 500 - error" ,
227237 } ) ;
228238 } ) ;
239+
240+ it ( "should set the refresh timer" , async ( ) => {
241+ const store = new MemoryStorage ( ) ;
242+ setActiveStorage ( store ) ;
243+
244+ const state = "state" ;
245+
246+ await store . setItems ( {
247+ [ StorageKeys . state ] : state ,
248+ } ) ;
249+
250+ frameworkSettings . framework = "Framework" ;
251+ frameworkSettings . frameworkVersion = "Version" ;
252+
253+ const input = "hello" ;
254+
255+ const urlParams = new URLSearchParams ( ) ;
256+ urlParams . append ( "code" , input ) ;
257+ urlParams . append ( "state" , state ) ;
258+ urlParams . append ( "client_id" , "test" ) ;
259+
260+ fetchMock . mockResponseOnce (
261+ JSON . stringify ( {
262+ access_token : "access_token" ,
263+ refresh_token : "refresh_token" ,
264+ id_token : "id_token" ,
265+ expires_in : 3600 ,
266+ } ) ,
267+ ) ;
268+
269+ await exchangeAuthCode ( {
270+ urlParams,
271+ domain : "http://test.kinde.com" ,
272+ clientId : "test" ,
273+ redirectURL : "http://test.kinde.com" ,
274+ autoRefresh : true ,
275+ } ) ;
276+
277+ expect ( refreshTokenTimer . setRefreshTimer ) . toHaveBeenCalledOnce ( ) ;
278+ expect ( refreshTokenTimer . setRefreshTimer ) . toHaveBeenCalledWith (
279+ 3600 ,
280+ expect . any ( Function ) ,
281+ ) ;
282+ vi . advanceTimersByTime ( 3600 * 1000 ) ;
283+ expect ( main . refreshToken ) . toHaveBeenCalledTimes ( 1 ) ;
284+ } ) ;
229285} ) ;
0 commit comments