1212namespace Symfony \Component \Messenger \Tests \Middleware ;
1313
1414use Symfony \Component \Messenger \Envelope ;
15+ use Symfony \Component \Messenger \Exception \ChainedHandlerFailedException ;
1516use Symfony \Component \Messenger \Handler \HandlersLocator ;
1617use Symfony \Component \Messenger \Middleware \HandleMessageMiddleware ;
1718use Symfony \Component \Messenger \Middleware \StackMiddleware ;
@@ -40,7 +41,7 @@ public function testItCallsTheHandlerAndNextMiddleware()
4041 /**
4142 * @dataProvider itAddsHandledStampsProvider
4243 */
43- public function testItAddsHandledStamps (array $ handlers , array $ expectedStamps )
44+ public function testItAddsHandledStamps (array $ handlers , array $ expectedStamps, bool $ nextIsCalled )
4445 {
4546 $ message = new DummyMessage ('Hey ' );
4647 $ envelope = new Envelope ($ message );
@@ -49,7 +50,11 @@ public function testItAddsHandledStamps(array $handlers, array $expectedStamps)
4950 DummyMessage::class => $ handlers ,
5051 ]));
5152
52- $ envelope = $ middleware ->handle ($ envelope , $ this ->getStackMock ());
53+ try {
54+ $ envelope = $ middleware ->handle ($ envelope , $ this ->getStackMock ($ nextIsCalled ));
55+ } catch (ChainedHandlerFailedException $ e ) {
56+ $ envelope = $ e ->getEnvelope ();
57+ }
5358
5459 $ this ->assertEquals ($ expectedStamps , $ envelope ->all (HandledStamp::class));
5560 }
@@ -64,17 +69,22 @@ public function itAddsHandledStampsProvider()
6469 $ second ->method ('__invoke ' )->willReturn (null );
6570 $ secondClass = \get_class ($ second );
6671
72+ $ failing = $ this ->createPartialMock (\stdClass::class, ['__invoke ' ]);
73+ $ failing ->method ('__invoke ' )->will ($ this ->throwException (new \Exception ('handler failed. ' )));
74+
6775 yield 'A stamp is added ' => [
6876 [$ first ],
6977 [new HandledStamp ('first result ' , $ firstClass .'::__invoke ' )],
78+ true ,
7079 ];
7180
7281 yield 'A stamp is added per handler ' => [
73- [$ first , $ second ],
82+ [' first ' => $ first , ' second ' => $ second ],
7483 [
75- new HandledStamp ('first result ' , $ firstClass .'::__invoke ' ),
76- new HandledStamp (null , $ secondClass .'::__invoke ' ),
84+ new HandledStamp ('first result ' , $ firstClass .'::__invoke ' , ' first ' ),
85+ new HandledStamp (null , $ secondClass .'::__invoke ' , ' second ' ),
7786 ],
87+ true ,
7888 ];
7989
8090 yield 'Yielded locator alias is used ' => [
@@ -83,6 +93,24 @@ public function itAddsHandledStampsProvider()
8393 new HandledStamp ('first result ' , $ firstClass .'::__invoke ' , 'first_alias ' ),
8494 new HandledStamp (null , $ secondClass .'::__invoke ' ),
8595 ],
96+ true ,
97+ ];
98+
99+ yield 'It tries all handlers ' => [
100+ ['first ' => $ first , 'failing ' => $ failing , 'second ' => $ second ],
101+ [
102+ new HandledStamp ('first result ' , $ firstClass .'::__invoke ' , 'first ' ),
103+ new HandledStamp (null , $ secondClass .'::__invoke ' , 'second ' ),
104+ ],
105+ false ,
106+ ];
107+
108+ yield 'It ignores duplicated handler ' => [
109+ [$ first , $ first ],
110+ [
111+ new HandledStamp ('first result ' , $ firstClass .'::__invoke ' ),
112+ ],
113+ true ,
86114 ];
87115 }
88116
0 commit comments