mirror of
https://github.com/Readarr/Readarr.git
synced 2026-04-18 21:34:28 -04:00
Merge branch 'season-ignore'
Conflicts: NzbDrone.Core.Test/NzbDrone.Core.Test.csproj NzbDrone.Core/NzbDrone.Core.csproj
This commit is contained in:
@@ -26,7 +26,7 @@ namespace NzbDrone.Core.Test.JobTests
|
||||
Mocker.GetMock<EpisodeProvider>()
|
||||
.Setup(c => c.GetSeasons(1)).Returns(seasons);
|
||||
|
||||
Mocker.GetMock<EpisodeProvider>()
|
||||
Mocker.GetMock<SeasonProvider>()
|
||||
.Setup(c => c.IsIgnored(It.IsAny<int>(), It.IsAny<int>())).Returns(false);
|
||||
|
||||
Mocker.GetMock<SeasonSearchJob>()
|
||||
|
||||
@@ -117,6 +117,7 @@
|
||||
<Compile Include="ProviderTests\AnalyticsProviderTests\AnalyticsProviderFixture.cs" />
|
||||
<Compile Include="ProviderTests\ConfigProviderTests\ConfigCachingFixture.cs" />
|
||||
<Compile Include="ProviderTests\PlexProviderTest.cs" />
|
||||
<Compile Include="ProviderTests\SeasonProviderTest.cs" />
|
||||
<Compile Include="ProviderTests\DecisionEngineTests\RetentionSpecificationFixture.cs" />
|
||||
<Compile Include="ProviderTests\DecisionEngineTests\QualityAllowedByProfileSpecificationFixtrue.cs" />
|
||||
<Compile Include="ProviderTests\DecisionEngineTests\UpgradeHistorySpecificationFixtrue.cs" />
|
||||
|
||||
@@ -439,7 +439,6 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||
result.Should().HaveSameCount(fakeEpisodes.Episodes);
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void RefreshEpisodeInfo_ignore_season_zero()
|
||||
{
|
||||
@@ -466,6 +465,10 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||
.Setup(c => c.GetSeries(seriesId, true))
|
||||
.Returns(fakeEpisodes);
|
||||
|
||||
Mocker.GetMock<SeasonProvider>()
|
||||
.Setup(s => s.IsIgnored(seriesId, 0))
|
||||
.Returns(true);
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<EpisodeProvider>().RefreshEpisodeInfo(fakeSeries);
|
||||
|
||||
@@ -694,6 +697,10 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||
.Setup(c => c.GetSeries(seriesId, true))
|
||||
.Returns(tvdbSeries);
|
||||
|
||||
Mocker.GetMock<SeasonProvider>()
|
||||
.Setup(s => s.IsIgnored(seriesId, It.IsAny<int>()))
|
||||
.Returns(true);
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<EpisodeProvider>().RefreshEpisodeInfo(fakeSeries);
|
||||
|
||||
@@ -704,180 +711,6 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||
result.Where(e => e.Ignored).Should().HaveCount(episodeCount);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_true_if_all_episodes_ignored()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(4)
|
||||
.All()
|
||||
.With(c => c.Ignored = true)
|
||||
.With(c => c.SeriesId = 10)
|
||||
.With(c => c.SeasonNumber = 2)
|
||||
.Build();
|
||||
|
||||
episodes.ToList().ForEach(c => Db.Insert(c));
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<EpisodeProvider>().IsIgnored(10, 2);
|
||||
|
||||
//Assert
|
||||
result.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_false_if_none_of_episodes_are_ignored()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(4)
|
||||
.All()
|
||||
.With(c => c.Ignored = false)
|
||||
.With(c => c.SeriesId = 10)
|
||||
.With(c => c.SeasonNumber = 2)
|
||||
.Build();
|
||||
|
||||
episodes.ToList().ForEach(c => Db.Insert(c));
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<EpisodeProvider>().IsIgnored(10, 2);
|
||||
|
||||
//Assert
|
||||
result.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_false_if_some_of_episodes_are_ignored()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(4)
|
||||
.All()
|
||||
.With(c => c.SeriesId = 10)
|
||||
.With(c => c.SeasonNumber = 2)
|
||||
.With(c => c.Ignored = true)
|
||||
.Build();
|
||||
|
||||
episodes[2].Ignored = false;
|
||||
|
||||
|
||||
episodes.ToList().ForEach(c => Db.Insert(c));
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<EpisodeProvider>().IsIgnored(10, 2);
|
||||
|
||||
//Assert
|
||||
result.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_false_if_zero_episodes_in_db_for_season()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(4)
|
||||
.All()
|
||||
.With(c => c.SeriesId = 10)
|
||||
.With(c => c.SeasonNumber = 3)
|
||||
.With(c => c.Ignored = true)
|
||||
.Build();
|
||||
|
||||
episodes.ToList().ForEach(c => Db.Insert(c));
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<EpisodeProvider>().IsIgnored(10, 2);
|
||||
|
||||
//Assert
|
||||
result.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_true_if_zero_episodes_in_db_for_season_and_previous_is_ignored()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(4)
|
||||
.All()
|
||||
.With(c => c.SeriesId = 10)
|
||||
.With(c => c.SeasonNumber = 3)
|
||||
.With(c => c.Ignored = true)
|
||||
.Build();
|
||||
|
||||
episodes.ToList().ForEach(c => Db.Insert(c));
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<EpisodeProvider>().IsIgnored(10, 4);
|
||||
|
||||
//Assert
|
||||
result.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_false_if_zero_episodes_in_db_for_season_and_previous_is_not_ignored()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(4)
|
||||
.All()
|
||||
.With(c => c.SeriesId = 10)
|
||||
.With(c => c.SeasonNumber = 3)
|
||||
.With(c => c.Ignored = false)
|
||||
.Build();
|
||||
|
||||
episodes.ToList().ForEach(c => Db.Insert(c));
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<EpisodeProvider>().IsIgnored(10, 4);
|
||||
|
||||
//Assert
|
||||
result.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_false_if_zero_episodes_in_db_for_season_one()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<EpisodeProvider>().IsIgnored(10, 1);
|
||||
|
||||
//Assert
|
||||
result.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_true_if_zero_episodes_in_db_for_season_zero()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<EpisodeProvider>().IsIgnored(10, 0);
|
||||
|
||||
//Assert
|
||||
result.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsSeasonIgnored_should_return_false_if_season_zero_is_not_ignored()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(4)
|
||||
.All()
|
||||
.With(c => c.SeriesId = 10)
|
||||
.With(c => c.SeasonNumber = 0)
|
||||
.With(c => c.Ignored = false)
|
||||
.Build();
|
||||
|
||||
episodes.ToList().ForEach(c => Db.Insert(c));
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<EpisodeProvider>().IsIgnored(10, 0);
|
||||
|
||||
//Assert
|
||||
result.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Explicit]
|
||||
public void Add_daily_show_episodes()
|
||||
@@ -1049,6 +882,10 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||
.With(e => e.Ignored = false)
|
||||
.Build();
|
||||
|
||||
Mocker.GetMock<SeasonProvider>()
|
||||
.Setup(s => s.IsIgnored(newEpisode.SeriesId, newEpisode.SeasonNumber))
|
||||
.Returns(true);
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<EpisodeProvider>().AddEpisode(newEpisode);
|
||||
|
||||
@@ -1263,6 +1100,42 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||
Mocker.VerifyAllMocks();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IgnoreSeason_should_call_SetIgnore_in_season_provider_one_time_only()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(4)
|
||||
.All()
|
||||
.With(c => c.SeriesId = 10)
|
||||
.With(c => c.SeasonNumber = 1)
|
||||
.With(c => c.Ignored = false)
|
||||
.Build().ToList();
|
||||
|
||||
var season = new Season
|
||||
{
|
||||
SeriesId = 10,
|
||||
SeasonNumber = 1,
|
||||
Ignored = false
|
||||
};
|
||||
|
||||
Db.Insert(season);
|
||||
Db.InsertMany(episodes);
|
||||
|
||||
Mocker.GetMock<SeasonProvider>().Setup(s => s.SetIgnore(10, 1, true)).Verifiable();
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<EpisodeProvider>().SetSeasonIgnore(10, 1, true);
|
||||
|
||||
//Assert
|
||||
var episodesInDb = Db.Fetch<Episode>(@"SELECT * FROM Episodes");
|
||||
|
||||
episodesInDb.Should().HaveCount(4);
|
||||
episodesInDb.Where(e => e.Ignored).Should().HaveCount(4);
|
||||
|
||||
Mocker.GetMock<SeasonProvider>().Verify(s => s.SetIgnore(10, 1, true), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void EpisodesWithoutFiles_no_specials()
|
||||
{
|
||||
|
||||
@@ -0,0 +1,281 @@
|
||||
// ReSharper disable RedundantUsingDirective
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Core.Model;
|
||||
using NzbDrone.Core.Providers;
|
||||
using NzbDrone.Core.Providers.Core;
|
||||
using NzbDrone.Core.Repository;
|
||||
using NzbDrone.Core.Repository.Quality;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Test.Common.AutoMoq;
|
||||
using PetaPoco;
|
||||
using TvdbLib.Data;
|
||||
|
||||
namespace NzbDrone.Core.Test.ProviderTests
|
||||
{
|
||||
[TestFixture]
|
||||
// ReSharper disable InconsistentNaming
|
||||
public class SeasonProviderTest : CoreTest
|
||||
{
|
||||
[Test]
|
||||
public void AddSeason_should_insert_season_to_database_with_ignored_false()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var seriesId = 10;
|
||||
var seasonNumber = 50;
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<SeasonProvider>().Add(seriesId, seasonNumber);
|
||||
|
||||
//Assert
|
||||
var result = Db.Fetch<Season>();
|
||||
result.Should().HaveCount(1);
|
||||
result.First().SeriesId.Should().Be(seriesId);
|
||||
result.First().SeasonNumber.Should().Be(seasonNumber);
|
||||
result.First().Ignored.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase(true)]
|
||||
[TestCase(false)]
|
||||
public void AddSeason_should_insert_season_to_database_with_preset_ignored_status(bool isIgnored)
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var seriesId = 10;
|
||||
var seasonNumber = 50;
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<SeasonProvider>().Add(seriesId, seasonNumber, isIgnored);
|
||||
|
||||
//Assert
|
||||
var result = Db.Fetch<Season>();
|
||||
result.Should().HaveCount(1);
|
||||
result.First().SeriesId.Should().Be(seriesId);
|
||||
result.First().SeasonNumber.Should().Be(seasonNumber);
|
||||
result.First().Ignored.Should().Be(isIgnored);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DeleteSeason_should_remove_season_from_database()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var fakeSeason = Builder<Season>.CreateNew().Build();
|
||||
|
||||
Db.Insert(fakeSeason);
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<SeasonProvider>().Delete(fakeSeason.SeriesId, fakeSeason.SeasonNumber);
|
||||
|
||||
//Assert
|
||||
var result = Db.Fetch<Season>();
|
||||
result.Should().BeEmpty();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetIgnore_should_update_ignored_status()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var fakeSeason = Builder<Season>.CreateNew()
|
||||
.With(s => s.Ignored = false)
|
||||
.Build();
|
||||
|
||||
var id = Db.Insert(fakeSeason);
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<SeasonProvider>().SetIgnore(fakeSeason.SeriesId, fakeSeason.SeasonNumber, true);
|
||||
|
||||
//Assert
|
||||
var result = Db.SingleOrDefault<Season>(id);
|
||||
result.Ignored.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsIgnored_should_return_ignored_status_of_season()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
//Setup
|
||||
var fakeSeason = Builder<Season>.CreateNew()
|
||||
.With(s => s.Ignored = false)
|
||||
.Build();
|
||||
|
||||
Db.Insert(fakeSeason);
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<SeasonProvider>().IsIgnored(fakeSeason.SeriesId, fakeSeason.SeasonNumber);
|
||||
|
||||
//Assert
|
||||
result.Should().Be(fakeSeason.Ignored);
|
||||
Db.Fetch<Season>().Count.Should().Be(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsIgnored_should_return_true_if_not_in_db_and_is_season_zero()
|
||||
{
|
||||
//Setup
|
||||
WithRealDb();
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<SeasonProvider>().IsIgnored(10, 0);
|
||||
|
||||
//Assert
|
||||
result.Should().BeTrue();
|
||||
Db.Fetch<Season>().Should().HaveCount(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsIgnored_should_return_false_if_not_in_db_and_is_season_one()
|
||||
{
|
||||
//Setup
|
||||
WithRealDb();
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<SeasonProvider>().IsIgnored(10, 1);
|
||||
|
||||
//Assert
|
||||
result.Should().BeFalse();
|
||||
Db.Fetch<Season>().Should().HaveCount(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsIgnored_should_return_false_if_not_in_db_and_previous_season_is_not_ignored()
|
||||
{
|
||||
//Setup
|
||||
WithRealDb();
|
||||
|
||||
var lastSeason = Builder<Season>.CreateNew()
|
||||
.With(s => s.SeriesId = 10)
|
||||
.With(s => s.SeasonNumber = 4)
|
||||
.With(s => s.Ignored = false)
|
||||
.Build();
|
||||
|
||||
Db.Insert(lastSeason);
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<SeasonProvider>().IsIgnored(10, 5);
|
||||
|
||||
//Assert
|
||||
result.Should().BeFalse();
|
||||
Db.Fetch<Season>().Should().HaveCount(2);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsIgnored_should_return_true_if_not_in_db_and_previous_season_is_ignored()
|
||||
{
|
||||
//Setup
|
||||
WithRealDb();
|
||||
|
||||
var lastSeason = Builder<Season>.CreateNew()
|
||||
.With(s => s.SeriesId = 10)
|
||||
.With(s => s.SeasonNumber = 4)
|
||||
.With(s => s.Ignored = true)
|
||||
.Build();
|
||||
|
||||
Db.Insert(lastSeason);
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<SeasonProvider>().IsIgnored(10, 5);
|
||||
|
||||
//Assert
|
||||
result.Should().BeTrue();
|
||||
Db.Fetch<Season>().Should().HaveCount(2);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsIgnored_should_return_false_if_not_in_db_and_previous_season_does_not_exist()
|
||||
{
|
||||
//Setup
|
||||
WithRealDb();
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<SeasonProvider>().IsIgnored(10, 5);
|
||||
|
||||
//Assert
|
||||
result.Should().BeFalse();
|
||||
Db.Fetch<Season>().Should().HaveCount(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void All_should_return_seasons_with_episodes()
|
||||
{
|
||||
const int seriesId = 10;
|
||||
|
||||
//Setup
|
||||
WithRealDb();
|
||||
|
||||
var season = Builder<Season>.CreateNew()
|
||||
.With(s => s.SeriesId = seriesId)
|
||||
.With(s => s.SeasonNumber = 4)
|
||||
.With(s => s.Ignored = true)
|
||||
.Build();
|
||||
|
||||
var episodes = Builder<Episode>.CreateListOfSize(10)
|
||||
.All()
|
||||
.With(e => e.SeriesId = seriesId)
|
||||
.With(e => e.SeasonNumber = season.SeasonNumber)
|
||||
.Build();
|
||||
|
||||
Db.Insert(season);
|
||||
Db.InsertMany(episodes);
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<SeasonProvider>().All(seriesId);
|
||||
|
||||
//Assert
|
||||
result.Should().HaveCount(1);
|
||||
result.First().Episodes.Should().HaveCount(episodes.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void All_should_return_all_seasons_with_episodes()
|
||||
{
|
||||
const int seriesId = 10;
|
||||
|
||||
//Setup
|
||||
WithRealDb();
|
||||
|
||||
var seasons = Builder<Season>.CreateListOfSize(5)
|
||||
.All()
|
||||
.With(s => s.SeriesId = seriesId)
|
||||
.Build();
|
||||
|
||||
var episodes = new List<Episode>();
|
||||
|
||||
for (int i = 0; i < seasons.Count; i++)
|
||||
{
|
||||
var newEps = Builder<Episode>.CreateListOfSize(2)
|
||||
.All()
|
||||
.With(e => e.SeriesId = seriesId)
|
||||
.With(e => e.SeasonNumber = i + 1)
|
||||
.Build();
|
||||
|
||||
episodes.AddRange(newEps);
|
||||
}
|
||||
|
||||
Db.InsertMany(seasons);
|
||||
Db.InsertMany(episodes);
|
||||
|
||||
//Act
|
||||
var result = Mocker.Resolve<SeasonProvider>().All(seriesId);
|
||||
|
||||
//Assert
|
||||
result.Should().HaveCount(5);
|
||||
|
||||
foreach(var season in result)
|
||||
{
|
||||
season.Episodes.Count.Should().Be(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user