14
14
use Symfony \Component \Messenger \Envelope ;
15
15
use Symfony \Component \Messenger \Exception \HandlerFailedException ;
16
16
use Symfony \Component \Messenger \Exception \NoHandlerForMessageException ;
17
+ use Symfony \Component \Messenger \Handler \ConfigurableAutoAckInterface ;
17
18
use Symfony \Component \Messenger \Handler \HandlerDescriptor ;
18
19
use Symfony \Component \Messenger \Handler \HandlersLocator ;
19
20
use Symfony \Component \Messenger \Middleware \HandleMessageMiddleware ;
20
21
use Symfony \Component \Messenger \Middleware \StackMiddleware ;
22
+ use Symfony \Component \Messenger \Stamp \DelayedAckStamp ;
21
23
use Symfony \Component \Messenger \Stamp \HandledStamp ;
22
24
use Symfony \Component \Messenger \Test \Middleware \MiddlewareTestCase ;
23
25
use Symfony \Component \Messenger \Tests \Fixtures \DummyMessage ;
@@ -114,6 +116,45 @@ public function itAddsHandledStampsProvider(): iterable
114
116
];
115
117
}
116
118
119
+ /**
120
+ * @dataProvider itAddsDelayedAckStampProvider
121
+ */
122
+ public function testItAddsDelayedAckStamp ($ handler , bool $ stampIsExpected )
123
+ {
124
+ $ message = new DummyMessage ('Hey ' );
125
+ $ envelope = new Envelope ($ message );
126
+
127
+ $ middleware = new HandleMessageMiddleware (new HandlersLocator ([
128
+ DummyMessage::class => [$ handler ],
129
+ ]));
130
+
131
+ try {
132
+ $ envelope = $ middleware ->handle ($ envelope , $ this ->getStackMock (true ));
133
+ } catch (HandlerFailedException $ e ) {
134
+ $ envelope = $ e ->getEnvelope ();
135
+ }
136
+
137
+ $ this ->assertSame ($ stampIsExpected , null !== $ envelope ->last (DelayedAckStamp::class));
138
+ }
139
+
140
+ public function itAddsDelayedAckStampProvider (): iterable
141
+ {
142
+ yield 'It does not add stamp by default ' => [
143
+ new HandleMessageMiddlewareTestCallable (),
144
+ false ,
145
+ ];
146
+
147
+ yield 'It does not add when object return false ' => [
148
+ new HandleMessageMiddlewareWithAckConfigurationTestCallable (false ),
149
+ false ,
150
+ ];
151
+
152
+ yield 'It adds when object return true ' => [
153
+ new HandleMessageMiddlewareWithAckConfigurationTestCallable (true ),
154
+ true ,
155
+ ];
156
+ }
157
+
117
158
public function testThrowsNoHandlerException ()
118
159
{
119
160
$ this ->expectException (NoHandlerForMessageException::class);
@@ -137,3 +178,22 @@ public function __invoke()
137
178
{
138
179
}
139
180
}
181
+
182
+ class HandleMessageMiddlewareWithAckConfigurationTestCallable implements ConfigurableAutoAckInterface
183
+ {
184
+ private $ autoAckDisabled ;
185
+
186
+ public function __construct (bool $ autoAckDisabled )
187
+ {
188
+ $ this ->autoAckDisabled = $ autoAckDisabled ;
189
+ }
190
+
191
+ public function isAutoAckDisabled (Envelope $ envelope ): bool
192
+ {
193
+ return $ this ->autoAckDisabled ;
194
+ }
195
+
196
+ public function __invoke ()
197
+ {
198
+ }
199
+ }
0 commit comments