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

https://github.com/NzbDrone/NzbDrone · C# · 153 lines · 128 code · 25 blank · 0 comment · 0 complexity · fda63444bc4fe76cbc2fcd8c473ffccd MD5 · raw file

  1. using System.Collections.Generic;
  2. using FizzWare.NBuilder;
  3. using FluentAssertions;
  4. using NUnit.Framework;
  5. using NzbDrone.Core.DecisionEngine.Specifications.RssSync;
  6. using NzbDrone.Core.IndexerSearch.Definitions;
  7. using NzbDrone.Core.Parser.Model;
  8. using NzbDrone.Core.Test.Framework;
  9. using NzbDrone.Core.Tv;
  10. namespace NzbDrone.Core.Test.DecisionEngineTests
  11. {
  12. [TestFixture]
  13. public class MonitoredEpisodeSpecificationFixture : CoreTest<MonitoredEpisodeSpecification>
  14. {
  15. private MonitoredEpisodeSpecification _monitoredEpisodeSpecification;
  16. private RemoteEpisode _parseResultMulti;
  17. private RemoteEpisode _parseResultSingle;
  18. private Series _fakeSeries;
  19. private Episode _firstEpisode;
  20. private Episode _secondEpisode;
  21. [SetUp]
  22. public void Setup()
  23. {
  24. _monitoredEpisodeSpecification = Mocker.Resolve<MonitoredEpisodeSpecification>();
  25. _fakeSeries = Builder<Series>.CreateNew()
  26. .With(c => c.Monitored = true)
  27. .Build();
  28. _firstEpisode = new Episode { Monitored = true };
  29. _secondEpisode = new Episode { Monitored = true };
  30. var singleEpisodeList = new List<Episode> { _firstEpisode };
  31. var doubleEpisodeList = new List<Episode> { _firstEpisode, _secondEpisode };
  32. _parseResultMulti = new RemoteEpisode
  33. {
  34. Series = _fakeSeries,
  35. Episodes = doubleEpisodeList
  36. };
  37. _parseResultSingle = new RemoteEpisode
  38. {
  39. Series = _fakeSeries,
  40. Episodes = singleEpisodeList
  41. };
  42. }
  43. private void WithFirstEpisodeUnmonitored()
  44. {
  45. _firstEpisode.Monitored = false;
  46. }
  47. private void WithSecondEpisodeUnmonitored()
  48. {
  49. _secondEpisode.Monitored = false;
  50. }
  51. [Test]
  52. public void setup_should_return_monitored_episode_should_return_true()
  53. {
  54. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeTrue();
  55. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeTrue();
  56. }
  57. [Test]
  58. public void not_monitored_series_should_be_skipped()
  59. {
  60. _fakeSeries.Monitored = false;
  61. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
  62. }
  63. [Test]
  64. public void only_episode_not_monitored_should_return_false()
  65. {
  66. WithFirstEpisodeUnmonitored();
  67. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultSingle, null).Accepted.Should().BeFalse();
  68. }
  69. [Test]
  70. public void both_episodes_not_monitored_should_return_false()
  71. {
  72. WithFirstEpisodeUnmonitored();
  73. WithSecondEpisodeUnmonitored();
  74. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
  75. }
  76. [Test]
  77. public void only_first_episode_not_monitored_should_return_false()
  78. {
  79. WithFirstEpisodeUnmonitored();
  80. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
  81. }
  82. [Test]
  83. public void only_second_episode_not_monitored_should_return_false()
  84. {
  85. WithSecondEpisodeUnmonitored();
  86. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
  87. }
  88. [Test]
  89. public void should_return_true_for_single_episode_search()
  90. {
  91. _fakeSeries.Monitored = false;
  92. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultSingle, new SingleEpisodeSearchCriteria()).Accepted.Should().BeTrue();
  93. }
  94. [Test]
  95. public void should_return_true_if_episode_is_monitored_for_season_search()
  96. {
  97. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultSingle, new SeasonSearchCriteria()).Accepted.Should().BeTrue();
  98. }
  99. [Test]
  100. public void should_return_false_if_episode_is_not_monitored_for_season_search()
  101. {
  102. WithFirstEpisodeUnmonitored();
  103. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultSingle, new SeasonSearchCriteria { MonitoredEpisodesOnly = true}).Accepted.Should().BeFalse();
  104. }
  105. [Test]
  106. public void should_return_true_if_episode_is_not_monitored_and_monitoredEpisodesOnly_flag_is_false()
  107. {
  108. WithFirstEpisodeUnmonitored();
  109. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultSingle, new SingleEpisodeSearchCriteria { MonitoredEpisodesOnly = false }).Accepted.Should().BeTrue();
  110. }
  111. [Test]
  112. public void should_return_false_if_episode_is_not_monitored_and_monitoredEpisodesOnly_flag_is_true()
  113. {
  114. WithFirstEpisodeUnmonitored();
  115. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultSingle, new SingleEpisodeSearchCriteria{ MonitoredEpisodesOnly = true}).Accepted.Should().BeFalse();
  116. }
  117. [Test]
  118. public void should_return_false_if_all_episodes_are_not_monitored_for_season_pack_release()
  119. {
  120. WithSecondEpisodeUnmonitored();
  121. _parseResultMulti.ParsedEpisodeInfo = new ParsedEpisodeInfo
  122. {
  123. FullSeason = true
  124. };
  125. _monitoredEpisodeSpecification.IsSatisfiedBy(_parseResultMulti, null).Accepted.Should().BeFalse();
  126. }
  127. }
  128. }