Radarr/src/NzbDrone.Core.Test/Download/FailedDownloadServiceFixtur...

210 lines
6.9 KiB
C#
Raw Normal View History

2013-10-22 07:31:36 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
using FizzWare.NBuilder;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Configuration;
2013-10-22 07:31:36 +00:00
using NzbDrone.Core.Download;
using NzbDrone.Core.History;
using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.Download
{
[TestFixture]
public class FailedDownloadServiceFixture : CoreTest<FailedDownloadService>
{
private List<HistoryItem> _completed;
private List<HistoryItem> _failed;
[SetUp]
public void Setup()
{
_completed = Builder<HistoryItem>.CreateListOfSize(5)
.All()
.With(h => h.Status = HistoryStatus.Completed)
.Build()
.ToList();
_failed = Builder<HistoryItem>.CreateListOfSize(1)
.All()
.With(h => h.Status = HistoryStatus.Failed)
.Build()
.ToList();
Mocker.GetMock<IProvideDownloadClient>()
.Setup(c => c.GetDownloadClient()).Returns(Mocker.GetMock<IDownloadClient>().Object);
Mocker.GetMock<IConfigService>()
.SetupGet(s => s.EnableFailedDownloadHandling)
.Returns(true);
2013-10-22 07:31:36 +00:00
}
2013-10-24 05:24:26 +00:00
private void GivenNoGrabbedHistory()
2013-10-22 07:31:36 +00:00
{
Mocker.GetMock<IHistoryService>()
2013-10-24 05:24:26 +00:00
.Setup(s => s.Grabbed())
2013-10-22 07:31:36 +00:00
.Returns(new List<History.History>());
}
2013-10-24 05:24:26 +00:00
private void GivenGrabbedHistory(List<History.History> history)
2013-10-22 07:31:36 +00:00
{
Mocker.GetMock<IHistoryService>()
2013-10-24 05:24:26 +00:00
.Setup(s => s.Grabbed())
2013-10-22 07:31:36 +00:00
.Returns(history);
}
private void GivenNoFailedHistory()
{
Mocker.GetMock<IHistoryService>()
.Setup(s => s.Failed())
.Returns(new List<History.History>());
}
private void GivenFailedHistory(List<History.History> failedHistory)
{
Mocker.GetMock<IHistoryService>()
.Setup(s => s.Failed())
.Returns(failedHistory);
}
private void GivenFailedDownloadClientHistory()
{
Mocker.GetMock<IDownloadClient>()
.Setup(s => s.GetHistory(0, 20))
.Returns(_failed);
}
private void VerifyNoFailedDownloads()
{
Mocker.GetMock<IEventAggregator>()
.Verify(v => v.PublishEvent(It.IsAny<DownloadFailedEvent>()), Times.Never());
}
private void VerifyFailedDownloads(int count = 1)
{
Mocker.GetMock<IEventAggregator>()
2013-10-24 05:24:26 +00:00
.Verify(v => v.PublishEvent(It.Is<DownloadFailedEvent>(d => d.EpisodeIds.Count == count)), Times.Once());
2013-10-22 07:31:36 +00:00
}
[Test]
public void should_not_process_if_no_download_client_history()
{
Mocker.GetMock<IDownloadClient>()
.Setup(s => s.GetHistory(0, 20))
.Returns(new List<HistoryItem>());
Subject.Execute(new CheckForFailedDownloadCommand());
2013-10-22 07:31:36 +00:00
Mocker.GetMock<IHistoryService>()
.Verify(s => s.BetweenDates(It.IsAny<DateTime>(), It.IsAny<DateTime>(), HistoryEventType.Grabbed),
Times.Never());
VerifyNoFailedDownloads();
}
[Test]
public void should_not_process_if_no_failed_items_in_download_client_history()
{
Mocker.GetMock<IDownloadClient>()
.Setup(s => s.GetHistory(0, 20))
.Returns(_completed);
Subject.Execute(new CheckForFailedDownloadCommand());
2013-10-22 07:31:36 +00:00
Mocker.GetMock<IHistoryService>()
.Verify(s => s.BetweenDates(It.IsAny<DateTime>(), It.IsAny<DateTime>(), HistoryEventType.Grabbed),
Times.Never());
VerifyNoFailedDownloads();
}
[Test]
public void should_not_process_if_matching_history_is_not_found()
{
2013-10-24 05:24:26 +00:00
GivenNoGrabbedHistory();
2013-10-22 07:31:36 +00:00
GivenFailedDownloadClientHistory();
Subject.Execute(new CheckForFailedDownloadCommand());
2013-10-22 07:31:36 +00:00
VerifyNoFailedDownloads();
}
[Test]
public void should_not_process_if_already_added_to_history_as_failed()
{
GivenFailedDownloadClientHistory();
var history = Builder<History.History>.CreateListOfSize(1)
.Build()
.ToList();
2013-10-24 05:24:26 +00:00
GivenGrabbedHistory(history);
2013-10-22 07:31:36 +00:00
GivenFailedHistory(history);
history.First().Data.Add("downloadClient", "SabnzbdClient");
history.First().Data.Add("downloadClientId", _failed.First().Id);
Subject.Execute(new CheckForFailedDownloadCommand());
2013-10-22 07:31:36 +00:00
VerifyNoFailedDownloads();
}
[Test]
public void should_process_if_not_already_in_failed_history()
{
GivenFailedDownloadClientHistory();
var history = Builder<History.History>.CreateListOfSize(1)
.Build()
.ToList();
2013-10-24 05:24:26 +00:00
GivenGrabbedHistory(history);
2013-10-22 07:31:36 +00:00
GivenNoFailedHistory();
history.First().Data.Add("downloadClient", "SabnzbdClient");
history.First().Data.Add("downloadClientId", _failed.First().Id);
Subject.Execute(new CheckForFailedDownloadCommand());
2013-10-22 07:31:36 +00:00
VerifyFailedDownloads();
}
[Test]
2013-10-24 05:24:26 +00:00
public void should_have_multiple_episode_ids_when_multi_episode_release_fails()
2013-10-22 07:31:36 +00:00
{
GivenFailedDownloadClientHistory();
var history = Builder<History.History>.CreateListOfSize(2)
.Build()
.ToList();
2013-10-24 05:24:26 +00:00
GivenGrabbedHistory(history);
2013-10-22 07:31:36 +00:00
GivenNoFailedHistory();
history.ForEach(h =>
{
h.Data.Add("downloadClient", "SabnzbdClient");
h.Data.Add("downloadClientId", _failed.First().Id);
});
Subject.Execute(new CheckForFailedDownloadCommand());
2013-10-22 07:31:36 +00:00
VerifyFailedDownloads(2);
}
[Test]
public void should_skip_if_enable_failed_download_handling_is_off()
{
Mocker.GetMock<IConfigService>()
.SetupGet(s => s.EnableFailedDownloadHandling)
.Returns(false);
Subject.Execute(new CheckForFailedDownloadCommand());
VerifyNoFailedDownloads();
}
2013-10-22 07:31:36 +00:00
}
}