using System; using System.Collections.Generic; using System.IO; using System.Linq; using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Common.Messaging; using NzbDrone.Core.Configuration; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.EpisodeImport; using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Qualities; using NzbDrone.Core.Tv; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.MediaFileTests { [TestFixture] public class ImportApprovedEpisodesFixture : CoreTest { private List _rejectedDecisions; private List _approvedDecisions; [SetUp] public void Setup() { _rejectedDecisions = new List(); _approvedDecisions = new List(); var series = Builder.CreateNew() .Build(); var episodes = Builder.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}, Path = @"C:\Test\TV\30 Rock\30 Rock - S01E01 - Pilit.avi", 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(); 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(); 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 {_approvedDecisions.First()}, true); Mocker.GetMock() .Verify(v => v.MoveEpisodeFile(It.IsAny(), _approvedDecisions.First().LocalEpisode), Times.Once()); } [Test] public void should_publish_EpisodeImportedEvent_for_new_downloads() { Subject.Import(new List { _approvedDecisions.First() }, true); Mocker.GetMock() .Verify(v => v.PublishEvent(It.IsAny()), Times.Once()); } [Test] public void should_not_move_existing_files() { Subject.Import(new List { _approvedDecisions.First() }); Mocker.GetMock() .Verify(v => v.MoveEpisodeFile(It.IsAny(), _approvedDecisions.First().LocalEpisode), Times.Never()); } [Test] public void should_not_trigger_EpisodeImportedEvent_for_existing_files() { Subject.Import(new List { _approvedDecisions.First() }); Mocker.GetMock() .Verify(v => v.PublishEvent(It.IsAny()), Times.Never()); } } }