diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeAllowedSpecificationFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeAllowedSpecificationFixture.cs index c958dc1a6d..af7444da69 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeAllowedSpecificationFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeAllowedSpecificationFixture.cs @@ -206,5 +206,19 @@ public void should_return_true_for_lower_quality_when_upgrading_is_not_allowed() new List()) .Should().BeTrue(); } + + [Test] + public void should_returntrue_when_quality_is_revision_upgrade_for_same_quality() + { + _qualityProfile.UpgradeAllowed = false; + + Subject.IsUpgradeAllowed( + _qualityProfile, + new QualityModel(Quality.DVD, new Revision(1)), + new List { _customFormatOne }, + new QualityModel(Quality.DVD, new Revision(2)), + new List { _customFormatOne }) + .Should().BeTrue(); + } } } diff --git a/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradableSpecification.cs b/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradableSpecification.cs index 7ce091bbbd..79769b4ceb 100644 --- a/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradableSpecification.cs +++ b/src/NzbDrone.Core/DecisionEngine/Specifications/UpgradableSpecification.cs @@ -177,6 +177,12 @@ public bool IsUpgradeAllowed(QualityProfile qualityProfile, QualityModel current var isQualityUpgrade = new QualityModelComparer(qualityProfile).Compare(newQuality, currentQuality) > 0; var isCustomFormatUpgrade = qualityProfile.CalculateCustomFormatScore(newCustomFormats) > qualityProfile.CalculateCustomFormatScore(currentCustomFormats); + if (IsRevisionUpgrade(currentQuality, newQuality)) + { + _logger.Debug("New quality '{0}' is a revision upgrade for '{1}'", newQuality, currentQuality); + return true; + } + if ((isQualityUpgrade || isCustomFormatUpgrade) && qualityProfile.UpgradeAllowed) { _logger.Debug("Quality profile allows upgrading");