/** @test */ function it_should_update_last_published_message_when_publisher_fails_before_last_one() { $nonEmptyExchangeName = 'non_empty_exchange_name'; $severalMessages = [A::storedEvent()->withId(12000)->build(), A::storedEvent()->withId(11000)->build(), A::storedEvent()->build()]; $store = $this->givenAStoreWith($severalMessages); $tracker = $this->givenANonEmptyExchange($nonEmptyExchangeName); $message = A::publishedMessage()->withExchangeName($nonEmptyExchangeName)->build(); $this->givenMostRecentPublishedMessageIs($tracker, $message, $nonEmptyExchangeName); $this->expectToTrackUpdatedMessage($tracker, $message); $producer = new MessageProducerThatThrowsException(); $publisher = new MessagePublisher($store, $tracker, $producer); $messages = $publisher->publishTo($nonEmptyExchangeName); $this->assertEquals(1, $messages, 'Should have processed only 1 message'); $this->assertEquals(12000, $message->mostRecentMessageId(), 'Most recent message ID should be 12000'); }