|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Linq;
|
|
|
|
using FizzWare.NBuilder;
|
|
|
|
using FluentAssertions;
|
|
|
|
using Moq;
|
|
|
|
using NUnit.Framework;
|
|
|
|
using NzbDrone.Common.Messaging;
|
|
|
|
using NzbDrone.Core.MediaFiles;
|
|
|
|
using NzbDrone.Core.MediaFiles.EpisodeImport;
|
|
|
|
using NzbDrone.Core.MediaFiles.Events;
|
|
|
|
using NzbDrone.Core.Parser.Model;
|
|
|
|
using NzbDrone.Core.Qualities;
|
|
|
|
using NzbDrone.Core.Tv;
|
|
|
|
using NzbDrone.Core.Test.Framework;
|
|
|
|
using NzbDrone.Test.Common;
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Test.MediaFileTests
|
|
|
|
{
|
|
|
|
[TestFixture]
|
|
|
|
public class ImportApprovedEpisodesFixture : CoreTest<ImportApprovedEpisodes>
|
|
|
|
{
|
|
|
|
private List<ImportDecision> _rejectedDecisions;
|
|
|
|
private List<ImportDecision> _approvedDecisions;
|
|
|
|
|
|
|
|
[SetUp]
|
|
|
|
public void Setup()
|
|
|
|
{
|
|
|
|
_rejectedDecisions = new List<ImportDecision>();
|
|
|
|
_approvedDecisions = new List<ImportDecision>();
|
|
|
|
|
|
|
|
var series = Builder<Series>.CreateNew()
|
|
|
|
.Build();
|
|
|
|
|
|
|
|
var episodes = Builder<Episode>.CreateListOfSize(5)
|
|
|
|
.Build();
|
|
|
|
|
|
|
|
_rejectedDecisions.Add(new ImportDecision(new LocalEpisode(), "Rejected!"));
|
|
|
|
_rejectedDecisions.Add(new ImportDecision(new LocalEpisode(), "Rejected!"));
|
|
|
|
_rejectedDecisions.Add(new ImportDecision(new LocalEpisode(), "Rejected!"));
|
|
|
|
|
|
|
|
foreach (var episode in episodes)
|
|
|
|
{
|
|
|
|
_approvedDecisions.Add(new ImportDecision
|
|
|
|
(
|
|
|
|
new LocalEpisode
|
|
|
|
{
|
|
|
|
Series = series,
|
|
|
|
Episodes = new List<Episode> {episode},
|
|
|
|
Path = @"C:\Test\TV\30 Rock\30 Rock - S01E01 - Pilit.avi".AsOsAgnostic(),
|
|
|
|
Quality = new QualityModel(Quality.Bluray720p)
|
|
|
|
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_return_empty_list_if_there_are_no_approved_decisions()
|
|
|
|
{
|
|
|
|
Subject.Import(_rejectedDecisions).Should().BeEmpty();
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_import_each_approved()
|
|
|
|
{
|
|
|
|
Subject.Import(_approvedDecisions).Should().HaveCount(5);
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_only_import_approved()
|
|
|
|
{
|
|
|
|
var all = new List<ImportDecision>();
|
|
|
|
all.AddRange(_rejectedDecisions);
|
|
|
|
all.AddRange(_approvedDecisions);
|
|
|
|
|
|
|
|
Subject.Import(all).Should().HaveCount(5);
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_only_import_each_episode_once()
|
|
|
|
{
|
|
|
|
var all = new List<ImportDecision>();
|
|
|
|
all.AddRange(_approvedDecisions);
|
|
|
|
all.Add(new ImportDecision(_approvedDecisions.First().LocalEpisode));
|
|
|
|
|
|
|
|
Subject.Import(all).Should().HaveCount(5);
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_move_new_downloads()
|
|
|
|
{
|
|
|
|
Subject.Import(new List<ImportDecision> {_approvedDecisions.First()}, true);
|
|
|
|
|
|
|
|
Mocker.GetMock<IUpgradeMediaFiles>()
|
|
|
|
.Verify(v => v.UpgradeEpisodeFile(It.IsAny<EpisodeFile>(), _approvedDecisions.First().LocalEpisode),
|
|
|
|
Times.Once());
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_publish_EpisodeImportedEvent_for_new_downloads()
|
|
|
|
{
|
|
|
|
Subject.Import(new List<ImportDecision> { _approvedDecisions.First() }, true);
|
|
|
|
|
|
|
|
Mocker.GetMock<IMessageAggregator>()
|
|
|
|
.Verify(v => v.PublishEvent(It.IsAny<EpisodeImportedEvent>()), Times.Once());
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_not_move_existing_files()
|
|
|
|
{
|
|
|
|
Subject.Import(new List<ImportDecision> { _approvedDecisions.First() });
|
|
|
|
|
|
|
|
Mocker.GetMock<IUpgradeMediaFiles>()
|
|
|
|
.Verify(v => v.UpgradeEpisodeFile(It.IsAny<EpisodeFile>(), _approvedDecisions.First().LocalEpisode),
|
|
|
|
Times.Never());
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void should_not_trigger_EpisodeImportedEvent_for_existing_files()
|
|
|
|
{
|
|
|
|
Subject.Import(new List<ImportDecision> { _approvedDecisions.First() });
|
|
|
|
|
|
|
|
Mocker.GetMock<IMessageAggregator>()
|
|
|
|
.Verify(v => v.PublishEvent(It.IsAny<EpisodeImportedEvent>()), Times.Never());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|