public void ShouldCallDbWriterWithCertainDataFromMessageBroker()
        {
            var rmqConsumerMock  = Substitute.For <IRmqConsumer>();
            var dbDataWriterMock = Substitute.For <IDbDataWriter>();

            var configSample =
                @"{
""Config"":{
    ""Binding"": {
            ""ReceiverQueue"": ""QueueDataPersister""
        },
    ""Application"": {
            ""DataSchemaBase64"": ""ewogICJUYWJsZU5hbWUiOiAiTmFtZUJhc2VkNjQiLAogICJIZWFkZXIiOiB7CiAgICAiRmllbGQxIjogInN0cmluZyIsCiAgICAiRmllbGQyIjogIklOVCIsCiAgICAiRmllbGQzIjogInN0cmluZyIKICB9Cn0="",
            ""ConnectionString"": ""Server=***;Database=ProcessedDataCh2;User ID=***;Password=***;""
        }
    }
}";

            var testData            = @"{ ""Field"": ""Value""}";
            var expectedStringArray = new string[] { @"{ ""Field"": ""Value""}" };

            using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(configSample)))
            {
                var builder = new ConfigurationBuilder().AddJsonStream(ms);
                var configurationSection = builder
                                           .Build()
                                           .GetSection("Config");


                var sut = new SimpleDataPersisterEngine(
                    configurationSection,
                    rmqConsumerMock,
                    dbDataWriterMock);

                rmqConsumerMock
                .When(w => w.StartListening(Arg.Any <EventHandler <BasicDeliverEventArgs> >()))
                .Do((args) =>
                {
                    byte[] fakeBytesUrl = Encoding.UTF8.GetBytes(testData);
                    args.Arg <EventHandler <BasicDeliverEventArgs> >().Invoke(this, new BasicDeliverEventArgs()
                    {
                        Body = Encoding.UTF8.GetBytes(testData)
                    });
                });

                // Act
                sut.Start();
            }

            // Assert
            dbDataWriterMock
            .Received(1)
            .SaveMessagesToDb(Arg.Is <string[]>(e => expectedStringArray.SequenceEqual(e)));
        }
        public void ShouldSetSourceQueueWithParameterFromAppsettings()
        {
            var rmqConsumerMock = Substitute.For <IRmqConsumer>();
            var dbDataWriter    = Substitute.For <IDbDataWriter>();

            var configSample =
                @"{
""Config"":{
    ""Binding"": {
            ""ReceiverQueue"": ""QueueDataPersister""
        },
    ""Application"": {
            ""DataSchemaBase64"": ""ewogICJUYWJsZU5hbWUiOiAiTmFtZUJhc2VkNjQiLAogICJIZWFkZXIiOiB7CiAgICAiRmllbGQxIjogInN0cmluZyIsCiAgICAiRmllbGQyIjogIklOVCIsCiAgICAiRmllbGQzIjogInN0cmluZyIKICB9Cn0="",
            ""ConnectionString"": ""Server=***;Database=ProcessedDataCh2;User ID=***;Password=***;""
        }
    }
}";

            using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(configSample)))
            {
                var builder = new ConfigurationBuilder().AddJsonStream(ms);
                var configurationSection = builder
                                           .Build()
                                           .GetSection("Config");


                var sut = new SimpleDataPersisterEngine(
                    configurationSection,
                    rmqConsumerMock,
                    dbDataWriter);

                // Act
                sut.Start();
            }

            // Assert
            rmqConsumerMock
            .Received(1)
            .SetQueue(Arg.Is("QueueDataPersister"));
        }