Sonarr/NzbDrone.Core.Test/IndexerSearchTests/ProcessResultsFixture.cs

236 lines
8.4 KiB
C#
Raw Normal View History

2013-03-07 03:45:36 +00:00
/*
2013-01-13 08:24:48 +00:00
using System.Collections.Generic;
using System.Linq;
using FizzWare.NBuilder;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Download;
2013-02-27 03:19:22 +00:00
using NzbDrone.Core.Qualities;
2013-03-07 01:51:47 +00:00
using NzbDrone.Core.Test.Framework;
using NzbDrone.Core.Tv;
using NzbDrone.Core.Model;
using NzbDrone.Core.Model.Notification;
2013-02-19 02:19:38 +00:00
using NzbDrone.Core.DecisionEngine;
using NzbDrone.Core.Repository.Search;
2013-01-13 08:24:48 +00:00
using NzbDrone.Test.Common;
2013-01-13 08:24:48 +00:00
namespace NzbDrone.Core.Test.ProviderTests.SearchTests
{
[TestFixture]
2013-03-07 01:51:47 +00:00
public class ProcessResultsFixture : CoreTest<TestSearch>
{
2013-01-13 08:24:48 +00:00
private Series _matchingSeries;
private Series _mismatchedSeries;
private Series _nullSeries = null;
2013-03-07 01:51:47 +00:00
private EpisodeSearchResult _episodeSearchResult;
2013-01-13 08:24:48 +00:00
private ProgressNotification _notification;
private List<Episode> _episodes;
2013-03-07 01:51:47 +00:00
[SetUp]
2013-01-13 08:24:48 +00:00
public void Setup()
{
_matchingSeries = Builder<Series>.CreateNew()
.With(s => s.Id = 79488)
.With(s => s.Title = "30 Rock")
.Build();
_mismatchedSeries = Builder<Series>.CreateNew()
.With(s => s.Id = 12345)
.With(s => s.Title = "Not 30 Rock")
.Build();
2013-01-13 08:24:48 +00:00
2013-03-07 01:51:47 +00:00
_episodeSearchResult = new EpisodeSearchResult();
2013-01-13 08:24:48 +00:00
_notification = new ProgressNotification("Test");
_episodes = Builder<Episode>
.CreateListOfSize(1)
.Build().ToList();
2013-01-13 08:24:48 +00:00
Mocker.GetMock<IEpisodeService>()
2013-01-13 08:24:48 +00:00
.Setup(s => s.GetEpisodesByParseResult(It.IsAny<EpisodeParseResult>()))
.Returns(_episodes);
}
private void WithMatchingSeries()
{
2013-02-19 06:56:02 +00:00
Mocker.GetMock<ISeriesRepository>()
.Setup(s => s.GetByTitle(It.IsAny<string>())).Returns(_matchingSeries);
}
private void WithMisMatchedSeries()
{
2013-02-19 06:56:02 +00:00
Mocker.GetMock<ISeriesRepository>()
.Setup(s => s.GetByTitle(It.IsAny<string>())).Returns(_mismatchedSeries);
}
private void WithNullSeries()
{
2013-02-19 06:56:02 +00:00
Mocker.GetMock<ISeriesRepository>()
.Setup(s => s.GetByTitle(It.IsAny<string>())).Returns(_nullSeries);
}
private void WithSuccessfulDownload()
{
Mocker.GetMock<DownloadProvider>()
.Setup(s => s.DownloadReport(It.IsAny<EpisodeParseResult>()))
.Returns(true);
}
private void WithFailingDownload()
{
Mocker.GetMock<DownloadProvider>()
.Setup(s => s.DownloadReport(It.IsAny<EpisodeParseResult>()))
.Returns(false);
}
2013-03-07 01:51:47 +00:00
private void WithApprovedDecisions()
{
2013-03-07 01:51:47 +00:00
Mocker.GetMock<IDownloadDirector>()
.Setup(s => s.GetDownloadDecision(It.IsAny<EpisodeParseResult>()))
.Returns(new DownloadDecision(new string[0]));
}
2013-03-07 01:51:47 +00:00
private void WithDeclinedDecisions()
{
2013-03-07 01:51:47 +00:00
Mocker.GetMock<IDownloadDirector>()
.Setup(s => s.GetDownloadDecision(It.IsAny<EpisodeParseResult>()))
.Returns(new DownloadDecision(new[] { "Rejection reason" }));
}
2013-03-07 01:51:47 +00:00
Times.Once());
}
2013-03-07 01:51:47 +00:00
2013-03-07 01:51:47 +00:00
[Test]
2013-01-13 08:24:48 +00:00
public void should_skip_if_series_does_not_match_searched_series()
{
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5)
.All()
.With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 1 })
2013-02-27 03:19:22 +00:00
.With(e => e.Quality = new QualityModel(Quality.HDTV720p, false))
2013-01-13 08:24:48 +00:00
.Build()
.ToList();
WithMisMatchedSeries();
//Act
2013-03-07 01:51:47 +00:00
var result = Subject.ProcessReports(_matchingSeries, new { }, parseResults, _episodeSearchResult, _notification);
//Assert
2013-01-13 08:24:48 +00:00
result.SearchHistoryItems.Should().HaveCount(parseResults.Count);
result.SearchHistoryItems.Should().NotContain(s => s.Success);
Mocker.GetMock<DownloadProvider>().Verify(c => c.DownloadReport(It.IsAny<EpisodeParseResult>()),
Times.Never());
}
[Test]
2013-01-13 08:24:48 +00:00
public void should_skip_if_episode_was_already_downloaded()
{
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(2)
.All()
.With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 5 })
2013-02-27 03:19:22 +00:00
.With(c => c.Quality = new QualityModel(Quality.DVD, true))
.TheLast(1)
.With(e => e.EpisodeNumbers = new List<int> { 1, 2, 3, 4, 5 })
2013-01-13 08:24:48 +00:00
.Build()
.ToList();
WithMatchingSeries();
WithQualityNeeded();
WithSuccessfulDownload();
//Act
2013-03-07 01:51:47 +00:00
var result = Subject.ProcessReports(_matchingSeries, new { }, parseResults, _episodeSearchResult, _notification);
//Assert
2013-01-13 08:24:48 +00:00
result.SearchHistoryItems.Should().HaveCount(parseResults.Count);
result.SearchHistoryItems.Should().Contain(s => s.Success);
Mocker.GetMock<DownloadProvider>().Verify(c => c.DownloadReport(It.IsAny<EpisodeParseResult>()),
Times.Once());
}
[Test]
2013-01-13 08:24:48 +00:00
public void should_try_next_report_if_download_fails()
{
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(2)
.All()
.With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 1 })
2013-02-27 03:19:22 +00:00
.With(c => c.Quality = new QualityModel(Quality.DVD, true))
.TheLast(1)
2013-02-27 03:19:22 +00:00
.With(c => c.Quality = new QualityModel(Quality.SDTV, true))
2013-01-13 08:24:48 +00:00
.Build()
.ToList();
WithMatchingSeries();
WithQualityNeeded();
Mocker.GetMock<DownloadProvider>()
2013-02-27 03:19:22 +00:00
.Setup(s => s.DownloadReport(It.Is<EpisodeParseResult>(d => d.Quality.Quality == Quality.DVD)))
.Returns(false);
Mocker.GetMock<DownloadProvider>()
2013-02-27 03:19:22 +00:00
.Setup(s => s.DownloadReport(It.Is<EpisodeParseResult>(d => d.Quality.Quality == Quality.SDTV)))
.Returns(true);
//Act
2013-03-07 01:51:47 +00:00
var result = Subject.ProcessReports(_matchingSeries, new { }, parseResults, _episodeSearchResult, _notification);
//Assert
2013-01-13 08:24:48 +00:00
result.SearchHistoryItems.Should().HaveCount(parseResults.Count);
result.SearchHistoryItems.Should().Contain(s => s.Success);
Mocker.GetMock<DownloadProvider>().Verify(c => c.DownloadReport(It.IsAny<EpisodeParseResult>()),
Times.Exactly(2));
}
[Test]
2013-01-13 08:24:48 +00:00
public void should_return_valid_successes_when_one_or_more_downloaded()
{
var parseResults = Builder<EpisodeParseResult>.CreateListOfSize(5)
.All()
.With(e => e.SeasonNumber = 1)
.With(e => e.EpisodeNumbers = new List<int> { 1 })
2013-02-27 03:19:22 +00:00
.With(c => c.Quality = new QualityModel(Quality.DVD, true))
.With(c => c.Age = 10)
.Random(1)
2013-02-27 03:19:22 +00:00
.With(c => c.Quality = new QualityModel(Quality.Bluray1080p, true))
.With(c => c.Age = 100)
2013-01-13 08:24:48 +00:00
.Build()
.ToList();
WithMatchingSeries();
WithSuccessfulDownload();
2013-03-07 01:51:47 +00:00
Mocker.GetMock<DownloadDirector>()
.Setup(s => s.IsDownloadPermitted(It.Is<EpisodeParseResult>(d => d.Quality.Quality == Quality.Bluray1080p)))
2013-03-06 20:30:53 +00:00
.Returns(ReportRejectionReasons.None);
//Act
2013-03-07 01:51:47 +00:00
var result = Subject.ProcessReports(_matchingSeries, new { }, parseResults, _episodeSearchResult, _notification);
//Assert
2013-01-13 08:24:48 +00:00
result.Successes.Should().NotBeNull();
result.Successes.Should().NotBeEmpty();
2013-03-07 01:51:47 +00:00
Mocker.GetMock<DownloadDirector>().Verify(c => c.IsDownloadPermitted(It.IsAny<EpisodeParseResult>()),
Times.Once());
Mocker.GetMock<DownloadProvider>().Verify(c => c.DownloadReport(It.IsAny<EpisodeParseResult>()),
Times.Once());
}
}
2013-01-13 08:24:48 +00:00
}
2013-03-07 01:51:47 +00:00
*/
2013-03-07 03:45:36 +00:00
namespace NzbDrone.Core.Test.IndexerSearchTests
{
}