public void RuleForcesCancellationWhenContentShouldNeverExpireAndADateIsSet()
        {
            var ruleEvaluator       = new ExpiryRuleEvaluator();
            var publicationTime     = new DateTime(2018, 1, 1);
            var defaultExpiry       = new TimeSpan(30, 0, 0, 0);
            var userSelectedExpiry  = publicationTime.AddDays(10);
            var documentTypeMatcher = new Mock <IDocumentTypeRuleMatcher>();
            var matchedRule         = new Mock <IExpiryRule>();

            documentTypeMatcher.Setup(x => x.MatchRule("example", 0)).Returns(matchedRule.Object);
            var pathMatcher  = new Mock <IPathRuleMatcher>();
            var content      = new Mock <IContent>();
            var documentType = new Mock <IContentType>();

            documentType.Setup(x => x.Alias).Returns("example");
            content.SetupGet(x => x.ContentType).Returns(documentType.Object);
            content.SetupGet(x => x.ExpireDate).Returns(userSelectedExpiry);
            var urlBuilder = new Mock <INodeUrlBuilder>();

            urlBuilder.Setup(x => x.GetNodeUrl(content.Object)).Returns("/example");

            var result = ruleEvaluator.ApplyExpiryRules(publicationTime, defaultExpiry, documentTypeMatcher.Object, pathMatcher.Object, content.Object, urlBuilder.Object);

            Assert.AreEqual(null, result.ExpireDate);
            Assert.IsNull(result.ExpireDateChangedMessage);
            Assert.IsNotNull(result.CancellationMessage);
        }
        public void RuleAppliedForcingNeverExpireInsteadOfDefaultExpiry()
        {
            var      ruleEvaluator       = new ExpiryRuleEvaluator();
            var      publicationTime     = new DateTime(2018, 1, 1);
            var      defaultExpiry       = new TimeSpan(30, 0, 0, 0);
            TimeSpan?ruleExpiry          = null;
            DateTime?userSelectedExpiry  = null;
            var      documentTypeMatcher = new Mock <IDocumentTypeRuleMatcher>();
            var      matchedRule         = new Mock <IExpiryRule>();

            matchedRule.Setup(x => x.MaximumExpiry).Returns(ruleExpiry);
            documentTypeMatcher.Setup(x => x.MatchRule("example", 0)).Returns(matchedRule.Object);
            var pathMatcher  = new Mock <IPathRuleMatcher>();
            var content      = new Mock <IContent>();
            var documentType = new Mock <IContentType>();

            documentType.Setup(x => x.Alias).Returns("example");
            content.SetupGet(x => x.ContentType).Returns(documentType.Object);
            content.SetupGet(x => x.ExpireDate).Returns(userSelectedExpiry);
            var urlBuilder = new Mock <INodeUrlBuilder>();

            urlBuilder.Setup(x => x.GetNodeUrl(content.Object)).Returns("/example");

            var result = ruleEvaluator.ApplyExpiryRules(publicationTime, defaultExpiry, documentTypeMatcher.Object, pathMatcher.Object, content.Object, urlBuilder.Object);

            Assert.IsNull(result.ExpireDate);
            Assert.IsNull(result.ExpireDateChangedMessage);
            Assert.IsNull(result.CancellationMessage);
        }
        public void NoDefaultNoRulesNoChange()
        {
            var ruleEvaluator       = new ExpiryRuleEvaluator();
            var publicationTime     = new DateTime(2018, 1, 1);
            var documentTypeMatcher = new Mock <IDocumentTypeRuleMatcher>();
            var pathMatcher         = new Mock <IPathRuleMatcher>();
            var content             = new Mock <IContent>();

            content.SetupGet(x => x.ContentType).Returns(new Mock <IContentType>().Object);
            var urlBuilder = new Mock <INodeUrlBuilder>();

            urlBuilder.Setup(x => x.GetNodeUrl(content.Object)).Returns("/example");

            var result = ruleEvaluator.ApplyExpiryRules(publicationTime, null, documentTypeMatcher.Object, pathMatcher.Object, content.Object, urlBuilder.Object);

            Assert.IsNull(result.ExpireDate);
            Assert.IsNull(result.ExpireDateChangedMessage);
            Assert.IsNull(result.CancellationMessage);
        }
        public void DefaultAppliedIfNoRulesAndDateIsTooLong()
        {
            var ruleEvaluator       = new ExpiryRuleEvaluator();
            var publicationTime     = new DateTime(2018, 1, 1);
            var defaultExpiry       = new TimeSpan(30, 0, 0, 0);
            var documentTypeMatcher = new Mock <IDocumentTypeRuleMatcher>();
            var pathMatcher         = new Mock <IPathRuleMatcher>();
            var content             = new Mock <IContent>();

            content.SetupGet(x => x.ContentType).Returns(new Mock <IContentType>().Object);
            content.SetupGet(x => x.ExpireDate).Returns(publicationTime.AddDays(60));
            var urlBuilder = new Mock <INodeUrlBuilder>();

            urlBuilder.Setup(x => x.GetNodeUrl(content.Object)).Returns("/example");

            var result = ruleEvaluator.ApplyExpiryRules(publicationTime, defaultExpiry, documentTypeMatcher.Object, pathMatcher.Object, content.Object, urlBuilder.Object);

            Assert.AreEqual(publicationTime.Add(defaultExpiry), result.ExpireDate);
            Assert.IsNotNull(result.ExpireDateChangedMessage);
            Assert.IsNull(result.CancellationMessage);
        }