@@ -296,6 +296,31 @@ public function testReceivesNextRequestAfterPreviousHandlerIsSettled()
296296 $ middleware ($ request , $ this ->expectCallableOnceWith ($ request ));
297297 }
298298
299+ public function testReceivesNextRequestWhichThrowsAfterPreviousHandlerIsSettled ()
300+ {
301+ $ request = new ServerRequest (
302+ 'POST ' ,
303+ 'http://example.com/ ' ,
304+ array (),
305+ 'hello '
306+ );
307+
308+ $ deferred = new Deferred ();
309+ $ middleware = new LimitConcurrentRequestsMiddleware (1 );
310+ $ middleware ($ request , function () use ($ deferred ) {
311+ return $ deferred ->promise ();
312+ });
313+
314+ $ second = $ middleware ($ request , function () {
315+ throw new \RuntimeException ();
316+ });
317+
318+ $ this ->assertTrue ($ second instanceof PromiseInterface);
319+ $ second ->then (null , $ this ->expectCallableOnce ());
320+
321+ $ deferred ->reject (new \RuntimeException ());
322+ }
323+
299324 public function testPendingRequestCanBeCancelledAndForwardsCancellationToInnerPromise ()
300325 {
301326 $ request = new ServerRequest (
@@ -365,6 +390,50 @@ public function testReceivesNextRequestAfterPreviousHandlerIsCancelled()
365390 $ middleware ($ request , $ this ->expectCallableOnceWith ($ request ));
366391 }
367392
393+ public function testRejectsWhenQueuedPromiseIsCancelled ()
394+ {
395+ $ request = new ServerRequest (
396+ 'POST ' ,
397+ 'http://example.com/ ' ,
398+ array (),
399+ 'hello '
400+ );
401+
402+ $ deferred = new Deferred ();
403+ $ middleware = new LimitConcurrentRequestsMiddleware (1 );
404+ $ first = $ middleware ($ request , function () use ($ deferred ) {
405+ return $ deferred ->promise ();
406+ });
407+
408+ $ second = $ middleware ($ request , $ this ->expectCallableNever ());
409+
410+ $ this ->assertTrue ($ second instanceof PromiseInterface);
411+ $ second ->cancel ();
412+ $ second ->then (null , $ this ->expectCallableOnce ());
413+ }
414+
415+ public function testDoesNotInvokeNextHandlersWhenQueuedPromiseIsCancelled ()
416+ {
417+ $ request = new ServerRequest (
418+ 'POST ' ,
419+ 'http://example.com/ ' ,
420+ array (),
421+ 'hello '
422+ );
423+
424+ $ deferred = new Deferred ();
425+ $ middleware = new LimitConcurrentRequestsMiddleware (1 );
426+ $ first = $ middleware ($ request , function () use ($ deferred ) {
427+ return $ deferred ->promise ();
428+ });
429+
430+ $ second = $ middleware ($ request , $ this ->expectCallableNever ());
431+ /* $third = */ $ middleware ($ request , $ this ->expectCallableNever ());
432+
433+ $ this ->assertTrue ($ second instanceof PromiseInterface);
434+ $ second ->cancel ();
435+ }
436+
368437 public function testReceivesStreamingBodyChangesInstanceWithCustomBodyButSameDataWhenDequeued ()
369438 {
370439 $ stream = new ThroughStream ();
0 commit comments