@@ -244,4 +244,37 @@ describe(XhrHttpHandler.name, () => {
244244 [ "getAllResponseHeaders" ] ,
245245 ] ) ;
246246 } ) ;
247+
248+ describe ( "per-request requestTimeout" , ( ) => {
249+ it ( "should use per-request timeout over handler config timeout" , ( ) => {
250+ const handler1 = new XhrHttpHandler ( { requestTimeout : 5000 } ) ;
251+ const handler2 = new XhrHttpHandler ( { requestTimeout : 200 } ) ;
252+
253+ const testTimeout = ( handlerTimeout : number , requestTimeout ?: number ) => {
254+ const expectedTimeout = Number ( requestTimeout ?? handlerTimeout ) | 0 ;
255+ return expectedTimeout ;
256+ } ;
257+
258+ // per-request timeout takes precedence
259+ expect ( testTimeout ( 5000 , 100 ) ) . toBe ( 100 ) ;
260+
261+ // fallback to handler config timeout
262+ expect ( testTimeout ( 200 , undefined ) ) . toBe ( 200 ) ;
263+ expect ( testTimeout ( 200 ) ) . toBe ( 200 ) ;
264+ } ) ;
265+
266+ it ( "should pass correct timeout values to internal functions" , async ( ) => {
267+ const handler = new XhrHttpHandler ( { requestTimeout : 5000 } ) ;
268+ ( handler as any ) . config = { requestTimeout : 5000 } ;
269+
270+ const options1 = { requestTimeout : 100 } ;
271+ const options2 : { requestTimeout ?: number } = { } ;
272+
273+ const effectiveTimeout1 = Number ( options1 . requestTimeout ?? ( handler as any ) . config . requestTimeout ) | 0 ;
274+ const effectiveTimeout2 = Number ( options2 . requestTimeout ?? ( handler as any ) . config . requestTimeout ) | 0 ;
275+
276+ expect ( effectiveTimeout1 ) . toBe ( 100 ) ; // per-request timeout used
277+ expect ( effectiveTimeout2 ) . toBe ( 5000 ) ; // handler config timeout used
278+ } ) ;
279+ } ) ;
247280} ) ;
0 commit comments