public void ConstructorSetsInnerFilter()
        {
            var innerFilter = new FakeSettingFilter();

            var filter = new BlocklistSettingFilter(new[] { "foo" }, innerFilter);

            filter.InnerFilter.Should().BeSameAs(innerFilter);
        }
        public void ConstructorSetsBlockedSettings()
        {
            string[] blockedSettings = new[] { "foo" };

            var filter = new BlocklistSettingFilter(blockedSettings);

            filter.BlockedSettings.Should().BeEquivalentTo(blockedSettings);
        }
        public void ReturnsFalseWhenTheSettingIsAChildOfAnItemInTheBlocklist()
        {
            var mockInnerFilter = new Mock <ISettingFilter>();

            var filter = new BlocklistSettingFilter(new[] { "foo" }, mockInnerFilter.Object);

            filter.ShouldProcessSettingChange("foo:bar", new Dictionary <string, object>())
            .Should().Be(false);

            mockInnerFilter.Verify(m => m.ShouldProcessSettingChange(
                                       It.IsAny <string>(), It.IsAny <IReadOnlyDictionary <string, object> >()), Times.Never);
        }
        public void ReturnsWhatTheInnerFilterReturnsWhenTheSettingIsNotInTheBlocklist()
        {
            var mockInnerFilter = new Mock <ISettingFilter>();

            mockInnerFilter
            .Setup(m => m.ShouldProcessSettingChange(It.IsAny <string>(), It.IsAny <IReadOnlyDictionary <string, object> >()))
            .Returns(false);

            var filter = new BlocklistSettingFilter(new[] { "foo" }, mockInnerFilter.Object);

            var receivedMessageHeaders = new Dictionary <string, object>();

            filter.ShouldProcessSettingChange("bar", receivedMessageHeaders)
            .Should().Be(false);

            mockInnerFilter.Verify(m => m.ShouldProcessSettingChange(
                                       It.Is <string>(s => s == "bar"), It.Is <IReadOnlyDictionary <string, object> >(headers => headers == receivedMessageHeaders)));
        }