@@ -99,6 +99,53 @@ public function testThrowingEventsHandlingWontStopExecution()
99
99
$ messageBus ->dispatch ($ message );
100
100
}
101
101
102
+ public function testHandleDelayedEventFromQueue ()
103
+ {
104
+ $ message = new DummyMessage ('Hello ' );
105
+ $ event = new DummyEvent ('Event on queue ' );
106
+
107
+ $ middleware = new DispatchAfterCurrentBusMiddleware ();
108
+ $ commandHandlingMiddleware = $ this ->createMock (MiddlewareInterface::class);
109
+ $ eventHandlingMiddleware = $ this ->createMock (MiddlewareInterface::class);
110
+
111
+ // This bus simulates the bus that are used when messages come back form the queue
112
+ $ messageBusAfterQueue = new MessageBus ([
113
+ // Create a new middleware
114
+ new DispatchAfterCurrentBusMiddleware (),
115
+ $ eventHandlingMiddleware ,
116
+ ]);
117
+
118
+ $ fakePutMessageOnQueue = $ this ->createMock (MiddlewareInterface::class);
119
+ $ fakePutMessageOnQueue ->expects ($ this ->any ())
120
+ ->method ('handle ' )
121
+ ->with ($ this ->callback (function ($ envelope ) use ($ messageBusAfterQueue ) {
122
+ // Fake putting the message on the queue
123
+ // Fake reading the queue
124
+ // Now, we add the message back to a new bus.
125
+ $ messageBusAfterQueue ->dispatch ($ envelope );
126
+
127
+ return true ;
128
+ }))
129
+ ->will ($ this ->returnArgument (0 ));
130
+
131
+ $ eventBus = new MessageBus ([
132
+ $ middleware ,
133
+ $ fakePutMessageOnQueue ,
134
+ ]);
135
+
136
+ $ messageBus = new MessageBus ([
137
+ $ middleware ,
138
+ new DispatchingMiddleware ($ eventBus , [
139
+ new Envelope ($ event , [new DispatchAfterCurrentBusStamp ()]),
140
+ ]),
141
+ $ commandHandlingMiddleware ,
142
+ ]);
143
+
144
+ $ this ->expectHandledMessage ($ commandHandlingMiddleware , 0 , $ message );
145
+ $ this ->expectHandledMessage ($ eventHandlingMiddleware , 0 , $ event );
146
+ $ messageBus ->dispatch ($ message );
147
+ }
148
+
102
149
/**
103
150
* @param MiddlewareInterface|MockObject $handlingMiddleware
104
151
*/
0 commit comments