public async Task InvalidMessage()
        {
            var receiver = new FakeReceiver("fake");

            MessagingConfigurationProvider provider = typeof(MessagingConfigurationProvider).New(receiver, null);

            var reloaded = false;

            ChangeToken.OnChange(provider.GetReloadToken, () => reloaded = true);

            var newSettings = "This is {not] a [valid} JSON string: \"";

            var message = new FakeReceiverMessage(newSettings);

            var dataBefore = GetData(provider);

            // Simulate the FakeReceiver receiving a message.
            await receiver.MessageHandler.OnMessageReceivedAsync(receiver, message);

            // The protected Data property should not have been replaced.
            GetData(provider).Should().BeSameAs(dataBefore);

            // It should report that it has been reloaded.
            reloaded.Should().BeFalse();

            // The received message should have been handled by acknowledging it.
            message.Handled.Should().BeTrue();
            message.HandledBy.Should().Be(nameof(message.RejectAsync));
        }
        public async Task HappyPathNewSetting()
        {
            var receiver = new FakeReceiver("fake");

            MessagingConfigurationProvider provider = typeof(MessagingConfigurationProvider).New(receiver, null);

            var newSettings = @"{
  ""foo"": ""abc""
}";
            var message     = new FakeReceiverMessage(newSettings);

            var reloaded = false;

            ChangeToken.OnChange(provider.GetReloadToken, () => reloaded = true);

            var dataBefore = GetData(provider);

            // Simulate the FakeReceiver receiving a message.
            await receiver.MessageHandler.OnMessageReceivedAsync(receiver, message);

            // The protected Data property should have been replaced.
            GetData(provider).Should().NotBeSameAs(dataBefore);

            // Data should contain the new settings.
            GetData(provider).Should().ContainKey("foo");
            GetData(provider)["foo"].Should().Be("abc");

            // It should report that it has been reloaded.
            reloaded.Should().BeTrue();

            // The received message should have been handled by acknowledging it.
            message.Handled.Should().BeTrue();
            message.HandledBy.Should().Be(nameof(message.AcknowledgeAsync));
        }
        public void ConstructorLeavesDataEmpty()
        {
            var receiver = new FakeReceiver("fake");

            MessagingConfigurationProvider provider = typeof(MessagingConfigurationProvider).New(receiver, null);

            GetData(provider).Should().BeEmpty();
        }
        public void ConstructorSetsReceiverProperty()
        {
            var receiver = new FakeReceiver("fake");

            MessagingConfigurationProvider provider = typeof(MessagingConfigurationProvider).New(receiver, null);

            provider.Receiver.Should().BeSameAs(receiver);
        }
        public void ConstructorSetsSettingFilterProperty()
        {
            var receiver = new FakeReceiver("fake");
            var filter   = new FakeSettingFilter();

            MessagingConfigurationProvider provider = typeof(MessagingConfigurationProvider).New(receiver, filter);

            provider.SettingFilter.Should().BeSameAs(filter);
        }
        public void ConstructorStartsTheReceiver()
        {
            var receiver = new FakeReceiver("fake");

            receiver.MessageHandler.Should().BeNull();

            MessagingConfigurationProvider provider = typeof(MessagingConfigurationProvider).New(receiver, null);

            receiver.MessageHandler.Should().NotBeNull();
        }
 private static IDictionary <string, string> GetData(MessagingConfigurationProvider provider) => provider.Unlock().Data;