diff --git a/NzbDrone.Core.Test/MediaFileTests/RenameEpisodeFileServiceFixture.cs b/NzbDrone.Core.Test/MediaFileTests/RenameEpisodeFileServiceFixture.cs new file mode 100644 index 000000000..989d1148c --- /dev/null +++ b/NzbDrone.Core.Test/MediaFileTests/RenameEpisodeFileServiceFixture.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using FizzWare.NBuilder; +using Moq; +using NUnit.Framework; +using NzbDrone.Common.Messaging; +using NzbDrone.Core.MediaFiles; +using NzbDrone.Core.MediaFiles.Commands; +using NzbDrone.Core.MediaFiles.Events; +using NzbDrone.Core.Tv; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.MediaFileTests +{ + 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.GetFilesBySeries(_series.Id)) + .Returns(new List()); + + Mocker.GetMock() + .Setup(s => s.GetFilesBySeason(_series.Id, _episodeFiles.First().SeasonNumber)) + .Returns(new List()); + } + + private void GivenEpisodeFiles() + { + Mocker.GetMock() + .Setup(s => s.GetFilesBySeries(_series.Id)) + .Returns(_episodeFiles); + + Mocker.GetMock() + .Setup(s => s.GetFilesBySeason(_series.Id, _episodeFiles.First().SeasonNumber)) + .Returns(_episodeFiles); + } + + private void GivenMovedFiles() + { + Mocker.GetMock() + .Setup(s => s.MoveEpisodeFile(It.IsAny(), _series)) + .Returns(_episodeFiles.First()); + } + + [Test] + public void should_not_publish_event_if_no_files_to_rename() + { + GivenNoEpisodeFiles(); + + Subject.Execute(new RenameSeriesCommand(_series.Id)); + + Mocker.GetMock() + .Verify(v => v.PublishEvent(It.IsAny()), Times.Never()); + } + + [Test] + public void should_not_publish_event_if_no_files_are_renamed() + { + GivenEpisodeFiles(); + + Subject.Execute(new RenameSeriesCommand(_series.Id)); + + 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 RenameSeriesCommand(_series.Id)); + + Mocker.GetMock() + .Verify(v => v.PublishEvent(It.IsAny()), Times.Once()); + } + + [Test] + public void should_update_moved_files() + { + GivenEpisodeFiles(); + GivenMovedFiles(); + + Subject.Execute(new RenameSeriesCommand(_series.Id)); + + Mocker.GetMock() + .Verify(v => v.Update(It.IsAny()), Times.Exactly(2)); + } + + [Test] + public void rename_season_should_get_episodefiles_for_season() + { + GivenEpisodeFiles(); + GivenMovedFiles(); + + Subject.Execute(new RenameSeasonCommand(_series.Id, _episodeFiles.First().SeasonNumber)); + + Mocker.GetMock() + .Verify(v => v.GetFilesBySeries(_series.Id), Times.Never()); + + Mocker.GetMock() + .Verify(v => v.GetFilesBySeason(_series.Id, _episodeFiles.First().SeasonNumber), Times.Once()); + } + + [Test] + public void rename_series_should_get_episodefiles_for_series() + { + GivenEpisodeFiles(); + GivenMovedFiles(); + + Subject.Execute(new RenameSeriesCommand(_series.Id)); + + Mocker.GetMock() + .Verify(v => v.GetFilesBySeries(_series.Id), Times.Once()); + + Mocker.GetMock() + .Verify(v => v.GetFilesBySeason(_series.Id, _episodeFiles.First().SeasonNumber), Times.Never()); + } + } +} diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 89e607835..c63ac3318 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -147,6 +147,7 @@ + diff --git a/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs b/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs index 51cb44e72..ea5be0e68 100644 --- a/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs +++ b/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs @@ -10,12 +10,7 @@ using NzbDrone.Core.Tv; namespace NzbDrone.Core.MediaFiles { - public interface IRenameEpisodeFiles - { - - } - - public class RenameEpisodeFileService : IRenameEpisodeFiles, IExecute, IExecute + public class RenameEpisodeFileService : IExecute, IExecute { private readonly ISeriesService _seriesService; private readonly IMediaFileService _mediaFileService;