mirror of
https://github.com/Sonarr/Sonarr
synced 2024-12-26 01:37:07 +00:00
SeriesSearchJob uses SeasonSearchJob to try to download seasons first.
This commit is contained in:
parent
485f618e02
commit
273530eda2
3 changed files with 28 additions and 61 deletions
|
@ -24,80 +24,46 @@ namespace NzbDrone.Core.Test
|
|||
[Test]
|
||||
public void SeriesSearch_success()
|
||||
{
|
||||
var episodes = Builder<Episode>.CreateListOfSize(5)
|
||||
.WhereAll()
|
||||
.Have(e => e.SeriesId = 1)
|
||||
.Have(e => e.Ignored = false)
|
||||
.Build();
|
||||
var seasons = new List<int> { 1, 2, 3, 4, 5 };
|
||||
|
||||
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||
|
||||
var notification = new ProgressNotification("Series Search");
|
||||
|
||||
mocker.GetMock<EpisodeProvider>()
|
||||
.Setup(c => c.GetEpisodeBySeries(1)).Returns(episodes);
|
||||
.Setup(c => c.GetSeasons(1)).Returns(seasons);
|
||||
|
||||
mocker.GetMock<EpisodeSearchJob>()
|
||||
.Setup(c => c.Start(notification, It.IsAny<int>(), 0)).Verifiable();
|
||||
mocker.GetMock<SeasonSearchJob>()
|
||||
.Setup(c => c.Start(notification, 1, It.IsAny<int>())).Verifiable();
|
||||
|
||||
//Act
|
||||
mocker.Resolve<SeriesSearchJob>().Start(notification, 1, 0);
|
||||
|
||||
//Assert
|
||||
mocker.VerifyAllMocks();
|
||||
mocker.GetMock<EpisodeSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), 0),
|
||||
Times.Exactly(episodes.Count));
|
||||
mocker.GetMock<SeasonSearchJob>().Verify(c => c.Start(notification, 1, It.IsAny<int>()),
|
||||
Times.Exactly(seasons.Count));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SeriesSearch_no_episodes()
|
||||
public void SeriesSearch_no_seasons()
|
||||
{
|
||||
var seasons = new List<int>();
|
||||
|
||||
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||
|
||||
var notification = new ProgressNotification("Series Search");
|
||||
List<Episode> nullList = null;
|
||||
|
||||
mocker.GetMock<EpisodeProvider>()
|
||||
.Setup(c => c.GetEpisodeBySeries(1)).Returns(nullList);
|
||||
.Setup(c => c.GetSeasons(1)).Returns(seasons);
|
||||
|
||||
//Act
|
||||
mocker.Resolve<SeriesSearchJob>().Start(notification, 1, 0);
|
||||
|
||||
//Assert
|
||||
mocker.VerifyAllMocks();
|
||||
mocker.GetMock<EpisodeSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), 0),
|
||||
mocker.GetMock<SeasonSearchJob>().Verify(c => c.Start(notification, 1, It.IsAny<int>()),
|
||||
Times.Never());
|
||||
ExceptionVerification.ExcpectedWarns(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SeriesSearch_skip_ignored()
|
||||
{
|
||||
var episodes = Builder<Episode>.CreateListOfSize(10)
|
||||
.WhereAll()
|
||||
.Have(e => e.SeriesId = 1)
|
||||
.WhereTheFirst(5)
|
||||
.Have(e => e.Ignored = false)
|
||||
.AndTheRemaining()
|
||||
.Have(e => e.Ignored = true)
|
||||
.Build();
|
||||
|
||||
var mocker = new AutoMoqer(MockBehavior.Strict);
|
||||
|
||||
var notification = new ProgressNotification("Series Search");
|
||||
|
||||
mocker.GetMock<EpisodeProvider>()
|
||||
.Setup(c => c.GetEpisodeBySeries(1)).Returns(episodes);
|
||||
|
||||
mocker.GetMock<EpisodeSearchJob>()
|
||||
.Setup(c => c.Start(notification, It.IsAny<int>(), 0)).Verifiable();
|
||||
|
||||
//Act
|
||||
mocker.Resolve<SeriesSearchJob>().Start(notification, 1, 0);
|
||||
|
||||
//Assert
|
||||
mocker.VerifyAllMocks();
|
||||
mocker.GetMock<EpisodeSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), 0),
|
||||
Times.Exactly(5));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -24,6 +24,11 @@ namespace NzbDrone.Core.Providers.Jobs
|
|||
_episodeProvider = episodeProvider;
|
||||
}
|
||||
|
||||
public SeasonSearchJob()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "Season Search"; }
|
||||
|
@ -34,7 +39,7 @@ namespace NzbDrone.Core.Providers.Jobs
|
|||
get { return 0; }
|
||||
}
|
||||
|
||||
public void Start(ProgressNotification notification, int targetId, int secondaryTargetId)
|
||||
public virtual void Start(ProgressNotification notification, int targetId, int secondaryTargetId)
|
||||
{
|
||||
if (targetId <= 0)
|
||||
throw new ArgumentOutOfRangeException("targetId");
|
||||
|
|
|
@ -11,14 +11,14 @@ namespace NzbDrone.Core.Providers.Jobs
|
|||
public class SeriesSearchJob : IJob
|
||||
{
|
||||
private readonly EpisodeProvider _episodeProvider;
|
||||
private readonly EpisodeSearchJob _episodeSearchJob;
|
||||
private readonly SeasonSearchJob _seasonSearchJob;
|
||||
|
||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
public SeriesSearchJob(EpisodeProvider episodeProvider, EpisodeSearchJob episodeSearchJob)
|
||||
public SeriesSearchJob(EpisodeProvider episodeProvider, SeasonSearchJob seasonSearchJob)
|
||||
{
|
||||
_episodeProvider = episodeProvider;
|
||||
_episodeSearchJob = episodeSearchJob;
|
||||
_seasonSearchJob = seasonSearchJob;
|
||||
}
|
||||
|
||||
public string Name
|
||||
|
@ -36,20 +36,16 @@ namespace NzbDrone.Core.Providers.Jobs
|
|||
if (targetId <= 0)
|
||||
throw new ArgumentOutOfRangeException("targetId");
|
||||
|
||||
Logger.Debug("Getting episodes from database for series: {0}.", targetId);
|
||||
var episodes = _episodeProvider.GetEpisodeBySeries(targetId);
|
||||
Logger.Debug("Getting seasons from database for series: {0}", targetId);
|
||||
var seasons = _episodeProvider.GetSeasons(targetId);
|
||||
|
||||
if (episodes == null)
|
||||
foreach (var season in seasons)
|
||||
{
|
||||
Logger.Warn("No episodes in database found for series: {0}.", targetId);
|
||||
return;
|
||||
}
|
||||
//Skip ignored seasons
|
||||
if (_episodeProvider.IsIgnored(targetId, season))
|
||||
continue;
|
||||
|
||||
//Todo: Search for a full season NZB before individual episodes
|
||||
|
||||
foreach (var episode in episodes.Where(e => !e.Ignored))
|
||||
{
|
||||
_episodeSearchJob.Start(notification, episode.EpisodeId, 0);
|
||||
_seasonSearchJob.Start(notification, targetId, season);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue