@@ -99,6 +99,53 @@ public function testThrowingEventsHandlingWontStopExecution()
9999 $ messageBus ->dispatch ($ message );
100100 }
101101
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+
102149 /**
103150 * @param MiddlewareInterface|MockObject $handlingMiddleware
104151 */
0 commit comments