diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj
index acf30b189..2126da70d 100644
--- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj
+++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj
@@ -115,6 +115,7 @@
+
diff --git a/NzbDrone.Core.Test/ProviderTests/DecisionEngineTests/AllowedDownloadSpecificationFixture.cs b/NzbDrone.Core.Test/ProviderTests/DecisionEngineTests/AllowedDownloadSpecificationFixture.cs
index 4b95725d9..c33f6c89c 100644
--- a/NzbDrone.Core.Test/ProviderTests/DecisionEngineTests/AllowedDownloadSpecificationFixture.cs
+++ b/NzbDrone.Core.Test/ProviderTests/DecisionEngineTests/AllowedDownloadSpecificationFixture.cs
@@ -44,6 +44,10 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
Mocker.GetMock()
.Setup(c => c.IsSatisfiedBy(It.IsAny()))
.Returns(false);
+
+ Mocker.GetMock()
+ .Setup(c => c.IsSatisfiedBy(It.IsAny()))
+ .Returns(true);
}
private void WithProfileNotAllowed()
@@ -74,6 +78,13 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
.Returns(true);
}
+ private void WithOverRetention()
+ {
+ Mocker.GetMock()
+ .Setup(c => c.IsSatisfiedBy(It.IsAny()))
+ .Returns(false);
+ }
+
[Test]
public void should_be_allowed_if_all_conditions_are_met()
{
@@ -108,12 +119,20 @@ namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
spec.IsSatisfiedBy(parseResult).Should().BeFalse();
}
+ [Test]
+ public void should_not_be_allowed_if_report_is_over_retention()
+ {
+ WithOverRetention();
+ spec.IsSatisfiedBy(parseResult).Should().BeFalse();
+ }
+
[Test]
public void should_not_be_allowed_if_none_of_conditions_are_met()
{
WithNoDiskUpgrade();
WithNotAcceptableSize();
WithProfileNotAllowed();
+ WithOverRetention();
spec.IsSatisfiedBy(parseResult).Should().BeFalse();
}
diff --git a/NzbDrone.Core.Test/ProviderTests/DecisionEngineTests/RetentionSpecificationFixture.cs b/NzbDrone.Core.Test/ProviderTests/DecisionEngineTests/RetentionSpecificationFixture.cs
new file mode 100644
index 000000000..520f5a084
--- /dev/null
+++ b/NzbDrone.Core.Test/ProviderTests/DecisionEngineTests/RetentionSpecificationFixture.cs
@@ -0,0 +1,93 @@
+// ReSharper disable RedundantUsingDirective
+
+using System.Linq;
+using System;
+using System.Collections.Generic;
+using FizzWare.NBuilder;
+using FluentAssertions;
+using Moq;
+using NUnit.Framework;
+using NzbDrone.Core.Model;
+using NzbDrone.Core.Providers;
+using NzbDrone.Core.Providers.Core;
+using NzbDrone.Core.Providers.DecisionEngine;
+using NzbDrone.Core.Repository;
+using NzbDrone.Core.Test.Framework;
+
+namespace NzbDrone.Core.Test.ProviderTests.DecisionEngineTests
+{
+ [TestFixture]
+ // ReSharper disable InconsistentNaming
+ public class RetentionSpecificationFixture : CoreTest
+ {
+ private RetentionSpecification retentionSpecification;
+
+ private EpisodeParseResult parseResult;
+
+ [SetUp]
+ public void Setup()
+ {
+ retentionSpecification = Mocker.Resolve();
+
+ parseResult = new EpisodeParseResult
+ {
+ Age = 100
+ };
+ }
+
+ private void WithUnlimitedRetention()
+ {
+ Mocker.GetMock().SetupGet(c => c.Retention).Returns(0);
+ }
+
+ private void WithLongRetention()
+ {
+ Mocker.GetMock().SetupGet(c => c.Retention).Returns(1000);
+ }
+
+ private void WithShortRetention()
+ {
+ Mocker.GetMock().SetupGet(c => c.Retention).Returns(10);
+ }
+
+ private void WithEqualRetention()
+ {
+ Mocker.GetMock().SetupGet(c => c.Retention).Returns(100);
+ }
+
+ [Test]
+ public void unlimited_retention_should_return_true()
+ {
+ WithUnlimitedRetention();
+ retentionSpecification.IsSatisfiedBy(parseResult).Should().BeTrue();
+ }
+
+ [Test]
+ public void longer_retention_should_return_true()
+ {
+ WithLongRetention();
+ retentionSpecification.IsSatisfiedBy(parseResult).Should().BeTrue();
+ }
+
+ [Test]
+ public void equal_retention_should_return_true()
+ {
+ WithEqualRetention();
+ retentionSpecification.IsSatisfiedBy(parseResult).Should().BeTrue();
+ }
+
+ [Test]
+ public void shorter_retention_should_return_false()
+ {
+ WithShortRetention();
+ retentionSpecification.IsSatisfiedBy(parseResult).Should().BeFalse();
+ }
+
+ [Test]
+ public void zeroDay_report_should_return_true()
+ {
+ WithUnlimitedRetention();
+ retentionSpecification.IsSatisfiedBy(parseResult).Should().BeTrue();
+ }
+ }
+}
\ No newline at end of file