Radarr/NzbDrone.Core.Test/JobTests/BacklogSearchJobTest.cs

215 lines
7.9 KiB
C#
Raw Normal View History

using System.Collections.Generic;
using System.Linq;
using FizzWare.NBuilder;
using Moq;
using NUnit.Framework;
2011-12-02 01:33:17 +00:00
using NzbDrone.Core.Jobs;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers;
2012-01-15 02:05:05 +00:00
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository;
2011-12-15 04:15:53 +00:00
using NzbDrone.Core.Test.Framework;
using NzbDrone.Test.Common.AutoMoq;
namespace NzbDrone.Core.Test.JobTests
{
[TestFixture]
2011-12-15 04:15:53 +00:00
public class BacklogSearchJobTest : CoreTest
{
2012-01-15 02:05:05 +00:00
private void WithEnableBacklogSearching()
{
Mocker.GetMock<ConfigProvider>().SetupGet(s => s.EnableBacklogSearching).Returns(true);
}
[Test]
public void no_missing_epsiodes_should_not_trigger_any_search()
{
//Setup
var notification = new ProgressNotification("Backlog Search Job Test");
var episodes = new List<Episode>();
2011-12-15 04:15:53 +00:00
WithStrictMocker();
2012-01-15 02:05:05 +00:00
WithEnableBacklogSearching();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeProvider>()
.Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes);
//Act
2011-12-15 04:15:53 +00:00
Mocker.Resolve<BacklogSearchJob>().Start(notification, 0, 0);
//Assert
2011-12-15 04:15:53 +00:00
Mocker.GetMock<SeasonSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), It.IsAny<int>()),
Times.Never());
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), 0),
Times.Never());
}
[Test]
public void individual_missing_episode()
{
//Setup
var notification = new ProgressNotification("Backlog Search Job Test");
var episodes = Builder<Episode>.CreateListOfSize(1).Build();
2011-12-15 04:15:53 +00:00
WithStrictMocker();
2012-01-15 02:05:05 +00:00
WithEnableBacklogSearching();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeProvider>()
.Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes);
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeSearchJob>()
.Setup(s => s.Start(notification, It.IsAny<int>(), 0)).Verifiable();
//Act
2011-12-15 04:15:53 +00:00
Mocker.Resolve<BacklogSearchJob>().Start(notification, 0, 0);
//Assert
2011-12-15 04:15:53 +00:00
Mocker.GetMock<SeasonSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), It.IsAny<int>()),
Times.Never());
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), 0),
Times.Once());
}
[Test]
public void individual_missing_episodes_only()
{
//Setup
var notification = new ProgressNotification("Backlog Search Job Test");
var episodes = Builder<Episode>.CreateListOfSize(5).Build();
2011-12-15 04:15:53 +00:00
WithStrictMocker();
2012-01-15 02:05:05 +00:00
WithEnableBacklogSearching();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeProvider>()
.Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes);
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeSearchJob>()
.Setup(s => s.Start(notification, It.IsAny<int>(), 0)).Verifiable();
//Act
2011-12-15 04:15:53 +00:00
Mocker.Resolve<BacklogSearchJob>().Start(notification, 0, 0);
//Assert
2011-12-15 04:15:53 +00:00
Mocker.GetMock<SeasonSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), It.IsAny<int>()),
Times.Never());
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), 0),
Times.Exactly(episodes.Count));
}
[Test]
public void series_season_missing_episodes_only_mismatch_count()
{
//Setup
var notification = new ProgressNotification("Backlog Search Job Test");
var episodes = Builder<Episode>.CreateListOfSize(5)
2011-10-18 21:46:06 +00:00
.All()
.With(e => e.SeriesId = 1)
.With(e => e.SeasonNumber = 1)
.Build();
2011-12-15 04:15:53 +00:00
WithStrictMocker();
2012-01-15 02:05:05 +00:00
WithEnableBacklogSearching();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeProvider>()
.Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes);
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeSearchJob>()
.Setup(s => s.Start(notification, It.IsAny<int>(), 0)).Verifiable();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeProvider>()
2011-10-20 05:05:04 +00:00
.Setup(s => s.GetEpisodeNumbersBySeason(1, 1)).Returns(new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
//Act
2011-12-15 04:15:53 +00:00
Mocker.Resolve<BacklogSearchJob>().Start(notification, 0, 0);
//Assert
2011-12-15 04:15:53 +00:00
Mocker.GetMock<SeasonSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), It.IsAny<int>()),
Times.Never());
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), 0),
Times.Exactly(episodes.Count));
}
[Test]
public void series_season_missing_episodes_only()
{
//Setup
var notification = new ProgressNotification("Backlog Search Job Test");
var episodes = Builder<Episode>.CreateListOfSize(5)
2011-10-18 21:46:06 +00:00
.All()
.With(e => e.SeriesId = 1)
.With(e => e.SeasonNumber = 1)
.Build();
2011-12-15 04:15:53 +00:00
WithStrictMocker();
2012-01-15 02:05:05 +00:00
WithEnableBacklogSearching();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeProvider>()
.Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes);
2011-12-15 04:15:53 +00:00
Mocker.GetMock<SeasonSearchJob>()
.Setup(s => s.Start(notification, It.IsAny<int>(), It.IsAny<int>())).Verifiable();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeProvider>()
.Setup(s => s.GetEpisodeNumbersBySeason(1, 1)).Returns(episodes.Select(e => e.EpisodeNumber).ToList());
//Act
2011-12-15 04:15:53 +00:00
Mocker.Resolve<BacklogSearchJob>().Start(notification, 0, 0);
//Assert
2011-12-15 04:15:53 +00:00
Mocker.GetMock<SeasonSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), It.IsAny<int>()),
Times.Once());
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), 0),
Times.Never());
}
[Test]
public void multiple_missing_episodes()
{
//Setup
var notification = new ProgressNotification("Backlog Search Job Test");
var episodes = Builder<Episode>.CreateListOfSize(10)
2011-10-18 21:46:06 +00:00
.TheFirst(5)
.With(e => e.SeriesId = 1)
.With(e => e.SeasonNumber = 1)
.Build();
2011-12-15 04:15:53 +00:00
WithStrictMocker();
2012-01-15 02:05:05 +00:00
WithEnableBacklogSearching();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeProvider>()
.Setup(s => s.EpisodesWithoutFiles(true)).Returns(episodes);
2011-12-15 04:15:53 +00:00
Mocker.GetMock<SeasonSearchJob>()
.Setup(s => s.Start(notification, It.IsAny<int>(), It.IsAny<int>())).Verifiable();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeSearchJob>()
.Setup(s => s.Start(notification, It.IsAny<int>(), 0)).Verifiable();
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeProvider>()
2011-10-20 05:05:04 +00:00
.Setup(s => s.GetEpisodeNumbersBySeason(1, 1)).Returns(new List<int> { 1, 2, 3, 4, 5 });
//Act
2011-12-15 04:15:53 +00:00
Mocker.Resolve<BacklogSearchJob>().Start(notification, 0, 0);
//Assert
2011-12-15 04:15:53 +00:00
Mocker.GetMock<SeasonSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), It.IsAny<int>()),
Times.Once());
2011-12-15 04:15:53 +00:00
Mocker.GetMock<EpisodeSearchJob>().Verify(c => c.Start(notification, It.IsAny<int>(), 0),
Times.Exactly(5));
}
}
}