/src/NzbDrone.Core.Test/DecisionEngineTests/UpgradeSpecificationFixture.cs

https://github.com/NzbDrone/NzbDrone · C# · 194 lines · 167 code · 27 blank · 0 comment · 0 complexity · 356c312289374b5f41a0aa45cbc05c93 MD5 · raw file

  1. using FluentAssertions;
  2. using NUnit.Framework;
  3. using NzbDrone.Core.Configuration;
  4. using NzbDrone.Core.Profiles.Qualities;
  5. using NzbDrone.Core.Qualities;
  6. using NzbDrone.Core.DecisionEngine.Specifications;
  7. using NzbDrone.Core.Test.Framework;
  8. using NzbDrone.Core.Languages;
  9. using NzbDrone.Core.Profiles.Languages;
  10. using NzbDrone.Core.Test.Languages;
  11. namespace NzbDrone.Core.Test.DecisionEngineTests
  12. {
  13. [TestFixture]
  14. public class UpgradeSpecificationFixture : CoreTest<UpgradableSpecification>
  15. {
  16. public static object[] IsUpgradeTestCases =
  17. {
  18. new object[] { Quality.SDTV, 1, Quality.SDTV, 2, Quality.SDTV, true },
  19. new object[] { Quality.WEBDL720p, 1, Quality.WEBDL720p, 2, Quality.WEBDL720p, true },
  20. new object[] { Quality.SDTV, 1, Quality.SDTV, 1, Quality.SDTV, false },
  21. new object[] { Quality.WEBDL720p, 1, Quality.HDTV720p, 2, Quality.Bluray720p, false },
  22. new object[] { Quality.WEBDL720p, 1, Quality.HDTV720p, 2, Quality.WEBDL720p, false },
  23. new object[] { Quality.WEBDL720p, 1, Quality.WEBDL720p, 1, Quality.WEBDL720p, false },
  24. new object[] { Quality.WEBDL1080p, 1, Quality.WEBDL1080p, 1, Quality.WEBDL1080p, false }
  25. };
  26. public static object[] IsUpgradeTestCasesLanguages =
  27. {
  28. new object[] { Quality.SDTV, 1, Language.English, Quality.SDTV, 2, Language.English, Quality.SDTV, Language.Spanish, true },
  29. new object[] { Quality.SDTV, 1, Language.English, Quality.SDTV, 1, Language.Spanish, Quality.SDTV, Language.Spanish, true },
  30. new object[] { Quality.WEBDL720p, 1, Language.French, Quality.WEBDL720p, 2, Language.English, Quality.WEBDL720p, Language.Spanish, true },
  31. new object[] { Quality.SDTV, 1, Language.English, Quality.SDTV, 1, Language.English, Quality.SDTV, Language.English, false },
  32. new object[] { Quality.WEBDL720p, 1, Language.English, Quality.HDTV720p, 2, Language.Spanish, Quality.Bluray720p, Language.Spanish, false },
  33. new object[] { Quality.WEBDL720p, 1, Language.Spanish, Quality.HDTV720p, 2, Language.French, Quality.WEBDL720p, Language.Spanish, false }
  34. };
  35. private static readonly int NoPreferredWordScore = 0;
  36. private void GivenAutoDownloadPropers(ProperDownloadTypes type)
  37. {
  38. Mocker.GetMock<IConfigService>()
  39. .SetupGet(s => s.DownloadPropersAndRepacks)
  40. .Returns(type);
  41. }
  42. [Test, TestCaseSource(nameof(IsUpgradeTestCases))]
  43. public void IsUpgradeTest(Quality current, int currentVersion, Quality newQuality, int newVersion, Quality cutoff, bool expected)
  44. {
  45. GivenAutoDownloadPropers(ProperDownloadTypes.PreferAndUpgrade);
  46. var profile = new QualityProfile
  47. {
  48. UpgradeAllowed = true,
  49. Items = Qualities.QualityFixture.GetDefaultQualities()
  50. };
  51. var langProfile = new LanguageProfile
  52. {
  53. UpgradeAllowed = true,
  54. Languages = LanguageFixture.GetDefaultLanguages(),
  55. Cutoff = Language.English
  56. };
  57. Subject.IsUpgradable(
  58. profile,
  59. langProfile,
  60. new QualityModel(current, new Revision(version: currentVersion)),
  61. Language.English,
  62. NoPreferredWordScore,
  63. new QualityModel(newQuality, new Revision(version: newVersion)),
  64. Language.English,
  65. NoPreferredWordScore)
  66. .Should().Be(expected);
  67. }
  68. [Test, TestCaseSource("IsUpgradeTestCasesLanguages")]
  69. public void IsUpgradeTestLanguage(Quality current, int currentVersion, Language currentLanguage, Quality newQuality, int newVersion, Language newLanguage, Quality cutoff, Language languageCutoff, bool expected)
  70. {
  71. GivenAutoDownloadPropers(ProperDownloadTypes.PreferAndUpgrade);
  72. var profile = new QualityProfile
  73. {
  74. UpgradeAllowed = true,
  75. Items = Qualities.QualityFixture.GetDefaultQualities(),
  76. Cutoff = cutoff.Id,
  77. };
  78. var langProfile = new LanguageProfile
  79. {
  80. UpgradeAllowed = true,
  81. Languages = LanguageFixture.GetDefaultLanguages(),
  82. Cutoff = languageCutoff
  83. };
  84. Subject.IsUpgradable(
  85. profile,
  86. langProfile,
  87. new QualityModel(current, new Revision(version: currentVersion)),
  88. currentLanguage,
  89. NoPreferredWordScore,
  90. new QualityModel(newQuality, new Revision(version: newVersion)),
  91. newLanguage,
  92. NoPreferredWordScore)
  93. .Should().Be(expected);
  94. }
  95. [Test]
  96. public void should_return_true_if_proper_and_download_propers_is_do_not_download()
  97. {
  98. GivenAutoDownloadPropers(ProperDownloadTypes.DoNotUpgrade);
  99. var profile = new QualityProfile
  100. {
  101. Items = Qualities.QualityFixture.GetDefaultQualities(),
  102. };
  103. var langProfile = new LanguageProfile
  104. {
  105. Languages = LanguageFixture.GetDefaultLanguages(),
  106. Cutoff = Language.English
  107. };
  108. Subject.IsUpgradable(
  109. profile,
  110. langProfile,
  111. new QualityModel(Quality.DVD, new Revision(version: 1)),
  112. Language.English,
  113. NoPreferredWordScore,
  114. new QualityModel(Quality.DVD, new Revision(version: 2)),
  115. Language.English,
  116. NoPreferredWordScore)
  117. .Should().BeTrue();
  118. }
  119. [Test]
  120. public void should_return_false_if_proper_and_autoDownloadPropers_is_do_not_prefer()
  121. {
  122. GivenAutoDownloadPropers(ProperDownloadTypes.DoNotPrefer);
  123. var profile = new QualityProfile
  124. {
  125. Items = Qualities.QualityFixture.GetDefaultQualities(),
  126. };
  127. var langProfile = new LanguageProfile
  128. {
  129. Languages = LanguageFixture.GetDefaultLanguages(),
  130. Cutoff = Language.English
  131. };
  132. Subject.IsUpgradable(
  133. profile,
  134. langProfile,
  135. new QualityModel(Quality.DVD, new Revision(version: 1)),
  136. Language.English,
  137. NoPreferredWordScore,
  138. new QualityModel(Quality.DVD, new Revision(version: 2)),
  139. Language.English,
  140. NoPreferredWordScore)
  141. .Should().BeFalse();
  142. }
  143. [Test]
  144. public void should_return_false_if_release_and_existing_file_are_the_same()
  145. {
  146. var profile = new QualityProfile
  147. {
  148. Items = Qualities.QualityFixture.GetDefaultQualities(),
  149. };
  150. var langProfile = new LanguageProfile
  151. {
  152. Languages = LanguageFixture.GetDefaultLanguages(),
  153. Cutoff = Language.English
  154. };
  155. Subject.IsUpgradable(
  156. profile,
  157. langProfile,
  158. new QualityModel(Quality.HDTV720p, new Revision(version: 1)),
  159. Language.English,
  160. NoPreferredWordScore,
  161. new QualityModel(Quality.HDTV720p, new Revision(version: 1)),
  162. Language.English,
  163. NoPreferredWordScore)
  164. .Should().BeFalse();
  165. }
  166. }
  167. }