public void CanProcessASingleCacheItemWithAllPropertiesAndReturnItInCacheConfigurations()
            {
                string json    = @"
{
    'cache' : {
        'items': {
            'expiry': {
                'type':'sliding',
                'ttl': '00:00:10'
            },
            'enabled': true,
            'encrypted': true
        }
    }
}";
                var    configs = _configurationReader.Read(JsonStringConfigSource.LoadSection(json, "cache"));

                configs.HasConfiguration("items").Should().BeTrue();
                var config = configs.GetConfiguration("items");

                config.Expiry.Type.Should().NotBeNull().And.HaveFlag(CacheExpiryType.Sliding);
                config.Expiry.TTL.Should().Be(TimeSpan.FromSeconds(10));
                config.Enabled.Should().BeTrue();
                config.Encrypted.Should().BeTrue();
            }
            public void WhenConfigurationContainsDuplicatesThenLastEntryIsUsed()
            {
                string json    = @"
{
    'cache' : {
        'items': {
            'expiry': {
                'type':'sliding',
                'ttl': '00:00:10'
            },
            'enabled': true,
            'encrypted': false
        },
        'items': {
            'expiry': {
                'type':'absolute',
                'ttl': '01:00:00'
            },
            'enabled': true,
            'encrypted': true
        }
    }
}";
                var    configs = _configurationReader.Read(JsonStringConfigSource.LoadSection(json, "cache"));

                configs.HasConfiguration("items").Should().BeTrue();
                var config = configs.GetConfiguration("items");

                config.Expiry.Type.Should().NotBeNull().And.HaveFlag(CacheExpiryType.Absolute);
                config.Expiry.TTL.Should().Be(TimeSpan.FromHours(1));
                config.Enabled.Should().BeTrue();
                config.Encrypted.Should().BeTrue();
            }
        public void WhenEncryptedCannotBeParsedThenThrows()
        {
            string json = @"
{
    'cache' : {
        'items': {
            'encrypted': 'bawk'
        }
    }
}";

            Assert.Throws <InvalidOperationException>(
                () => _configurationReader.Read(JsonStringConfigSource.LoadSection(json, "cache")));
        }
            public void WhenExpiryTTLCannotBeParsedThenThrows()
            {
                string json = @"
{
    'cache' : {
        'items': {
            'expiry': {
                'ttl':'xxxx',
            },
        }
    }
}";

                Assert.Throws <InvalidOperationException>(
                    () => _configurationReader.Read(JsonStringConfigSource.LoadSection(json, "cache")));
            }
            public void CanProcessMutlipleCacheConfigurationAndReturnThemInCacheConfigurations()
            {
                string json    = @"
{
    'cache' : {
        'items': {
            'expiry': {
                'type':'sliding',
                'ttl': '00:00:10'
            },
            'enabled': true,
            'encrypted': true
        },
        'http': {
            'enabled': true,
            'encrypted': true
        },
        'tcp': {
            'expiry': {
                'type':'sliding',
                'ttl': '00:00:10'
            },
            'enabled': true,
        },
        'ftp': {
            'expiry': {
                'type':'sliding',
                'ttl': '00:00:10'
            },
            'enabled': true,
            'encrypted': true
        }
    }
}";
                var    configs = _configurationReader.Read(JsonStringConfigSource.LoadSection(json, "cache"));

                configs.Count.Should().Be(4);
                configs.HasConfiguration("items").Should().BeTrue();
                configs.HasConfiguration("http").Should().BeTrue();
                configs.HasConfiguration("tcp").Should().BeTrue();
                configs.HasConfiguration("ftp").Should().BeTrue();
            }
            public void CanProcessASingleCacheItemWithOnlyEnabledAndReturnItInCacheConfigurations()
            {
                string json    = @"
{
    'cache' : {
        'items': {
            'enabled': false
        }
    }
}";
                var    configs = _configurationReader.Read(JsonStringConfigSource.LoadSection(json, "cache"));

                configs.HasConfiguration("items").Should().BeTrue();
                var config = configs.GetConfiguration("items");

                config.Expiry.Type.Should().Be(CacheExpirySettings.Default.Type);
                config.Expiry.TTL.Should().Be(CacheExpirySettings.Default.TTL);
                config.Enabled.Should().BeFalse();
                config.Encrypted.Should().Be(CacheConfiguration.Default.Encrypted);
            }