/src/NzbDrone.Core.Test/TvTests/EpisodeRepositoryTests/EpisodesWithoutFilesFixture.cs

https://github.com/NzbDrone/NzbDrone · C# · 167 lines · 137 code · 30 blank · 0 comment · 9 complexity · 954346e863fb4c519790972b10884196 MD5 · raw file

  1. using System;
  2. using System.Linq;
  3. using FizzWare.NBuilder;
  4. using FluentAssertions;
  5. using NUnit.Framework;
  6. using NzbDrone.Core.Datastore;
  7. using NzbDrone.Core.Test.Framework;
  8. using NzbDrone.Core.Tv;
  9. namespace NzbDrone.Core.Test.TvTests.EpisodeRepositoryTests
  10. {
  11. [TestFixture]
  12. public class EpisodesWithoutFilesFixture : DbTest<EpisodeRepository, Episode>
  13. {
  14. private Series _monitoredSeries;
  15. private Series _unmonitoredSeries;
  16. private PagingSpec<Episode> _pagingSpec;
  17. [SetUp]
  18. public void Setup()
  19. {
  20. _monitoredSeries = Builder<Series>.CreateNew()
  21. .With(s => s.Id = 0)
  22. .With(s => s.TvRageId = RandomNumber)
  23. .With(s => s.Runtime = 30)
  24. .With(s => s.Monitored = true)
  25. .With(s => s.TitleSlug = "Title3")
  26. .Build();
  27. _unmonitoredSeries = Builder<Series>.CreateNew()
  28. .With(s => s.Id = 0)
  29. .With(s => s.TvdbId = RandomNumber)
  30. .With(s => s.Runtime = 30)
  31. .With(s => s.Monitored = false)
  32. .With(s => s.TitleSlug = "Title2")
  33. .Build();
  34. _monitoredSeries.Id = Db.Insert(_monitoredSeries).Id;
  35. _unmonitoredSeries.Id = Db.Insert(_unmonitoredSeries).Id;
  36. _pagingSpec = new PagingSpec<Episode>
  37. {
  38. Page = 1,
  39. PageSize = 10,
  40. SortKey = "AirDate",
  41. SortDirection = SortDirection.Ascending
  42. };
  43. var monitoredSeriesEpisodes = Builder<Episode>.CreateListOfSize(3)
  44. .All()
  45. .With(e => e.Id = 0)
  46. .With(e => e.SeriesId = _monitoredSeries.Id)
  47. .With(e => e.EpisodeFileId = 0)
  48. .With(e => e.AirDateUtc = DateTime.Now.AddDays(-5))
  49. .With(e => e.Monitored = true)
  50. .TheFirst(1)
  51. .With(e => e.Monitored = false)
  52. .TheLast(1)
  53. .With(e => e.SeasonNumber = 0)
  54. .Build();
  55. var unmonitoredSeriesEpisodes = Builder<Episode>.CreateListOfSize(3)
  56. .All()
  57. .With(e => e.Id = 0)
  58. .With(e => e.SeriesId = _unmonitoredSeries.Id)
  59. .With(e => e.EpisodeFileId = 0)
  60. .With(e => e.AirDateUtc = DateTime.Now.AddDays(-5))
  61. .With(e => e.Monitored = true)
  62. .TheFirst(1)
  63. .With(e => e.Monitored = false)
  64. .TheLast(1)
  65. .With(e => e.SeasonNumber = 0)
  66. .Build();
  67. var unairedEpisodes = Builder<Episode>.CreateListOfSize(1)
  68. .All()
  69. .With(e => e.Id = 0)
  70. .With(e => e.SeriesId = _monitoredSeries.Id)
  71. .With(e => e.EpisodeFileId = 0)
  72. .With(e => e.AirDateUtc = DateTime.Now.AddDays(5))
  73. .With(e => e.Monitored = true)
  74. .Build();
  75. Db.InsertMany(monitoredSeriesEpisodes);
  76. Db.InsertMany(unmonitoredSeriesEpisodes);
  77. Db.InsertMany(unairedEpisodes);
  78. }
  79. private void GivenMonitoredFilterExpression()
  80. {
  81. _pagingSpec.FilterExpressions.Add(e => e.Monitored == true && e.Series.Monitored == true);
  82. }
  83. private void GivenUnmonitoredFilterExpression()
  84. {
  85. _pagingSpec.FilterExpressions.Add(e => e.Monitored == false || e.Series.Monitored == false);
  86. }
  87. [Test]
  88. public void should_get_monitored_episodes()
  89. {
  90. GivenMonitoredFilterExpression();
  91. var episodes = Subject.EpisodesWithoutFiles(_pagingSpec, false);
  92. episodes.Records.Should().HaveCount(1);
  93. }
  94. [Test]
  95. [Ignore("Specials not implemented")]
  96. public void should_get_episode_including_specials()
  97. {
  98. var episodes = Subject.EpisodesWithoutFiles(_pagingSpec, true);
  99. episodes.Records.Should().HaveCount(2);
  100. }
  101. [Test]
  102. public void should_not_include_unmonitored_episodes()
  103. {
  104. GivenMonitoredFilterExpression();
  105. var episodes = Subject.EpisodesWithoutFiles(_pagingSpec, false);
  106. episodes.Records.Should().NotContain(e => e.Monitored == false);
  107. }
  108. [Test]
  109. public void should_not_contain_unmonitored_series()
  110. {
  111. GivenMonitoredFilterExpression();
  112. var episodes = Subject.EpisodesWithoutFiles(_pagingSpec, false);
  113. episodes.Records.Should().NotContain(e => e.SeriesId == _unmonitoredSeries.Id);
  114. }
  115. [Test]
  116. public void should_not_return_unaired()
  117. {
  118. var episodes = Subject.EpisodesWithoutFiles(_pagingSpec, false);
  119. episodes.TotalRecords.Should().Be(4);
  120. }
  121. [Test]
  122. public void should_not_return_episodes_on_air()
  123. {
  124. var onAirEpisode = Builder<Episode>.CreateNew()
  125. .With(e => e.Id = 0)
  126. .With(e => e.SeriesId = _monitoredSeries.Id)
  127. .With(e => e.EpisodeFileId = 0)
  128. .With(e => e.AirDateUtc = DateTime.Now.AddMinutes(-15))
  129. .With(e => e.Monitored = true)
  130. .Build();
  131. Db.Insert(onAirEpisode);
  132. var episodes = Subject.EpisodesWithoutFiles(_pagingSpec, false);
  133. episodes.TotalRecords.Should().Be(4);
  134. episodes.Records.Where(e => e.Id == onAirEpisode.Id).Should().BeEmpty();
  135. }
  136. }
  137. }