@@ -122,6 +122,53 @@ describe("OAuthService.refreshToken", () => {
122122 expect ( result . errorCode ) . toBe ( "auth_error" ) ;
123123 } ) ;
124124
125+ it . each ( [
126+ {
127+ name : "invalid_grant" ,
128+ body : { error : "invalid_grant" } ,
129+ expected : "auth_error" ,
130+ } ,
131+ {
132+ name : "invalid_token" ,
133+ body : { error : "invalid_token" } ,
134+ expected : "auth_error" ,
135+ } ,
136+ {
137+ name : "invalid_client" ,
138+ body : { error : "invalid_client" } ,
139+ expected : "unknown_error" ,
140+ } ,
141+ {
142+ name : "invalid_request" ,
143+ body : { error : "invalid_request" } ,
144+ expected : "unknown_error" ,
145+ } ,
146+ {
147+ name : "a non-string error field" ,
148+ body : { error : 42 } ,
149+ expected : "unknown_error" ,
150+ } ,
151+ { name : "no error field" , body : { } , expected : "unknown_error" } ,
152+ ] ) ( "maps a 400 $name to a $expected" , async ( { body, expected } ) => {
153+ const { service } = createDeps ( ) ;
154+ fetchMock . mockResolvedValue ( jsonResponse ( body , 400 ) ) ;
155+
156+ const result = await service . refreshToken ( "rt" , "us" ) ;
157+
158+ expect ( result . success ) . toBe ( false ) ;
159+ expect ( result . errorCode ) . toBe ( expected ) ;
160+ } ) ;
161+
162+ it ( "maps a 400 with an unparseable body to an unknown_error" , async ( ) => {
163+ const { service } = createDeps ( ) ;
164+ fetchMock . mockResolvedValue ( new Response ( "" , { status : 400 } ) ) ;
165+
166+ const result = await service . refreshToken ( "rt" , "us" ) ;
167+
168+ expect ( result . success ) . toBe ( false ) ;
169+ expect ( result . errorCode ) . toBe ( "unknown_error" ) ;
170+ } ) ;
171+
125172 it ( "maps 5xx to a server_error" , async ( ) => {
126173 const { service } = createDeps ( ) ;
127174 fetchMock . mockResolvedValue ( jsonResponse ( { } , 503 ) ) ;
@@ -133,7 +180,7 @@ describe("OAuthService.refreshToken", () => {
133180
134181 it ( "maps other 4xx to an unknown_error" , async ( ) => {
135182 const { service } = createDeps ( ) ;
136- fetchMock . mockResolvedValue ( jsonResponse ( { } , 400 ) ) ;
183+ fetchMock . mockResolvedValue ( jsonResponse ( { } , 404 ) ) ;
137184
138185 const result = await service . refreshToken ( "rt" , "us" ) ;
139186
0 commit comments