@@ -21,7 +21,6 @@ limitations under the License.
2121import fetchMock from "fetch-mock-jest" ;
2222
2323import { OidcTokenRefresher , TokenRefreshLogoutError } from "../../../src" ;
24- import { logger } from "../../../src/logger" ;
2524import { makeDelegatedAuthConfig } from "../../test-utils/oidc" ;
2625
2726describe ( "OidcTokenRefresher" , ( ) => {
@@ -78,51 +77,49 @@ describe("OidcTokenRefresher", () => {
7877 fetchMock . resetBehavior ( ) ;
7978 } ) ;
8079
81- it ( "throws when oidc client cannot be initialised" , async ( ) => {
82- jest . spyOn ( logger , "error" ) ;
83- fetchMock . get (
84- `${ config . issuer } .well-known/openid-configuration` ,
85- {
86- ok : false ,
87- status : 404 ,
88- } ,
89- { overwriteRoutes : true } ,
90- ) ;
91- const refresher = new OidcTokenRefresher ( authConfig . issuer , clientId , redirectUri , deviceId , idTokenClaims ) ;
92- await expect ( refresher . oidcClientReady ) . rejects . toThrow ( ) ;
93- expect ( logger . error ) . toHaveBeenCalledWith (
94- "Failed to initialise OIDC client." ,
95- // error from OidcClient
96- expect . any ( Error ) ,
97- ) ;
98- } ) ;
99-
100- it ( "initialises oidc client" , async ( ) => {
101- const refresher = new OidcTokenRefresher ( authConfig . issuer , clientId , redirectUri , deviceId , idTokenClaims ) ;
102- await refresher . oidcClientReady ;
103-
104- // @ts -ignore peek at private property to see we initialised the client correctly
105- expect ( refresher . oidcClient . settings ) . toEqual (
106- expect . objectContaining ( {
107- client_id : clientId ,
108- redirect_uri : redirectUri ,
109- authority : authConfig . issuer ,
110- scope,
111- } ) ,
112- ) ;
113- } ) ;
114-
11580 describe ( "doRefreshAccessToken()" , ( ) => {
11681 it ( "should throw when oidcClient has not been initialised" , async ( ) => {
82+ fetchMock . get (
83+ `${ config . issuer } .well-known/openid-configuration` ,
84+ {
85+ ok : false ,
86+ status : 404 ,
87+ } ,
88+ { overwriteRoutes : true } ,
89+ ) ;
90+
91+ const refresher = new OidcTokenRefresher ( authConfig . issuer , clientId , redirectUri , deviceId , idTokenClaims ) ;
92+ await expect ( refresher . doRefreshAccessToken ( "token" ) ) . rejects . toThrow ( "Failed to initialise OIDC client." ) ;
93+ } ) ;
94+
95+ it ( "should retry initialisation" , async ( ) => {
96+ fetchMock . get (
97+ `${ config . issuer } .well-known/openid-configuration` ,
98+ {
99+ ok : false ,
100+ status : 404 ,
101+ } ,
102+ { overwriteRoutes : true } ,
103+ ) ;
104+
117105 const refresher = new OidcTokenRefresher ( authConfig . issuer , clientId , redirectUri , deviceId , idTokenClaims ) ;
118- await expect ( refresher . doRefreshAccessToken ( "token" ) ) . rejects . toThrow (
119- "Cannot get new token before OIDC client is initialised." ,
106+ await expect ( refresher . doRefreshAccessToken ( "token" ) ) . rejects . toThrow ( "Failed to initialise OIDC client." ) ;
107+
108+ // put the successful mock back
109+ fetchMock . get ( `${ config . issuer } .well-known/openid-configuration` , config , { overwriteRoutes : true } ) ;
110+
111+ const result = await refresher . doRefreshAccessToken ( "token" ) ;
112+
113+ expect ( result ) . toEqual (
114+ expect . objectContaining ( {
115+ accessToken : "new-access-token" ,
116+ refreshToken : "new-refresh-token" ,
117+ } ) ,
120118 ) ;
121119 } ) ;
122120
123121 it ( "should refresh the tokens" , async ( ) => {
124122 const refresher = new OidcTokenRefresher ( authConfig . issuer , clientId , redirectUri , deviceId , idTokenClaims ) ;
125- await refresher . oidcClientReady ;
126123
127124 const result = await refresher . doRefreshAccessToken ( "refresh-token" ) ;
128125
@@ -140,13 +137,12 @@ describe("OidcTokenRefresher", () => {
140137
141138 it ( "should persist the new tokens" , async ( ) => {
142139 const refresher = new OidcTokenRefresher ( authConfig . issuer , clientId , redirectUri , deviceId , idTokenClaims ) ;
143- await refresher . oidcClientReady ;
144140 // spy on our stub
145- jest . spyOn ( refresher , "persistTokens" ) ;
141+ jest . spyOn ( refresher as any , "persistTokens" ) ;
146142
147143 await refresher . doRefreshAccessToken ( "refresh-token" ) ;
148144
149- expect ( refresher . persistTokens ) . toHaveBeenCalledWith (
145+ expect ( ( refresher as any ) . persistTokens ) . toHaveBeenCalledWith (
150146 expect . objectContaining ( {
151147 accessToken : "new-access-token" ,
152148 refreshToken : "new-refresh-token" ,
0 commit comments