using System.Collections.Generic; using System.Linq; using FizzWare.NBuilder; using Moq; using NUnit.Framework; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.Commands; using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Tv; namespace NzbDrone.Core.Test.MediaFiles { public class RenameEpisodeFileServiceFixture : CoreTest { private Series _series; private List _episodeFiles; [SetUp] public void Setup() { _series = Builder.CreateNew() .Build(); _episodeFiles = Builder.CreateListOfSize(2) .All() .With(e => e.SeriesId = _series.Id) .With(e => e.SeasonNumber = 1) .Build() .ToList(); Mocker.GetMock() .Setup(s => s.GetSeries(_series.Id)) .Returns(_series); } private void GivenNoEpisodeFiles() { Mocker.GetMock() .Setup(s => s.Get(It.IsAny>())) .Returns(new List()); } private void GivenEpisodeFiles() { Mocker.GetMock() .Setup(s => s.Get(It.IsAny>())) .Returns(_episodeFiles); } private void GivenMovedFiles() { Mocker.GetMock() .Setup(s => s.MoveEpisodeFile(It.IsAny(), _series)); } [Test] public void should_not_publish_event_if_no_files_to_rename() { GivenNoEpisodeFiles(); Subject.Execute(new RenameFilesCommand(_series.Id, new List{1})); Mocker.GetMock() .Verify(v => v.PublishEvent(It.IsAny()), Times.Never()); } [Test] public void should_not_publish_event_if_no_files_are_renamed() { GivenEpisodeFiles(); Mocker.GetMock() .Setup(s => s.MoveEpisodeFile(It.IsAny(), It.IsAny())) .Throws(new SameFilenameException("Same file name", "Filename")); Subject.Execute(new RenameFilesCommand(_series.Id, new List { 1 })); Mocker.GetMock() .Verify(v => v.PublishEvent(It.IsAny()), Times.Never()); } [Test] public void should_publish_event_if_files_are_renamed() { GivenEpisodeFiles(); GivenMovedFiles(); Subject.Execute(new RenameFilesCommand(_series.Id, new List { 1 })); Mocker.GetMock() .Verify(v => v.PublishEvent(It.IsAny()), Times.Once()); } [Test] public void should_update_moved_files() { GivenEpisodeFiles(); GivenMovedFiles(); Subject.Execute(new RenameFilesCommand(_series.Id, new List { 1 })); Mocker.GetMock() .Verify(v => v.Update(It.IsAny()), Times.Exactly(2)); } [Test] public void should_get_episodefiles_by_ids_only() { GivenEpisodeFiles(); GivenMovedFiles(); var files = new List { 1 }; Subject.Execute(new RenameFilesCommand(_series.Id, files)); Mocker.GetMock() .Verify(v => v.Get(files), Times.Once()); } } }