public async Task Ctor_WhenRuleExpirationIsInvalidOrEmpty_ShouldUseDefaultExpiration()
        {
            // Arrange
            const RuleType ruleType      = RuleType.Action;
            var            cacheKey      = $"{_cacheKeysKey}_{ruleType}_{nameof(TestRule)}";
            var            cacheKeysKey  = _cacheKeysKey;
            var            expectedRules = new List <CompiledRule <TestRule> >();

            _innerRuleServiceMock.Setup(r => r.GetCompiledByRuleType <TestRule>(ruleType)).ReturnsAsync(expectedRules);

            object cacheRules;

            _cacheMock.Setup(c => c.TryGetValue(cacheKey, out cacheRules)).Returns(false);

            object cacheKeys;

            _cacheMock.Setup(c => c.TryGetValue(cacheKeysKey, out cacheKeys)).Returns(false);

            _cacheSettings = new CacheSettings {
                RuleExpiration = "invalid"
            };
            var appSettingsMock = new Mock <IOptions <CacheSettings> >();

            appSettingsMock.Setup(s => s.Value).Returns(_cacheSettings);

            _ruleService = new CacheableRuleService(_innerRuleServiceMock.Object, _cacheMock.Object, appSettingsMock.Object);

            // Act
            await _ruleService.GetCompiledByRuleType <TestRule>(RuleType.Action);

            // Assert
            _cacheMock.Verify(c => c.SetAsync(cacheKey, expectedRules, It.Is <CacheEntryOptions>(o => !o.Expiration.HasValue)));
        }
        public async Task GetCompiledByRuleType_WhenInCache_ShouldGetRulesFromCache()
        {
            // Arrange
            const RuleType ruleType     = RuleType.Action;
            var            cacheKey     = $"{_cacheKeysKey}_{ruleType}_{nameof(TestRule)}";
            var            cacheKeysKey = _cacheKeysKey;

            object expectedRules = new List <CompiledRule <TestRule> >();

            _cacheMock.Setup(c => c.TryGetValue(cacheKey, out expectedRules)).Returns(true);

            object cacheKeys;

            _cacheMock.Setup(c => c.TryGetValue(cacheKeysKey, out cacheKeys)).Returns(false);

            // Act
            var compiledRules = await _ruleService.GetCompiledByRuleType <TestRule>(RuleType.Action);

            // Assert
            _innerRuleServiceMock.Verify(r => r.GetCompiledByRuleType <TestRule>(ruleType), Times.Never);
            compiledRules.Should().BeSameAs((List <CompiledRule <TestRule> >)expectedRules);
        }