You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Readarr/src/NzbDrone.Core.Test/MediaFiles/UpgradeMediaFileServiceFixt...

139 lines
4.6 KiB

4 years ago
using System.Collections.Generic;
using System.IO;
using FizzWare.NBuilder;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Common.Disk;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Music;
using NzbDrone.Core.Parser.Model;
4 years ago
using NzbDrone.Core.RootFolders;
using NzbDrone.Core.Test.Framework;
using NzbDrone.Test.Common;
namespace NzbDrone.Core.Test.MediaFiles
{
public class UpgradeMediaFileServiceFixture : CoreTest<UpgradeMediaFileService>
{
4 years ago
private BookFile _trackFile;
private LocalTrack _localTrack;
private string _rootPath = @"C:\Test\Music\Artist".AsOsAgnostic();
[SetUp]
public void Setup()
{
_localTrack = new LocalTrack();
4 years ago
_localTrack.Artist = new Author
{
Path = _rootPath
};
4 years ago
_trackFile = Builder<BookFile>
.CreateNew()
.Build();
Mocker.GetMock<IDiskProvider>()
.Setup(c => c.FileExists(It.IsAny<string>()))
.Returns(true);
Mocker.GetMock<IDiskProvider>()
.Setup(c => c.FolderExists(It.IsAny<string>()))
.Returns(true);
Mocker.GetMock<IDiskProvider>()
.Setup(c => c.GetParentFolder(It.IsAny<string>()))
.Returns<string>(c => Path.GetDirectoryName(c));
4 years ago
Mocker.GetMock<IRootFolderService>()
.Setup(c => c.GetBestRootFolder(It.IsAny<string>()))
.Returns(new RootFolder());
}
4 years ago
private void GivenSingleTrackWithSingleTrackFile()
{
4 years ago
_localTrack.Album = Builder<Book>.CreateNew()
.With(e => e.BookFiles = new LazyLoaded<List<BookFile>>(
new List<BookFile>
{
new BookFile
{
Id = 1,
Path = Path.Combine(_rootPath, @"Season 01\30.rock.s01e01.avi"),
}
}))
.Build();
}
[Test]
public void should_delete_single_track_file_once()
{
GivenSingleTrackWithSingleTrackFile();
Subject.UpgradeTrackFile(_trackFile, _localTrack);
Mocker.GetMock<IRecycleBinProvider>().Verify(v => v.DeleteFile(It.IsAny<string>(), It.IsAny<string>()), Times.Once());
}
[Test]
public void should_delete_track_file_from_database()
{
GivenSingleTrackWithSingleTrackFile();
Subject.UpgradeTrackFile(_trackFile, _localTrack);
4 years ago
Mocker.GetMock<IMediaFileService>().Verify(v => v.Delete(It.IsAny<BookFile>(), DeleteMediaFileReason.Upgrade), Times.Once());
}
[Test]
public void should_delete_existing_file_fromdb_if_file_doesnt_exist()
{
GivenSingleTrackWithSingleTrackFile();
Mocker.GetMock<IDiskProvider>()
.Setup(c => c.FileExists(It.IsAny<string>()))
.Returns(false);
Subject.UpgradeTrackFile(_trackFile, _localTrack);
4 years ago
// Mocker.GetMock<IMediaFileService>().Verify(v => v.Delete(_localTrack.Album.BookFiles.Value, DeleteMediaFileReason.Upgrade), Times.Once());
}
[Test]
public void should_not_try_to_recyclebin_existing_file_if_file_doesnt_exist()
{
GivenSingleTrackWithSingleTrackFile();
Mocker.GetMock<IDiskProvider>()
.Setup(c => c.FileExists(It.IsAny<string>()))
.Returns(false);
Subject.UpgradeTrackFile(_trackFile, _localTrack);
Mocker.GetMock<IRecycleBinProvider>().Verify(v => v.DeleteFile(It.IsAny<string>(), It.IsAny<string>()), Times.Never());
}
[Test]
public void should_return_old_track_file_in_oldFiles()
{
GivenSingleTrackWithSingleTrackFile();
Subject.UpgradeTrackFile(_trackFile, _localTrack).OldFiles.Count.Should().Be(1);
}
[Test]
4 years ago
[Ignore("Pending readarr fix")]
public void should_import_if_existing_file_doesnt_exist_in_db()
{
4 years ago
_localTrack.Album = Builder<Book>.CreateNew()
.With(e => e.BookFiles = new LazyLoaded<List<BookFile>>())
.Build();
Subject.UpgradeTrackFile(_trackFile, _localTrack);
4 years ago
// Mocker.GetMock<IMediaFileService>().Verify(v => v.Delete(_localTrack.Album.BookFiles.Value, It.IsAny<DeleteMediaFileReason>()), Times.Never());
}
}
}