public async Task When_outstanding_in_outbox_they_are_retrieved_correctly_async()
    {
        var minimumAgeInMs = 1000;
        var outbox         = new InMemoryOutbox();

        await outbox.AddAsync(new MessageTestDataBuilder());

        await outbox.AddAsync(new MessageTestDataBuilder());

        await Task.Delay(minimumAgeInMs * 2);

        await outbox.AddAsync(new MessageTestDataBuilder());

        await outbox.AddAsync(new MessageTestDataBuilder());

        var messagesToDispatch = await outbox.OutstandingMessagesAsync(minimumAgeInMs);

        var allMessages = await outbox.OutstandingMessagesAsync(0);

        foreach (var message in messagesToDispatch)
        {
            await outbox.MarkDispatchedAsync(message.Id);
        }

        var messagesAfterDispatch = await outbox.OutstandingMessagesAsync(minimumAgeInMs);

        Assert.Equal(2, messagesToDispatch.Count());
        Assert.Equal(4, allMessages.Count());
        Assert.Empty(messagesAfterDispatch);
    }