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.Music; using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.MediaFiles { public class RenameTrackFileServiceFixture : CoreTest { private Artist _artist; private List _trackFiles; [SetUp] public void Setup() { _artist = Builder.CreateNew() .Build(); _trackFiles = Builder.CreateListOfSize(2) .All() .With(e => e.Artist = _artist) .Build() .ToList(); Mocker.GetMock() .Setup(s => s.GetArtist(_artist.Id)) .Returns(_artist); } private void GivenNoTrackFiles() { Mocker.GetMock() .Setup(s => s.Get(It.IsAny>())) .Returns(new List()); } private void GivenTrackFiles() { Mocker.GetMock() .Setup(s => s.Get(It.IsAny>())) .Returns(_trackFiles); } private void GivenMovedFiles() { Mocker.GetMock() .Setup(s => s.MoveTrackFile(It.IsAny(), _artist)); } [Test] public void should_not_publish_event_if_no_files_to_rename() { GivenNoTrackFiles(); Subject.Execute(new RenameFilesCommand(_artist.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() { GivenTrackFiles(); Mocker.GetMock() .Setup(s => s.MoveTrackFile(It.IsAny(), It.IsAny())) .Throws(new SameFilenameException("Same file name", "Filename")); Subject.Execute(new RenameFilesCommand(_artist.Id, new List { 1 })); Mocker.GetMock() .Verify(v => v.PublishEvent(It.IsAny()), Times.Never()); } [Test] public void should_publish_event_if_files_are_renamed() { GivenTrackFiles(); GivenMovedFiles(); Subject.Execute(new RenameFilesCommand(_artist.Id, new List { 1 })); Mocker.GetMock() .Verify(v => v.PublishEvent(It.IsAny()), Times.Once()); } [Test] public void should_update_moved_files() { GivenTrackFiles(); GivenMovedFiles(); Subject.Execute(new RenameFilesCommand(_artist.Id, new List { 1 })); Mocker.GetMock() .Verify(v => v.Update(It.IsAny()), Times.Exactly(2)); } [Test] public void should_get_trackfiles_by_ids_only() { GivenTrackFiles(); GivenMovedFiles(); var files = new List { 1 }; Subject.Execute(new RenameFilesCommand(_artist.Id, files)); Mocker.GetMock() .Verify(v => v.Get(files), Times.Once()); } } }