12
12
namespace Symfony \Component \Messenger \Tests \Middleware ;
13
13
14
14
use Symfony \Component \Messenger \Envelope ;
15
+ use Symfony \Component \Messenger \Exception \ChainedHandlerFailedException ;
15
16
use Symfony \Component \Messenger \Handler \HandlersLocator ;
16
17
use Symfony \Component \Messenger \Middleware \HandleMessageMiddleware ;
17
18
use Symfony \Component \Messenger \Middleware \StackMiddleware ;
@@ -40,7 +41,7 @@ public function testItCallsTheHandlerAndNextMiddleware()
40
41
/**
41
42
* @dataProvider itAddsHandledStampsProvider
42
43
*/
43
- public function testItAddsHandledStamps (array $ handlers , array $ expectedStamps )
44
+ public function testItAddsHandledStamps (array $ handlers , array $ expectedStamps, bool $ nextIsCalled )
44
45
{
45
46
$ message = new DummyMessage ('Hey ' );
46
47
$ envelope = new Envelope ($ message );
@@ -49,7 +50,11 @@ public function testItAddsHandledStamps(array $handlers, array $expectedStamps)
49
50
DummyMessage::class => $ handlers ,
50
51
]));
51
52
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
+ }
53
58
54
59
$ this ->assertEquals ($ expectedStamps , $ envelope ->all (HandledStamp::class));
55
60
}
@@ -64,17 +69,22 @@ public function itAddsHandledStampsProvider()
64
69
$ second ->method ('__invoke ' )->willReturn (null );
65
70
$ secondClass = \get_class ($ second );
66
71
72
+ $ failing = $ this ->createPartialMock (\stdClass::class, ['__invoke ' ]);
73
+ $ failing ->method ('__invoke ' )->will ($ this ->throwException (new \Exception ('handler failed. ' )));
74
+
67
75
yield 'A stamp is added ' => [
68
76
[$ first ],
69
77
[new HandledStamp ('first result ' , $ firstClass .'::__invoke ' )],
78
+ true ,
70
79
];
71
80
72
81
yield 'A stamp is added per handler ' => [
73
- [$ first , $ second ],
82
+ [' first ' => $ first , ' second ' => $ second ],
74
83
[
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 ' ),
77
86
],
87
+ true ,
78
88
];
79
89
80
90
yield 'Yielded locator alias is used ' => [
@@ -83,6 +93,24 @@ public function itAddsHandledStampsProvider()
83
93
new HandledStamp ('first result ' , $ firstClass .'::__invoke ' , 'first_alias ' ),
84
94
new HandledStamp (null , $ secondClass .'::__invoke ' ),
85
95
],
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 ,
86
114
];
87
115
}
88
116
0 commit comments