public void Stops_flushing_messages_on_first_exception()
        {
            // Arrange
            var client = new Mock<IEventSourceRavenClient>();

            var breakingEntry = CreateTestEntry();

            client.Setup(x => x.CaptureEventEntry(It.Is<EventEntry>(e => e != breakingEntry), It.IsAny<ISentryExceptionLocator>()))
                .Verifiable();

            client.Setup(x => x.CaptureEventEntry(breakingEntry, It.IsAny<ISentryExceptionLocator>()))
                .Throws(new WebException());

            var sink = new SentrySink(client.Object, Buffering.DefaultBufferingInterval,
                Buffering.DefaultBufferingCount, Buffering.DefaultMaxBufferSize, Timeout.InfiniteTimeSpan);

            // Act
            sink.OnNext(CreateTestEntry());
            sink.OnNext(breakingEntry);
            sink.OnNext(CreateTestEntry());
            sink.OnCompleted();

            // Assert
            client.Verify(
                x => x.CaptureEventEntry(It.Is<EventEntry>(e => e != breakingEntry), It.IsAny<ISentryExceptionLocator>()),
                Times.Exactly(1)
                );
        }
        public async Task Flushes_messages_to_raven_client()
        {
            // Arrange
            var client = new Mock<IEventSourceRavenClient>();

            client.Setup(x => x.CaptureEventEntry(It.IsAny<EventEntry>(), It.IsAny<ISentryExceptionLocator>())).Verifiable();

            var sink = new SentrySink(client.Object, Buffering.DefaultBufferingInterval, 
                Buffering.DefaultBufferingCount, Buffering.DefaultMaxBufferSize, Timeout.InfiniteTimeSpan);

            // Act
            sink.OnNext(CreateTestEntry());
            sink.OnNext(CreateTestEntry());
            sink.OnNext(CreateTestEntry());

            await sink.FlushAsync();

            // Assert
            client.Verify(
                x => x.CaptureEventEntry(It.IsAny<EventEntry>(), It.IsAny<ISentryExceptionLocator>()), 
                Times.Exactly(3)
                );
        }