/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/Aggregation/Aggregators/AggregateQualityFixture.cs

https://github.com/NzbDrone/NzbDrone · C# · 174 lines · 134 code · 40 blank · 0 comment · 0 complexity · f11721aef5fd32e82324991bc64461e3 MD5 · raw file

  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using FluentAssertions;
  4. using Moq;
  5. using NUnit.Framework;
  6. using NzbDrone.Core.Download;
  7. using NzbDrone.Core.MediaFiles.EpisodeImport.Aggregation.Aggregators;
  8. using NzbDrone.Core.MediaFiles.EpisodeImport.Aggregation.Aggregators.Augmenters.Quality;
  9. using NzbDrone.Core.Parser.Model;
  10. using NzbDrone.Core.Qualities;
  11. using NzbDrone.Core.Test.Framework;
  12. namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport.Aggregation.Aggregators
  13. {
  14. [TestFixture]
  15. public class AggregateQualityFixture : CoreTest<AggregateQuality>
  16. {
  17. private Mock<IAugmentQuality> _mediaInfoAugmenter;
  18. private Mock<IAugmentQuality> _fileExtensionAugmenter;
  19. private Mock<IAugmentQuality> _nameAugmenter;
  20. private Mock<IAugmentQuality> _releaseNameAugmenter;
  21. [SetUp]
  22. public void Setup()
  23. {
  24. _mediaInfoAugmenter = new Mock<IAugmentQuality>();
  25. _fileExtensionAugmenter = new Mock<IAugmentQuality>();
  26. _nameAugmenter = new Mock<IAugmentQuality>();
  27. _releaseNameAugmenter = new Mock<IAugmentQuality>();
  28. _fileExtensionAugmenter.SetupGet(s => s.Order).Returns(1);
  29. _nameAugmenter.SetupGet(s => s.Order).Returns(2);
  30. _mediaInfoAugmenter.SetupGet(s => s.Order).Returns(4);
  31. _releaseNameAugmenter.SetupGet(s => s.Order).Returns(5);
  32. _mediaInfoAugmenter.Setup(s => s.AugmentQuality(It.IsAny<LocalEpisode>(), It.IsAny<DownloadClientItem>()))
  33. .Returns(AugmentQualityResult.ResolutionOnly(1080, Confidence.MediaInfo));
  34. _fileExtensionAugmenter.Setup(s => s.AugmentQuality(It.IsAny<LocalEpisode>(), It.IsAny<DownloadClientItem>()))
  35. .Returns(new AugmentQualityResult(QualitySource.Television, Confidence.Fallback, 720, Confidence.Fallback, new Revision(), Confidence.Fallback));
  36. _nameAugmenter.Setup(s => s.AugmentQuality(It.IsAny<LocalEpisode>(), It.IsAny<DownloadClientItem>()))
  37. .Returns(new AugmentQualityResult(QualitySource.Television, Confidence.Default, 480, Confidence.Default, new Revision(), Confidence.Default));
  38. _releaseNameAugmenter.Setup(s => s.AugmentQuality(It.IsAny<LocalEpisode>(), It.IsAny<DownloadClientItem>()))
  39. .Returns(AugmentQualityResult.SourceOnly(QualitySource.Web, Confidence.MediaInfo));
  40. }
  41. private void GivenAugmenters(params Mock<IAugmentQuality>[] mocks)
  42. {
  43. Mocker.SetConstant<IEnumerable<IAugmentQuality>>(mocks.Select(c => c.Object));
  44. }
  45. [Test]
  46. public void should_return_HDTV720_from_extension_when_other_augments_are_null()
  47. {
  48. var nullMock = new Mock<IAugmentQuality>();
  49. nullMock.Setup(s => s.AugmentQuality(It.IsAny<LocalEpisode>(), It.IsAny<DownloadClientItem>()))
  50. .Returns<LocalEpisode, DownloadClientItem>((l, d) => null);
  51. GivenAugmenters(_fileExtensionAugmenter, nullMock);
  52. var result = Subject.Aggregate(new LocalEpisode(), null);
  53. result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Extension);
  54. result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.Extension);
  55. result.Quality.Quality.Should().Be(Quality.HDTV720p);
  56. }
  57. [Test]
  58. public void should_return_SDTV_when_HDTV720_came_from_extension()
  59. {
  60. GivenAugmenters(_fileExtensionAugmenter, _nameAugmenter);
  61. var result = Subject.Aggregate(new LocalEpisode(), null);
  62. result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Name);
  63. result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.Name);
  64. result.Quality.Quality.Should().Be(Quality.SDTV);
  65. }
  66. [Test]
  67. public void should_return_HDTV1080p_when_HDTV720_came_from_extension_and_mediainfo_indicates_1080()
  68. {
  69. GivenAugmenters(_fileExtensionAugmenter, _mediaInfoAugmenter);
  70. var result = Subject.Aggregate(new LocalEpisode(), null);
  71. result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Extension);
  72. result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.MediaInfo);
  73. result.Quality.Quality.Should().Be(Quality.HDTV1080p);
  74. }
  75. [Test]
  76. public void should_return_HDTV1080p_when_SDTV_came_from_name_and_mediainfo_indicates_1080()
  77. {
  78. GivenAugmenters(_nameAugmenter, _mediaInfoAugmenter);
  79. var result = Subject.Aggregate(new LocalEpisode(), null);
  80. result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Name);
  81. result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.MediaInfo);
  82. result.Quality.Quality.Should().Be(Quality.HDTV1080p);
  83. }
  84. [Test]
  85. public void should_return_WEBDL480p_when_file_name_has_HDTV480p_but_release_name_indicates_webdl_source()
  86. {
  87. GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
  88. var result = Subject.Aggregate(new LocalEpisode(), new DownloadClientItem());
  89. result.Quality.SourceDetectionSource.Should().Be(QualityDetectionSource.Name);
  90. result.Quality.ResolutionDetectionSource.Should().Be(QualityDetectionSource.Name);
  91. result.Quality.Quality.Should().Be(Quality.WEBDL480p);
  92. }
  93. [Test]
  94. public void should_return_version_1_when_no_version_specified()
  95. {
  96. GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
  97. var result = Subject.Aggregate(new LocalEpisode(), new DownloadClientItem());
  98. result.Quality.Revision.Version.Should().Be(1);
  99. result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Unknown);
  100. }
  101. [Test]
  102. public void should_return_version_2_when_name_indicates_proper()
  103. {
  104. _nameAugmenter.Setup(s => s.AugmentQuality(It.IsAny<LocalEpisode>(), It.IsAny<DownloadClientItem>()))
  105. .Returns(new AugmentQualityResult(QualitySource.Television, Confidence.Default, 480, Confidence.Default, new Revision(2), Confidence.Tag));
  106. GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
  107. var result = Subject.Aggregate(new LocalEpisode(), new DownloadClientItem());
  108. result.Quality.Revision.Version.Should().Be(2);
  109. result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Name);
  110. }
  111. [Test]
  112. public void should_return_version_0_when_file_name_indicates_v0()
  113. {
  114. _nameAugmenter.Setup(s => s.AugmentQuality(It.IsAny<LocalEpisode>(), It.IsAny<DownloadClientItem>()))
  115. .Returns(new AugmentQualityResult(QualitySource.Television, Confidence.Default, 480, Confidence.Default, new Revision(0), Confidence.Tag));
  116. GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
  117. var result = Subject.Aggregate(new LocalEpisode(), new DownloadClientItem());
  118. result.Quality.Revision.Version.Should().Be(0);
  119. result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Name);
  120. }
  121. [Test]
  122. public void should_return_version_2_when_file_name_indicates_v0_and_release_name_indicates_v2()
  123. {
  124. _nameAugmenter.Setup(s => s.AugmentQuality(It.IsAny<LocalEpisode>(), It.IsAny<DownloadClientItem>()))
  125. .Returns(new AugmentQualityResult(QualitySource.Television, Confidence.Default, 480, Confidence.Default, new Revision(0), Confidence.Tag));
  126. _releaseNameAugmenter.Setup(s => s.AugmentQuality(It.IsAny<LocalEpisode>(), It.IsAny<DownloadClientItem>()))
  127. .Returns(new AugmentQualityResult(QualitySource.Television, Confidence.Default, 480, Confidence.Default, new Revision(2), Confidence.Tag));
  128. GivenAugmenters(_nameAugmenter, _releaseNameAugmenter);
  129. var result = Subject.Aggregate(new LocalEpisode(), new DownloadClientItem());
  130. result.Quality.Revision.Version.Should().Be(2);
  131. result.Quality.RevisionDetectionSource.Should().Be(QualityDetectionSource.Name);
  132. }
  133. }
  134. }