using System.IO; using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.MovieImport; using NzbDrone.Core.Movies; using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.MediaFiles { public class UpgradeMediaFileServiceFixture : CoreTest { private MovieFile _movieFile; private LocalMovie _localMovie; [SetUp] public void Setup() { _localMovie = new LocalMovie(); _localMovie.Movie = new Movie { Path = @"C:\Test\Movies\Movie".AsOsAgnostic() }; _movieFile = Builder .CreateNew() .Build(); Mocker.GetMock() .Setup(c => c.FolderExists(Directory.GetParent(_localMovie.Movie.Path).FullName)) .Returns(true); Mocker.GetMock() .Setup(c => c.FileExists(It.IsAny())) .Returns(true); Mocker.GetMock() .Setup(c => c.GetParentFolder(It.IsAny())) .Returns(c => Path.GetDirectoryName(c)); } private void GivenSingleMovieWithSingleMovieFile() { _localMovie.Movie.MovieFileId = 1; _localMovie.Movie.MovieFile = new MovieFile { Id = 1, RelativePath = @"A.Movie.2019.avi", }; } [Test] public void should_delete_single_movie_file_once() { GivenSingleMovieWithSingleMovieFile(); Subject.UpgradeMovieFile(_movieFile, _localMovie); Mocker.GetMock().Verify(v => v.DeleteFile(It.IsAny(), It.IsAny()), Times.Once()); } [Test] public void should_delete_movie_file_from_database() { GivenSingleMovieWithSingleMovieFile(); Subject.UpgradeMovieFile(_movieFile, _localMovie); Mocker.GetMock().Verify(v => v.Delete(It.IsAny(), DeleteMediaFileReason.Upgrade), Times.Once()); } [Test] public void should_delete_existing_file_fromdb_if_file_doesnt_exist() { GivenSingleMovieWithSingleMovieFile(); Mocker.GetMock() .Setup(c => c.FileExists(It.IsAny())) .Returns(false); Subject.UpgradeMovieFile(_movieFile, _localMovie); Mocker.GetMock().Verify(v => v.Delete(_localMovie.Movie.MovieFile, DeleteMediaFileReason.Upgrade), Times.Once()); } [Test] public void should_not_try_to_recyclebin_existing_file_if_file_doesnt_exist() { GivenSingleMovieWithSingleMovieFile(); Mocker.GetMock() .Setup(c => c.FileExists(It.IsAny())) .Returns(false); Subject.UpgradeMovieFile(_movieFile, _localMovie); Mocker.GetMock().Verify(v => v.DeleteFile(It.IsAny(), It.IsAny()), Times.Never()); } [Test] public void should_return_old_movie_file_in_oldFiles() { GivenSingleMovieWithSingleMovieFile(); Subject.UpgradeMovieFile(_movieFile, _localMovie).OldFiles.Count.Should().Be(1); } [Test] public void should_throw_if_there_are_existing_movie_files_and_the_root_folder_is_missing() { GivenSingleMovieWithSingleMovieFile(); Mocker.GetMock() .Setup(c => c.FolderExists(Directory.GetParent(_localMovie.Movie.Path).FullName)) .Returns(false); Assert.Throws(() => Subject.UpgradeMovieFile(_movieFile, _localMovie)); Mocker.GetMock().Verify(v => v.Delete(_localMovie.Movie.MovieFile, DeleteMediaFileReason.Upgrade), Times.Never()); } } }