Fixed: Profiles with upgrades disabled incorrectly allowing upgrades in some cases
Closes #4898
This commit is contained in:
parent
b3d90d903a
commit
210768d7d6
|
@ -22,12 +22,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
new QualityProfile
|
new QualityProfile
|
||||||
{
|
{
|
||||||
Cutoff = Quality.Bluray1080p.Id,
|
Cutoff = Quality.Bluray1080p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = true
|
||||||
},
|
},
|
||||||
new LanguageProfile
|
new LanguageProfile
|
||||||
{
|
{
|
||||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||||
Cutoff = Language.English
|
Cutoff = Language.English,
|
||||||
|
UpgradeAllowed = true
|
||||||
},
|
},
|
||||||
new QualityModel(Quality.DVD, new Revision(version: 2)),
|
new QualityModel(Quality.DVD, new Revision(version: 2)),
|
||||||
Language.English,
|
Language.English,
|
||||||
|
@ -41,12 +43,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
new QualityProfile
|
new QualityProfile
|
||||||
{
|
{
|
||||||
Cutoff = Quality.HDTV720p.Id,
|
Cutoff = Quality.HDTV720p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = true
|
||||||
},
|
},
|
||||||
new LanguageProfile
|
new LanguageProfile
|
||||||
{
|
{
|
||||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||||
Cutoff = Language.English
|
Cutoff = Language.English,
|
||||||
|
UpgradeAllowed = true
|
||||||
},
|
},
|
||||||
new QualityModel(Quality.HDTV720p, new Revision(version: 2)),
|
new QualityModel(Quality.HDTV720p, new Revision(version: 2)),
|
||||||
Language.English,
|
Language.English,
|
||||||
|
@ -60,12 +64,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
new QualityProfile
|
new QualityProfile
|
||||||
{
|
{
|
||||||
Cutoff = Quality.HDTV720p.Id,
|
Cutoff = Quality.HDTV720p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = true
|
||||||
},
|
},
|
||||||
new LanguageProfile
|
new LanguageProfile
|
||||||
{
|
{
|
||||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||||
Cutoff = Language.English
|
Cutoff = Language.English,
|
||||||
|
UpgradeAllowed = true
|
||||||
},
|
},
|
||||||
new QualityModel(Quality.Bluray1080p, new Revision(version: 2)),
|
new QualityModel(Quality.Bluray1080p, new Revision(version: 2)),
|
||||||
Language.English,
|
Language.English,
|
||||||
|
@ -79,12 +85,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
new QualityProfile
|
new QualityProfile
|
||||||
{
|
{
|
||||||
Cutoff = Quality.HDTV720p.Id,
|
Cutoff = Quality.HDTV720p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = true
|
||||||
},
|
},
|
||||||
new LanguageProfile
|
new LanguageProfile
|
||||||
{
|
{
|
||||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||||
Cutoff = Language.English
|
Cutoff = Language.English,
|
||||||
|
UpgradeAllowed = true
|
||||||
},
|
},
|
||||||
new QualityModel(Quality.HDTV720p, new Revision(version: 1)),
|
new QualityModel(Quality.HDTV720p, new Revision(version: 1)),
|
||||||
Language.English,
|
Language.English,
|
||||||
|
@ -100,12 +108,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
new QualityProfile
|
new QualityProfile
|
||||||
{
|
{
|
||||||
Cutoff = Quality.HDTV720p.Id,
|
Cutoff = Quality.HDTV720p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities()
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = true
|
||||||
},
|
},
|
||||||
new LanguageProfile
|
new LanguageProfile
|
||||||
{
|
{
|
||||||
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
Languages = LanguageFixture.GetDefaultLanguages(Language.English),
|
||||||
Cutoff = Language.English
|
Cutoff = Language.English,
|
||||||
|
UpgradeAllowed = true
|
||||||
},
|
},
|
||||||
new QualityModel(Quality.HDTV720p, new Revision(version: 2)),
|
new QualityModel(Quality.HDTV720p, new Revision(version: 2)),
|
||||||
Language.English,
|
Language.English,
|
||||||
|
@ -121,13 +131,15 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
{
|
{
|
||||||
Cutoff = Quality.HDTV720p.Id,
|
Cutoff = Quality.HDTV720p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = true
|
||||||
};
|
};
|
||||||
|
|
||||||
LanguageProfile _langProfile = new LanguageProfile
|
LanguageProfile _langProfile = new LanguageProfile
|
||||||
{
|
{
|
||||||
Cutoff = Language.Spanish,
|
Cutoff = Language.Spanish,
|
||||||
Languages = LanguageFixture.GetDefaultLanguages()
|
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||||
};
|
UpgradeAllowed = true
|
||||||
|
};
|
||||||
|
|
||||||
Subject.CutoffNotMet(_profile,
|
Subject.CutoffNotMet(_profile,
|
||||||
_langProfile,
|
_langProfile,
|
||||||
|
@ -145,12 +157,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
{
|
{
|
||||||
Cutoff = Quality.HDTV720p.Id,
|
Cutoff = Quality.HDTV720p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = true
|
||||||
};
|
};
|
||||||
|
|
||||||
LanguageProfile _langProfile = new LanguageProfile
|
LanguageProfile _langProfile = new LanguageProfile
|
||||||
{
|
{
|
||||||
Cutoff = Language.Spanish,
|
Cutoff = Language.Spanish,
|
||||||
Languages = LanguageFixture.GetDefaultLanguages()
|
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||||
|
UpgradeAllowed = true
|
||||||
};
|
};
|
||||||
|
|
||||||
Subject.CutoffNotMet(
|
Subject.CutoffNotMet(
|
||||||
|
@ -170,12 +184,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
{
|
{
|
||||||
Cutoff = Quality.HDTV720p.Id,
|
Cutoff = Quality.HDTV720p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = true
|
||||||
};
|
};
|
||||||
|
|
||||||
LanguageProfile _langProfile = new LanguageProfile
|
LanguageProfile _langProfile = new LanguageProfile
|
||||||
{
|
{
|
||||||
Cutoff = Language.Spanish,
|
Cutoff = Language.Spanish,
|
||||||
Languages = LanguageFixture.GetDefaultLanguages()
|
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||||
|
UpgradeAllowed = true
|
||||||
};
|
};
|
||||||
|
|
||||||
Subject.CutoffNotMet(
|
Subject.CutoffNotMet(
|
||||||
|
@ -195,12 +211,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
{
|
{
|
||||||
Cutoff = Quality.HDTV720p.Id,
|
Cutoff = Quality.HDTV720p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = true
|
||||||
};
|
};
|
||||||
|
|
||||||
LanguageProfile _langProfile = new LanguageProfile
|
LanguageProfile _langProfile = new LanguageProfile
|
||||||
{
|
{
|
||||||
Cutoff = Language.Spanish,
|
Cutoff = Language.Spanish,
|
||||||
Languages = LanguageFixture.GetDefaultLanguages()
|
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||||
|
UpgradeAllowed = true
|
||||||
};
|
};
|
||||||
|
|
||||||
Subject.CutoffNotMet(
|
Subject.CutoffNotMet(
|
||||||
|
@ -220,12 +238,14 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
{
|
{
|
||||||
Cutoff = Quality.HDTV720p.Id,
|
Cutoff = Quality.HDTV720p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = true
|
||||||
};
|
};
|
||||||
|
|
||||||
LanguageProfile _langProfile = new LanguageProfile
|
LanguageProfile _langProfile = new LanguageProfile
|
||||||
{
|
{
|
||||||
Cutoff = Language.Spanish,
|
Cutoff = Language.Spanish,
|
||||||
Languages = LanguageFixture.GetDefaultLanguages()
|
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||||
|
UpgradeAllowed = true
|
||||||
};
|
};
|
||||||
|
|
||||||
Subject.CutoffNotMet(
|
Subject.CutoffNotMet(
|
||||||
|
@ -243,13 +263,15 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
{
|
{
|
||||||
Cutoff = Quality.HDTV720p.Id,
|
Cutoff = Quality.HDTV720p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
};
|
UpgradeAllowed = true
|
||||||
|
};
|
||||||
|
|
||||||
LanguageProfile _langProfile = new LanguageProfile
|
LanguageProfile _langProfile = new LanguageProfile
|
||||||
{
|
{
|
||||||
Cutoff = Language.Spanish,
|
Cutoff = Language.Spanish,
|
||||||
Languages = LanguageFixture.GetDefaultLanguages()
|
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||||
};
|
UpgradeAllowed = true
|
||||||
|
};
|
||||||
|
|
||||||
Subject.CutoffNotMet(
|
Subject.CutoffNotMet(
|
||||||
_profile,
|
_profile,
|
||||||
|
@ -268,13 +290,15 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
{
|
{
|
||||||
Cutoff = Quality.HDTV1080p.Id,
|
Cutoff = Quality.HDTV1080p.Id,
|
||||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
};
|
UpgradeAllowed = true
|
||||||
|
};
|
||||||
|
|
||||||
LanguageProfile _langProfile = new LanguageProfile
|
LanguageProfile _langProfile = new LanguageProfile
|
||||||
{
|
{
|
||||||
Cutoff = Language.English,
|
Cutoff = Language.English,
|
||||||
Languages = LanguageFixture.GetDefaultLanguages()
|
Languages = LanguageFixture.GetDefaultLanguages(),
|
||||||
};
|
UpgradeAllowed = true
|
||||||
|
};
|
||||||
|
|
||||||
Subject.CutoffNotMet(
|
Subject.CutoffNotMet(
|
||||||
_profile,
|
_profile,
|
||||||
|
@ -285,5 +309,59 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
||||||
new QualityModel(Quality.WEBDL1080p, new Revision(version: 2)),
|
new QualityModel(Quality.WEBDL1080p, new Revision(version: 2)),
|
||||||
NoPreferredWordScore).Should().BeTrue();
|
NoPreferredWordScore).Should().BeTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_false_if_language_profile_does_not_allow_upgrades_but_cutoff_is_set_to_highest_language_and_quality_cutoff_is_met()
|
||||||
|
{
|
||||||
|
QualityProfile _profile = new QualityProfile
|
||||||
|
{
|
||||||
|
Cutoff = Quality.WEBDL1080p.Id,
|
||||||
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = true
|
||||||
|
};
|
||||||
|
|
||||||
|
LanguageProfile _langProfile = new LanguageProfile
|
||||||
|
{
|
||||||
|
Cutoff = Language.Arabic,
|
||||||
|
Languages = LanguageFixture.GetDefaultLanguages(Language.Spanish, Language.English, Language.Arabic),
|
||||||
|
UpgradeAllowed = false
|
||||||
|
};
|
||||||
|
|
||||||
|
Subject.CutoffNotMet(
|
||||||
|
_profile,
|
||||||
|
_langProfile,
|
||||||
|
new QualityModel(Quality.WEBDL1080p),
|
||||||
|
Language.English,
|
||||||
|
NoPreferredWordScore,
|
||||||
|
new QualityModel(Quality.Bluray1080p),
|
||||||
|
NoPreferredWordScore).Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_false_if_quality_profile_does_not_allow_upgrades_but_cutoff_is_set_to_highest_quality_and_language_cutoff_is_met()
|
||||||
|
{
|
||||||
|
QualityProfile _profile = new QualityProfile
|
||||||
|
{
|
||||||
|
Cutoff = Quality.WEBDL1080p.Id,
|
||||||
|
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||||
|
UpgradeAllowed = false
|
||||||
|
};
|
||||||
|
|
||||||
|
LanguageProfile _langProfile = new LanguageProfile
|
||||||
|
{
|
||||||
|
Cutoff = Language.English,
|
||||||
|
Languages = LanguageFixture.GetDefaultLanguages(Language.Spanish, Language.English, Language.Arabic),
|
||||||
|
UpgradeAllowed = true
|
||||||
|
};
|
||||||
|
|
||||||
|
Subject.CutoffNotMet(
|
||||||
|
_profile,
|
||||||
|
_langProfile,
|
||||||
|
new QualityModel(Quality.WEBDL1080p),
|
||||||
|
Language.English,
|
||||||
|
NoPreferredWordScore,
|
||||||
|
new QualityModel(Quality.Bluray1080p),
|
||||||
|
NoPreferredWordScore).Should().BeFalse();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,8 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||||
|
|
||||||
public bool QualityCutoffNotMet(QualityProfile profile, QualityModel currentQuality, QualityModel newQuality = null)
|
public bool QualityCutoffNotMet(QualityProfile profile, QualityModel currentQuality, QualityModel newQuality = null)
|
||||||
{
|
{
|
||||||
var cutoffCompare = new QualityModelComparer(profile).Compare(currentQuality.Quality.Id, profile.Cutoff);
|
var cutoff = profile.UpgradeAllowed ? profile.Cutoff : profile.FirststAllowedQuality().Id;
|
||||||
|
var cutoffCompare = new QualityModelComparer(profile).Compare(currentQuality.Quality.Id, cutoff);
|
||||||
|
|
||||||
if (cutoffCompare < 0)
|
if (cutoffCompare < 0)
|
||||||
{
|
{
|
||||||
|
@ -115,7 +116,11 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||||
|
|
||||||
public bool LanguageCutoffNotMet(LanguageProfile languageProfile, Language currentLanguage)
|
public bool LanguageCutoffNotMet(LanguageProfile languageProfile, Language currentLanguage)
|
||||||
{
|
{
|
||||||
var languageCompare = new LanguageComparer(languageProfile).Compare(currentLanguage, languageProfile.Cutoff);
|
var cutoff = languageProfile.UpgradeAllowed
|
||||||
|
? languageProfile.Cutoff
|
||||||
|
: languageProfile.FirstAllowedLanguage();
|
||||||
|
|
||||||
|
var languageCompare = new LanguageComparer(languageProfile).Compare(currentLanguage, cutoff);
|
||||||
|
|
||||||
return languageCompare < 0;
|
return languageCompare < 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,11 @@ namespace NzbDrone.Core.Profiles.Languages
|
||||||
public bool UpgradeAllowed { get; set; }
|
public bool UpgradeAllowed { get; set; }
|
||||||
public Language Cutoff { get; set; }
|
public Language Cutoff { get; set; }
|
||||||
|
|
||||||
|
public Language FirstAllowedLanguage()
|
||||||
|
{
|
||||||
|
return Languages.First(q => q.Allowed).Language;
|
||||||
|
}
|
||||||
|
|
||||||
public Language LastAllowedLanguage()
|
public Language LastAllowedLanguage()
|
||||||
{
|
{
|
||||||
return Languages.Last(q => q.Allowed).Language;
|
return Languages.Last(q => q.Allowed).Language;
|
||||||
|
|
|
@ -12,6 +12,20 @@ namespace NzbDrone.Core.Profiles.Qualities
|
||||||
public int Cutoff { get; set; }
|
public int Cutoff { get; set; }
|
||||||
public List<QualityProfileQualityItem> Items { get; set; }
|
public List<QualityProfileQualityItem> Items { get; set; }
|
||||||
|
|
||||||
|
public Quality FirststAllowedQuality()
|
||||||
|
{
|
||||||
|
var firstAllowed = Items.First(q => q.Allowed);
|
||||||
|
|
||||||
|
if (firstAllowed.Quality != null)
|
||||||
|
{
|
||||||
|
return firstAllowed.Quality;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returning any item from the group will work,
|
||||||
|
// returning the first because it's the true first quality.
|
||||||
|
return firstAllowed.Items.First().Quality;
|
||||||
|
}
|
||||||
|
|
||||||
public Quality LastAllowedQuality()
|
public Quality LastAllowedQuality()
|
||||||
{
|
{
|
||||||
var lastAllowed = Items.Last(q => q.Allowed);
|
var lastAllowed = Items.Last(q => q.Allowed);
|
||||||
|
|
Loading…
Reference in New Issue