@@ -4,8 +4,10 @@ import AuthManager from './authManager';
44import { PassportError , PassportErrorType } from './errors/passportError' ;
55import { PassportConfiguration } from './config' ;
66import { mockUser , mockUserImx , mockUserZkEvm } from './test/mocks' ;
7+ import { isTokenExpired } from './token' ;
78
89jest . mock ( 'oidc-client-ts' ) ;
10+ jest . mock ( './token' ) ;
911
1012const baseConfig = new ImmutableConfiguration ( {
1113 environment : Environment . SANDBOX ,
@@ -18,10 +20,9 @@ const config = new PassportConfiguration({
1820 scope : 'email profile' ,
1921} ) ;
2022
21- const mockOidcUser : OidcUser = {
23+ const commonOidcUser : OidcUser = {
2224 id_token : mockUser . idToken ,
2325 access_token : mockUser . accessToken ,
24- refresh_token : mockUser . refreshToken ,
2526 token_type : 'Bearer' ,
2627 scope : 'openid' ,
2728 expires_in : 167222 ,
@@ -30,9 +31,25 @@ const mockOidcUser: OidcUser = {
3031 email : mockUser . profile . email ,
3132 nickname : mockUser . profile . nickname ,
3233 } ,
34+ } as OidcUser ;
35+
36+ const mockOidcUser : OidcUser = {
37+ ...commonOidcUser ,
38+ refresh_token : mockUser . refreshToken ,
3339 expired : false ,
3440} as OidcUser ;
3541
42+ const mockOidcExpiredUser : OidcUser = {
43+ ...commonOidcUser ,
44+ refresh_token : mockUser . refreshToken ,
45+ expired : true ,
46+ } as OidcUser ;
47+
48+ const mockOidcExpiredNoRefreshTokenUser : OidcUser = {
49+ ...commonOidcUser ,
50+ expired : true ,
51+ } as OidcUser ;
52+
3653const imxProfileData = {
3754 imx_eth_address : mockUserImx . imx . ethAddress ,
3855 imx_stark_address : mockUserImx . imx . starkAddress ,
@@ -251,7 +268,8 @@ describe('AuthManager', () => {
251268 } ) ;
252269
253270 it ( 'should return null if user is returned' , async ( ) => {
254- getUserMock . mockReturnValue ( mockOidcUser ) ;
271+ getUserMock . mockReturnValue ( mockOidcExpiredUser ) ;
272+ ( isTokenExpired as jest . Mock ) . mockReturnValue ( true ) ;
255273 signinSilentMock . mockResolvedValue ( null ) ;
256274
257275 const result = await authManager . loginSilent ( ) ;
@@ -318,12 +336,44 @@ describe('AuthManager', () => {
318336 describe ( 'getUser' , ( ) => {
319337 it ( 'should retrieve the user from the userManager and return the domain model' , async ( ) => {
320338 getUserMock . mockReturnValue ( mockOidcUser ) ;
339+ ( isTokenExpired as jest . Mock ) . mockReturnValue ( false ) ;
321340
322341 const result = await authManager . getUser ( ) ;
323342
324343 expect ( result ) . toEqual ( mockUser ) ;
325344 } ) ;
326345
346+ it ( 'should call signinSilent and returns user when user token is expired with the refresh token' , async ( ) => {
347+ getUserMock . mockReturnValue ( mockOidcExpiredUser ) ;
348+ ( isTokenExpired as jest . Mock ) . mockReturnValue ( true ) ;
349+ signinSilentMock . mockResolvedValue ( mockOidcUser ) ;
350+
351+ const result = await authManager . getUser ( ) ;
352+
353+ expect ( signinSilentMock ) . toBeCalledTimes ( 1 ) ;
354+ expect ( result ) . toEqual ( mockUser ) ;
355+ } ) ;
356+
357+ it ( 'should return null when the user token is expired without refresh token' , async ( ) => {
358+ getUserMock . mockReturnValue ( mockOidcExpiredNoRefreshTokenUser ) ;
359+ ( isTokenExpired as jest . Mock ) . mockReturnValue ( true ) ;
360+
361+ const result = await authManager . getUser ( ) ;
362+
363+ expect ( signinSilentMock ) . toBeCalledTimes ( 0 ) ;
364+ expect ( result ) . toEqual ( null ) ;
365+ } ) ;
366+
367+ it ( 'should return null when the user token is expired with the refresh token, but signinSilent returns null' , async ( ) => {
368+ getUserMock . mockReturnValue ( mockOidcExpiredUser ) ;
369+ ( isTokenExpired as jest . Mock ) . mockReturnValue ( true ) ;
370+ signinSilentMock . mockResolvedValue ( null ) ;
371+ const result = await authManager . getUser ( ) ;
372+
373+ expect ( signinSilentMock ) . toBeCalledTimes ( 1 ) ;
374+ expect ( result ) . toEqual ( null ) ;
375+ } ) ;
376+
327377 it ( 'should return null if no user is returned' , async ( ) => {
328378 getUserMock . mockReturnValue ( null ) ;
329379
0 commit comments