public void test_that_ack_filter_responds_to_a_valid_message(string message)
        {
            _mockLogger = new();

            _mockStationConfig = new();

            _mockInfluxClient = new();

            _mockConfig = new();

            _mockTimeProvider = new();

            _mockStationConfig.Setup(x => x.Value).Returns(new StationConfig()
            {
                Stations = new Station[] { new Station {
                                               Id = testStationId, Description = testStationArea, Enabled = true
                                           } }
            });

            var      testScheduler = new TestScheduler();
            DateTime testDateTime  = new DateTime(2020, 1, 1, 1, 0, 0);

            var kmStream = testScheduler.CreateColdObservable <KafkaMessage>(
                testScheduler.OnNextAt(2000, GenerateTestKM(message, testDateTime.AddMilliseconds(2000)))

                );

            _mockConfig.Setup(x => x.Value).Returns(new AckSinkConfig()
            {
                Enabled = true
            });

            _ackSink = new(_mockLogger.Object, _mockStationConfig.Object, _mockInfluxClient.Object, _mockConfig.Object, _mockTimeProvider.Object, testScheduler);

            _ackSink.Observe(kmStream);

            testScheduler.AdvanceByMs(5000);

            _mockInfluxClient.Verify(x => x.WritePirVoltage(It.IsAny <string>(), testStationId, It.IsAny <float>(), It.IsAny <DateTime>()));
        }
        public void test_that_when_config_is_enabled__the_sink_subscribes_into_the_message_stream()
        {
            _mockLogger = new();

            _mockStationConfig = new();

            _mockInfluxClient = new();

            _mockConfig = new();

            _mockStationConfig.Setup(x => x.Value).Returns(new StationConfig()
            {
                Stations = new Station[] { new Station()
                                           {
                                               Id = testStationId, Description = testStationArea, Enabled = true
                                           } }
            });

            _mockConfig.Setup(x => x.Value).Returns(new AckSinkConfig()
            {
                Enabled = true
            });

            _mockTimeProvider = new();

            _ackSink = new(_mockLogger.Object, _mockStationConfig.Object, _mockInfluxClient.Object, _mockConfig.Object, _mockTimeProvider.Object);

            var testScheduler = new TestScheduler();

            var kmStream = testScheduler.CreateHotObservable <KafkaMessage>(new Recorded <Notification <KafkaMessage> >(0, Notification.CreateOnNext(new KafkaMessage()
            {
                Id = "id1"
            })));

            _ackSink.Observe(kmStream);

            _mockLogger.VerifyLogInfo("Ack sink enabled.");

            Assert.IsTrue(kmStream.Subscriptions.Count > 0);
        }