public void SeekMethodHappyPath()
        {
            var fakeKafkaReceiver = new FakeKafkaReceiver();

            var timestamp1 = new DateTime(2020, 9, 8, 15, 32, 19, DateTimeKind.Local).ToUniversalTime();
            var timestamp2 = new DateTime(2020, 9, 8, 15, 32, 33, DateTimeKind.Local).ToUniversalTime();

            fakeKafkaReceiver.Seek(timestamp1);
            fakeKafkaReceiver.Seek(timestamp2);

            fakeKafkaReceiver.SeekInvocations.Should().HaveCount(2);
            fakeKafkaReceiver.SeekInvocations[0].Should().Be(timestamp1);
            fakeKafkaReceiver.SeekInvocations[1].Should().Be(timestamp2);
        }
        public void SeekHappyPath()
        {
            var       fakeReceiver = new FakeKafkaReceiver();
            IReceiver receiver     = new ReceiverDecorator(fakeReceiver);

            var expectedTimestamp = DateTime.UtcNow;

            receiver.Seek(expectedTimestamp);

            var timestamp =
                fakeReceiver.SeekInvocations.Should().ContainSingle()
                .Subject;

            timestamp.Should().Be(expectedTimestamp);

            fakeReceiver.ReplayInvocations.Should().BeEmpty();
        }
        public async Task ReplayExtensionMethodHappyPath()
        {
            var       fakeReceiver = new FakeKafkaReceiver();
            IReceiver receiver     = new ReceiverDecorator(fakeReceiver);

            var expectedStart = DateTime.Now;
            var expectedEnd   = DateTime.UtcNow;
            Func <IReceiverMessage, Task> expectedCallback = message => Task.CompletedTask;

            await receiver.Replay(expectedStart, expectedEnd, expectedCallback);

            var(start, end, callback) =
                fakeReceiver.ReplayInvocations.Should().ContainSingle()
                .Subject;

            start.Should().Be(expectedStart);
            end.Should().Be(expectedEnd);
            callback.Should().BeSameAs(expectedCallback);

            fakeReceiver.SeekInvocations.Should().BeEmpty();
        }
        public void ReplayMethodHappyPath()
        {
            var fakeKafkaReceiver = new FakeKafkaReceiver();

            DateTime start1 = new DateTime(2020, 9, 8, 15, 32, 19, DateTimeKind.Local).ToUniversalTime();
            DateTime?end1   = new DateTime(2020, 9, 8, 15, 35, 3, DateTimeKind.Local).ToUniversalTime();
            Func <IReceiverMessage, Task> callback1 = m => Task.CompletedTask;
            DateTime start2 = new DateTime(2020, 9, 8, 15, 32, 33, DateTimeKind.Local).ToUniversalTime();
            DateTime?end2   = null;
            Func <IReceiverMessage, Task> callback2 = null;

            fakeKafkaReceiver.Replay(start1, end1, callback1);
            fakeKafkaReceiver.Replay(start2, end2, callback2);

            var expectedInvocation1 = new ReplayInvocation(start1, end1, callback1);
            var expectedInvocation2 = new ReplayInvocation(start2, end2, callback2);

            fakeKafkaReceiver.ReplayInvocations.Should().HaveCount(2);
            fakeKafkaReceiver.ReplayInvocations[0].Should().Be(expectedInvocation1);
            fakeKafkaReceiver.ReplayInvocations[1].Should().Be(expectedInvocation2);
        }