diff --git a/src/Recorder/HandlesRecordedMessages.php b/src/Recorder/HandlesRecordedMessages.php new file mode 100644 index 0000000..121c2de --- /dev/null +++ b/src/Recorder/HandlesRecordedMessages.php @@ -0,0 +1,35 @@ +messageRecorder = $messageRecorder; + $this->messageBus = $messageBus; + } + + public function dispatch() + { + $recordedMessages = $this->messageRecorder->recordedMessages(); + + $this->messageRecorder->eraseMessages(); + + foreach ($recordedMessages as $recordedMessage) { + $this->messageBus->handle($recordedMessage); + } + } +} \ No newline at end of file diff --git a/tests/Recorder/HandlesRecordedMessagesTest.php b/tests/Recorder/HandlesRecordedMessagesTest.php new file mode 100644 index 0000000..097970c --- /dev/null +++ b/tests/Recorder/HandlesRecordedMessagesTest.php @@ -0,0 +1,85 @@ +dummyMessage(), $this->dummyMessage()]; + $messageRecorder = $this->mockMessageRecorder(); + + // first recorded messages should be fetched + $messageRecorder + ->expects($this->at(0)) + ->method('recordedMessages') + ->will($this->returnValue($messages)); + + // then immediately erased + $messageRecorder + ->expects($this->at(1)) + ->method('eraseMessages'); + + $actuallyHandledMessages = []; + $messageBus = $this->messageBusSpy($actuallyHandledMessages); + $middleware = new HandlesRecordedMessages( + $messageRecorder, + $messageBus + ); + + $middleware->dispatch(); + } + + /** + * @param array $actuallyHandledMessages + * @return \PHPUnit_Framework_MockObject_MockObject|MessageBus + */ + private function messageBusSpy(array &$actuallyHandledMessages) + { + $messageBus = $this->getMock('SimpleBus\Message\Bus\MessageBus'); + + $messageBus + ->expects($this->any()) + ->method('handle') + ->will( + $this->returnCallback( + function ($message) use (&$actuallyHandledMessages) { + $actuallyHandledMessages[] = $message; + } + ) + ); + + return $messageBus; + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject|\stdClass + */ + private function dummyMessage() + { + return new \stdClass(); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject|ContainsRecordedMessages + */ + private function mockMessageRecorder() + { + return $this->getMock('SimpleBus\Message\Recorder\ContainsRecordedMessages'); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject|MessageBus + */ + private function dummyMessageBus() + { + return $this->getMock('SimpleBus\Message\Bus\MessageBus'); + } +}