mirror of
https://github.com/Readarr/Readarr.git
synced 2026-04-25 22:36:59 -04:00
New: Readarr 0.1
This commit is contained in:
@@ -17,6 +17,7 @@ using NzbDrone.Test.Common;
|
||||
namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Readarr doesn't currently support audio")]
|
||||
public class AudioTagServiceFixture : CoreTest<AudioTagService>
|
||||
{
|
||||
public static class TestCaseFactory
|
||||
@@ -195,40 +196,6 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
VerifySame(writtentags, _testTags, skipProperties);
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCaseSource(typeof(TestCaseFactory), "TestCases")]
|
||||
public void should_remove_mb_tags(string filename, string[] skipProperties)
|
||||
{
|
||||
GivenFileCopy(filename);
|
||||
var path = _copiedFile;
|
||||
|
||||
var track = new TrackFile
|
||||
{
|
||||
Path = path
|
||||
};
|
||||
|
||||
_testTags.Write(path);
|
||||
|
||||
var withmb = Subject.ReadAudioTag(path);
|
||||
|
||||
VerifySame(withmb, _testTags, skipProperties);
|
||||
|
||||
Subject.RemoveMusicBrainzTags(track);
|
||||
|
||||
var tag = Subject.ReadAudioTag(path);
|
||||
|
||||
tag.MusicBrainzReleaseCountry.Should().BeNull();
|
||||
tag.MusicBrainzReleaseStatus.Should().BeNull();
|
||||
tag.MusicBrainzReleaseType.Should().BeNull();
|
||||
tag.MusicBrainzReleaseId.Should().BeNull();
|
||||
tag.MusicBrainzArtistId.Should().BeNull();
|
||||
tag.MusicBrainzReleaseArtistId.Should().BeNull();
|
||||
tag.MusicBrainzReleaseGroupId.Should().BeNull();
|
||||
tag.MusicBrainzTrackId.Should().BeNull();
|
||||
tag.MusicBrainzAlbumComment.Should().BeNull();
|
||||
tag.MusicBrainzReleaseTrackId.Should().BeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCaseSource(typeof(TestCaseFactory), "TestCases")]
|
||||
public void should_read_audiotag_from_file_with_no_tags(string filename, string[] skipProperties)
|
||||
@@ -337,40 +304,19 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
tag.OriginalReleaseDate.HasValue.Should().BeFalse();
|
||||
}
|
||||
|
||||
private TrackFile GivenPopulatedTrackfile(int mediumOffset)
|
||||
private BookFile GivenPopulatedTrackfile(int mediumOffset)
|
||||
{
|
||||
var meta = Builder<ArtistMetadata>.CreateNew().Build();
|
||||
var artist = Builder<Artist>.CreateNew()
|
||||
var meta = Builder<AuthorMetadata>.CreateNew().Build();
|
||||
var artist = Builder<Author>.CreateNew()
|
||||
.With(x => x.Metadata = meta)
|
||||
.Build();
|
||||
|
||||
var album = Builder<Album>.CreateNew()
|
||||
.With(x => x.Artist = artist)
|
||||
var album = Builder<Book>.CreateNew()
|
||||
.With(x => x.Author = artist)
|
||||
.Build();
|
||||
|
||||
var media = Builder<Medium>.CreateListOfSize(2).Build() as List<Medium>;
|
||||
media.ForEach(x => x.Number += mediumOffset);
|
||||
|
||||
var release = Builder<AlbumRelease>.CreateNew()
|
||||
var file = Builder<BookFile>.CreateNew()
|
||||
.With(x => x.Album = album)
|
||||
.With(x => x.Media = media)
|
||||
.With(x => x.Country = new List<string>())
|
||||
.With(x => x.Label = new List<string>())
|
||||
.Build();
|
||||
|
||||
var tracks = Builder<Track>.CreateListOfSize(10)
|
||||
.All()
|
||||
.With(x => x.AlbumRelease = release)
|
||||
.With(x => x.ArtistMetadata = meta)
|
||||
.TheFirst(5)
|
||||
.With(x => x.MediumNumber = 1 + mediumOffset)
|
||||
.TheNext(5)
|
||||
.With(x => x.MediumNumber = 2 + mediumOffset)
|
||||
.Build() as List<Track>;
|
||||
release.Tracks = tracks;
|
||||
|
||||
var file = Builder<TrackFile>.CreateNew()
|
||||
.With(x => x.Tracks = new List<Track> { tracks[0] })
|
||||
.With(x => x.Artist = artist)
|
||||
.Build();
|
||||
|
||||
@@ -382,8 +328,6 @@ namespace NzbDrone.Core.Test.MediaFiles.AudioTagServiceFixture
|
||||
{
|
||||
var file = GivenPopulatedTrackfile(0);
|
||||
var tag = Subject.GetTrackMetadata(file);
|
||||
|
||||
tag.MusicBrainzReleaseCountry.Should().BeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
[TestFixture]
|
||||
public class ScanFixture : FileSystemTest<DiskScanService>
|
||||
{
|
||||
private Artist _artist;
|
||||
private Author _artist;
|
||||
private string _rootFolder;
|
||||
private string _otherArtistFolder;
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
_otherArtistFolder = @"C:\Test\Music\OtherArtist".AsOsAgnostic();
|
||||
var artistFolder = @"C:\Test\Music\Artist".AsOsAgnostic();
|
||||
|
||||
_artist = Builder<Artist>.CreateNew()
|
||||
_artist = Builder<Author>.CreateNew()
|
||||
.With(s => s.Path = artistFolder)
|
||||
.Build();
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
Mocker.GetMock<IArtistService>()
|
||||
.Setup(s => s.GetArtists(It.IsAny<List<int>>()))
|
||||
.Returns(new List<Artist>());
|
||||
.Returns(new List<Author>());
|
||||
|
||||
Mocker.GetMock<IMakeImportDecision>()
|
||||
.Setup(v => v.GetImportDecisions(It.IsAny<List<IFileInfo>>(), It.IsAny<IdentificationOverrides>(), It.IsAny<ImportDecisionMakerInfo>(), It.IsAny<ImportDecisionMakerConfig>()))
|
||||
@@ -53,11 +53,11 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Setup(v => v.GetFilesByArtist(It.IsAny<int>()))
|
||||
.Returns(new List<TrackFile>());
|
||||
.Returns(new List<BookFile>());
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Setup(v => v.GetFilesWithBasePath(It.IsAny<string>()))
|
||||
.Returns(new List<TrackFile>());
|
||||
.Returns(new List<BookFile>());
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Setup(v => v.FilterUnchangedFiles(It.IsAny<List<IFileInfo>>(), It.IsAny<FilterFilesType>()))
|
||||
@@ -105,7 +105,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Setup(x => x.GetFilesWithBasePath(_artist.Path))
|
||||
.Returns(files.Select(x => new TrackFile
|
||||
.Returns(files.Select(x => new BookFile
|
||||
{
|
||||
Path = x,
|
||||
Modified = lastWrite.Value.UtcDateTime
|
||||
@@ -168,8 +168,8 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
GivenFiles(new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "file1.flac"),
|
||||
Path.Combine(_artist.Path, "s01e01.flac")
|
||||
Path.Combine(_artist.Path, "file1.mobi"),
|
||||
Path.Combine(_artist.Path, "s01e01.mobi")
|
||||
});
|
||||
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
@@ -185,11 +185,11 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
GivenFiles(new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "EXTRAS", "file1.flac"),
|
||||
Path.Combine(_artist.Path, "Extras", "file2.flac"),
|
||||
Path.Combine(_artist.Path, "EXTRAs", "file3.flac"),
|
||||
Path.Combine(_artist.Path, "ExTrAs", "file4.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, "EXTRAS", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, "Extras", "file2.mobi"),
|
||||
Path.Combine(_artist.Path, "EXTRAs", "file3.mobi"),
|
||||
Path.Combine(_artist.Path, "ExTrAs", "file4.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
});
|
||||
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
@@ -205,9 +205,9 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
GivenFiles(new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, ".AppleDouble", "file1.flac"),
|
||||
Path.Combine(_artist.Path, ".appledouble", "file2.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, ".AppleDouble", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, ".appledouble", "file2.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
});
|
||||
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
@@ -225,12 +225,12 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
GivenFiles(new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "Extras", "file1.flac"),
|
||||
Path.Combine(_artist.Path, ".AppleDouble", "file2.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e02.flac"),
|
||||
Path.Combine(_artist.Path, "Season 2", "s02e01.flac"),
|
||||
Path.Combine(_artist.Path, "Season 2", "s02e02.flac"),
|
||||
Path.Combine(_artist.Path, "Extras", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, ".AppleDouble", "file2.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e02.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 2", "s02e01.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 2", "s02e02.mobi"),
|
||||
});
|
||||
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
@@ -246,7 +246,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
GivenFiles(new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "Album 1", ".t01.mp3")
|
||||
Path.Combine(_artist.Path, "Album 1", ".t01.mobi")
|
||||
});
|
||||
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
@@ -262,10 +262,10 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
GivenFiles(new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, ".@__thumb", "file1.flac"),
|
||||
Path.Combine(_artist.Path, ".@__THUMB", "file2.flac"),
|
||||
Path.Combine(_artist.Path, ".hidden", "file2.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, ".@__thumb", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, ".@__THUMB", "file2.mobi"),
|
||||
Path.Combine(_artist.Path, ".hidden", "file2.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
});
|
||||
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
@@ -281,11 +281,11 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
GivenFiles(new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "Season 1", ".@__thumb", "file1.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", ".@__THUMB", "file2.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", ".hidden", "file2.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", ".AppleDouble", "s01e01.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, "Season 1", ".@__thumb", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", ".@__THUMB", "file2.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", ".hidden", "file2.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", ".AppleDouble", "s01e01.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
});
|
||||
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
@@ -301,8 +301,8 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
GivenFiles(new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "@eaDir", "file1.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, "@eaDir", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
});
|
||||
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
@@ -318,8 +318,8 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
GivenFiles(new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, ".@__thumb", "file1.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, ".@__thumb", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
});
|
||||
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
@@ -337,8 +337,8 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
|
||||
GivenFiles(new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
});
|
||||
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
@@ -355,8 +355,8 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
GivenFiles(new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, ".DS_STORE"),
|
||||
Path.Combine(_artist.Path, "._24 The Status Quo Combustion.flac"),
|
||||
Path.Combine(_artist.Path, "24 The Status Quo Combustion.flac")
|
||||
Path.Combine(_artist.Path, "._24 The Status Quo Combustion.mobi"),
|
||||
Path.Combine(_artist.Path, "24 The Status Quo Combustion.mobi")
|
||||
});
|
||||
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
@@ -386,8 +386,8 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
{
|
||||
var files = new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
};
|
||||
|
||||
GivenFiles(files);
|
||||
@@ -397,7 +397,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(x => x.AddMany(It.Is<List<TrackFile>>(l => l.Select(t => t.Path).SequenceEqual(files))),
|
||||
.Verify(x => x.AddMany(It.Is<List<BookFile>>(l => l.Select(t => t.Path).SequenceEqual(files))),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
@@ -406,8 +406,8 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
{
|
||||
var files = new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
};
|
||||
|
||||
GivenFiles(files);
|
||||
@@ -417,7 +417,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(x => x.AddMany(It.Is<List<TrackFile>>(l => l.Select(t => t.Path).SequenceEqual(files.GetRange(0, 1)))),
|
||||
.Verify(x => x.AddMany(It.Is<List<BookFile>>(l => l.Select(t => t.Path).SequenceEqual(files.GetRange(0, 1)))),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
@@ -426,8 +426,8 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
{
|
||||
var files = new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
};
|
||||
|
||||
GivenFiles(files);
|
||||
@@ -437,11 +437,11 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(x => x.AddMany(It.Is<List<TrackFile>>(l => l.Count == 0)),
|
||||
.Verify(x => x.AddMany(It.Is<List<BookFile>>(l => l.Count == 0)),
|
||||
Times.Once());
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(x => x.AddMany(It.Is<List<TrackFile>>(l => l.Count > 0)),
|
||||
.Verify(x => x.AddMany(It.Is<List<BookFile>>(l => l.Count > 0)),
|
||||
Times.Never());
|
||||
}
|
||||
|
||||
@@ -450,8 +450,8 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
{
|
||||
var files = new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
};
|
||||
|
||||
GivenFiles(files);
|
||||
@@ -461,11 +461,11 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(x => x.Update(It.Is<List<TrackFile>>(l => l.Count == 0)),
|
||||
.Verify(x => x.Update(It.Is<List<BookFile>>(l => l.Count == 0)),
|
||||
Times.Once());
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(x => x.Update(It.Is<List<TrackFile>>(l => l.Count > 0)),
|
||||
.Verify(x => x.Update(It.Is<List<BookFile>>(l => l.Count > 0)),
|
||||
Times.Never());
|
||||
}
|
||||
|
||||
@@ -474,8 +474,8 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
{
|
||||
var files = new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.flac")
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.mobi"),
|
||||
Path.Combine(_artist.Path, "Season 1", "s01e01.mobi")
|
||||
};
|
||||
|
||||
GivenFiles(files, new DateTime(2019, 2, 1));
|
||||
@@ -485,7 +485,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(x => x.Update(It.Is<List<TrackFile>>(l => l.Count == 2)),
|
||||
.Verify(x => x.Update(It.Is<List<BookFile>>(l => l.Count == 2)),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
@@ -494,7 +494,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
{
|
||||
var files = new List<string>
|
||||
{
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.flac"),
|
||||
Path.Combine(_artist.Path, "Season 1", "file1.mobi"),
|
||||
};
|
||||
|
||||
GivenKnownFiles(files);
|
||||
@@ -505,7 +505,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
.With(x => x.Path = files[0])
|
||||
.With(x => x.Modified = new DateTime(2019, 2, 1))
|
||||
.With(x => x.Size = 100)
|
||||
.With(x => x.Quality = new QualityModel(Quality.FLAC))
|
||||
.With(x => x.Quality = new QualityModel(Quality.MOBI))
|
||||
.With(x => x.FileTrackInfo = new ParsedTrackInfo
|
||||
{
|
||||
MediaInfo = Builder<MediaInfoModel>.CreateNew().Build()
|
||||
@@ -519,7 +519,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests
|
||||
Subject.Scan(new List<string> { _artist.Path });
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(x => x.Update(It.Is<List<TrackFile>>(
|
||||
.Verify(x => x.Update(It.Is<List<BookFile>>(
|
||||
l => l.Count == 1 &&
|
||||
l[0].Path == localTrack.Path &&
|
||||
l[0].Modified == localTrack.Modified &&
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
.Returns(new List<ImportResult>());
|
||||
|
||||
Mocker.GetMock<IDownloadedTracksImportService>()
|
||||
.Setup(v => v.ProcessPath(It.IsAny<string>(), It.IsAny<ImportMode>(), It.IsAny<Artist>(), It.IsAny<DownloadClientItem>()))
|
||||
.Setup(v => v.ProcessPath(It.IsAny<string>(), It.IsAny<ImportMode>(), It.IsAny<Author>(), It.IsAny<DownloadClientItem>()))
|
||||
.Returns(new List<ImportResult>());
|
||||
|
||||
var downloadItem = Builder<DownloadClientItem>.CreateNew()
|
||||
@@ -42,7 +42,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
.Build();
|
||||
|
||||
var remoteAlbum = Builder<RemoteAlbum>.CreateNew()
|
||||
.With(v => v.Artist = new Artist())
|
||||
.With(v => v.Artist = new Author())
|
||||
.Build();
|
||||
|
||||
_trackedDownload = new TrackedDownload
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
.Build();
|
||||
|
||||
var remoteAlbum = Builder<RemoteAlbum>.CreateNew()
|
||||
.With(v => v.Artist = new Artist())
|
||||
.With(v => v.Artist = new Author())
|
||||
.Build();
|
||||
|
||||
_trackedDownload = new TrackedDownload
|
||||
@@ -73,7 +73,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
{
|
||||
Mocker.GetMock<IParsingService>()
|
||||
.Setup(s => s.GetArtist(It.IsAny<string>()))
|
||||
.Returns(Builder<Artist>.CreateNew().Build());
|
||||
.Returns(Builder<Author>.CreateNew().Build());
|
||||
}
|
||||
|
||||
private void GivenSuccessfulImport()
|
||||
@@ -125,7 +125,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
[Test]
|
||||
public void should_skip_if_no_artist_found()
|
||||
{
|
||||
Mocker.GetMock<IParsingService>().Setup(c => c.GetArtist("foldername")).Returns((Artist)null);
|
||||
Mocker.GetMock<IParsingService>().Setup(c => c.GetArtist("foldername")).Returns((Author)null);
|
||||
|
||||
Subject.ProcessRootFolder(DiskProvider.GetDirectoryInfo(_droneFactory));
|
||||
|
||||
|
||||
@@ -34,56 +34,41 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
_rejectedDecisions = new List<ImportDecision<LocalTrack>>();
|
||||
_approvedDecisions = new List<ImportDecision<LocalTrack>>();
|
||||
|
||||
var artist = Builder<Artist>.CreateNew()
|
||||
var artist = Builder<Author>.CreateNew()
|
||||
.With(e => e.QualityProfile = new QualityProfile { Items = Qualities.QualityFixture.GetDefaultQualities() })
|
||||
.With(s => s.Path = @"C:\Test\Music\Alien Ant Farm".AsOsAgnostic())
|
||||
.Build();
|
||||
|
||||
var album = Builder<Album>.CreateNew()
|
||||
.With(e => e.Artist = artist)
|
||||
var album = Builder<Book>.CreateNew()
|
||||
.With(e => e.Author = artist)
|
||||
.Build();
|
||||
|
||||
var release = Builder<AlbumRelease>.CreateNew()
|
||||
.With(e => e.AlbumId = album.Id)
|
||||
.With(e => e.Monitored = true)
|
||||
.Build();
|
||||
|
||||
album.AlbumReleases = new List<AlbumRelease> { release };
|
||||
|
||||
var tracks = Builder<Track>.CreateListOfSize(5)
|
||||
.Build();
|
||||
|
||||
_rejectedDecisions.Add(new ImportDecision<LocalTrack>(new LocalTrack(), new Rejection("Rejected!")));
|
||||
_rejectedDecisions.Add(new ImportDecision<LocalTrack>(new LocalTrack(), new Rejection("Rejected!")));
|
||||
_rejectedDecisions.Add(new ImportDecision<LocalTrack>(new LocalTrack(), new Rejection("Rejected!")));
|
||||
|
||||
foreach (var track in tracks)
|
||||
{
|
||||
_approvedDecisions.Add(new ImportDecision<LocalTrack>(
|
||||
new LocalTrack
|
||||
_approvedDecisions.Add(new ImportDecision<LocalTrack>(
|
||||
new LocalTrack
|
||||
{
|
||||
Artist = artist,
|
||||
Album = album,
|
||||
Path = Path.Combine(artist.Path, "Alien Ant Farm - 01 - Pilot.mp3"),
|
||||
Quality = new QualityModel(Quality.MP3_320),
|
||||
FileTrackInfo = new ParsedTrackInfo
|
||||
{
|
||||
Artist = artist,
|
||||
Album = album,
|
||||
Release = release,
|
||||
Tracks = new List<Track> { track },
|
||||
Path = Path.Combine(artist.Path, "Alien Ant Farm - 01 - Pilot.mp3"),
|
||||
Quality = new QualityModel(Quality.MP3_256),
|
||||
FileTrackInfo = new ParsedTrackInfo
|
||||
{
|
||||
ReleaseGroup = "DRONE"
|
||||
}
|
||||
}));
|
||||
}
|
||||
ReleaseGroup = "DRONE"
|
||||
}
|
||||
}));
|
||||
|
||||
Mocker.GetMock<IUpgradeMediaFiles>()
|
||||
.Setup(s => s.UpgradeTrackFile(It.IsAny<TrackFile>(), It.IsAny<LocalTrack>(), It.IsAny<bool>()))
|
||||
.Setup(s => s.UpgradeTrackFile(It.IsAny<BookFile>(), It.IsAny<LocalTrack>(), It.IsAny<bool>()))
|
||||
.Returns(new TrackFileMoveResult());
|
||||
|
||||
_downloadClientItem = Builder<DownloadClientItem>.CreateNew().Build();
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Setup(s => s.GetFilesByAlbum(It.IsAny<int>()))
|
||||
.Returns(new List<TrackFile>());
|
||||
.Returns(new List<BookFile>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -91,13 +76,13 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
{
|
||||
Subject.Import(_rejectedDecisions, false).Where(i => i.Result == ImportResultType.Imported).Should().BeEmpty();
|
||||
|
||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Add(It.IsAny<TrackFile>()), Times.Never());
|
||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Add(It.IsAny<BookFile>()), Times.Never());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_import_each_approved()
|
||||
{
|
||||
Subject.Import(_approvedDecisions, false).Should().HaveCount(5);
|
||||
Subject.Import(_approvedDecisions, false).Should().HaveCount(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -131,7 +116,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
Subject.Import(new List<ImportDecision<LocalTrack>> { _approvedDecisions.First() }, true);
|
||||
|
||||
Mocker.GetMock<IUpgradeMediaFiles>()
|
||||
.Verify(v => v.UpgradeTrackFile(It.IsAny<TrackFile>(), _approvedDecisions.First().Item, false),
|
||||
.Verify(v => v.UpgradeTrackFile(It.IsAny<BookFile>(), _approvedDecisions.First().Item, false),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
@@ -152,7 +137,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
Subject.Import(new List<ImportDecision<LocalTrack>> { track }, false);
|
||||
|
||||
Mocker.GetMock<IUpgradeMediaFiles>()
|
||||
.Verify(v => v.UpgradeTrackFile(It.IsAny<TrackFile>(), _approvedDecisions.First().Item, false),
|
||||
.Verify(v => v.UpgradeTrackFile(It.IsAny<BookFile>(), _approvedDecisions.First().Item, false),
|
||||
Times.Never());
|
||||
}
|
||||
|
||||
@@ -167,9 +152,8 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
{
|
||||
Artist = fileDecision.Item.Artist,
|
||||
Album = fileDecision.Item.Album,
|
||||
Tracks = new List<Track> { fileDecision.Item.Tracks.First() },
|
||||
Path = @"C:\Test\Music\Alien Ant Farm\Alien Ant Farm - 01 - Pilot.mp3".AsOsAgnostic(),
|
||||
Quality = new QualityModel(Quality.MP3_256),
|
||||
Quality = new QualityModel(Quality.MP3_320),
|
||||
Size = 80.Megabytes()
|
||||
});
|
||||
|
||||
@@ -190,7 +174,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
Subject.Import(new List<ImportDecision<LocalTrack>> { _approvedDecisions.First() }, true, new DownloadClientItem { Title = "Alien.Ant.Farm-Truant", CanMoveFiles = false });
|
||||
|
||||
Mocker.GetMock<IUpgradeMediaFiles>()
|
||||
.Verify(v => v.UpgradeTrackFile(It.IsAny<TrackFile>(), _approvedDecisions.First().Item, true), Times.Once());
|
||||
.Verify(v => v.UpgradeTrackFile(It.IsAny<BookFile>(), _approvedDecisions.First().Item, true), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -199,7 +183,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
Subject.Import(new List<ImportDecision<LocalTrack>> { _approvedDecisions.First() }, true, new DownloadClientItem { Title = "Alien.Ant.Farm-Truant", CanMoveFiles = false }, ImportMode.Move);
|
||||
|
||||
Mocker.GetMock<IUpgradeMediaFiles>()
|
||||
.Verify(v => v.UpgradeTrackFile(It.IsAny<TrackFile>(), _approvedDecisions.First().Item, false), Times.Once());
|
||||
.Verify(v => v.UpgradeTrackFile(It.IsAny<BookFile>(), _approvedDecisions.First().Item, false), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -207,14 +191,14 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
{
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Setup(s => s.GetFileWithPath(It.IsAny<string>()))
|
||||
.Returns(Builder<TrackFile>.CreateNew().Build());
|
||||
.Returns(Builder<BookFile>.CreateNew().Build());
|
||||
|
||||
var track = _approvedDecisions.First();
|
||||
track.Item.ExistingFile = true;
|
||||
Subject.Import(new List<ImportDecision<LocalTrack>> { track }, false);
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(v => v.Delete(It.IsAny<TrackFile>(), DeleteMediaFileReason.ManualOverride), Times.Once());
|
||||
.Verify(v => v.Delete(It.IsAny<BookFile>(), DeleteMediaFileReason.ManualOverride), Times.Once());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -15,17 +15,17 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaFileDeletionService
|
||||
public class DeleteTrackFileFixture : CoreTest<Core.MediaFiles.MediaFileDeletionService>
|
||||
{
|
||||
private static readonly string RootFolder = @"C:\Test\Music";
|
||||
private Artist _artist;
|
||||
private TrackFile _trackFile;
|
||||
private Author _artist;
|
||||
private BookFile _trackFile;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_artist = Builder<Artist>.CreateNew()
|
||||
_artist = Builder<Author>.CreateNew()
|
||||
.With(s => s.Path = Path.Combine(RootFolder, "Artist Name"))
|
||||
.Build();
|
||||
|
||||
_trackFile = Builder<TrackFile>.CreateNew()
|
||||
_trackFile = Builder<BookFile>.CreateNew()
|
||||
.With(f => f.Path = "/Artist Name - Track01")
|
||||
.Build();
|
||||
|
||||
|
||||
@@ -12,76 +12,43 @@ using NzbDrone.Test.Common;
|
||||
namespace NzbDrone.Core.Test.MediaFiles
|
||||
{
|
||||
[TestFixture]
|
||||
public class MediaFileRepositoryFixture : DbTest<MediaFileRepository, TrackFile>
|
||||
public class MediaFileRepositoryFixture : DbTest<MediaFileRepository, BookFile>
|
||||
{
|
||||
private Artist _artist;
|
||||
private Album _album;
|
||||
private List<AlbumRelease> _releases;
|
||||
private Author _artist;
|
||||
private Book _album;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
var meta = Builder<ArtistMetadata>.CreateNew()
|
||||
var meta = Builder<AuthorMetadata>.CreateNew()
|
||||
.With(a => a.Id = 0)
|
||||
.Build();
|
||||
Db.Insert(meta);
|
||||
|
||||
_artist = Builder<Artist>.CreateNew()
|
||||
.With(a => a.ArtistMetadataId = meta.Id)
|
||||
_artist = Builder<Author>.CreateNew()
|
||||
.With(a => a.AuthorMetadataId = meta.Id)
|
||||
.With(a => a.Id = 0)
|
||||
.Build();
|
||||
Db.Insert(_artist);
|
||||
|
||||
_album = Builder<Album>.CreateNew()
|
||||
_album = Builder<Book>.CreateNew()
|
||||
.With(a => a.Id = 0)
|
||||
.With(a => a.ArtistMetadataId = _artist.ArtistMetadataId)
|
||||
.With(a => a.AuthorMetadataId = _artist.AuthorMetadataId)
|
||||
.Build();
|
||||
Db.Insert(_album);
|
||||
|
||||
_releases = Builder<AlbumRelease>.CreateListOfSize(2)
|
||||
.All()
|
||||
.With(a => a.Id = 0)
|
||||
.With(a => a.AlbumId = _album.Id)
|
||||
.TheFirst(1)
|
||||
.With(a => a.Monitored = true)
|
||||
.TheNext(1)
|
||||
.With(a => a.Monitored = false)
|
||||
.Build().ToList();
|
||||
Db.InsertMany(_releases);
|
||||
|
||||
var files = Builder<TrackFile>.CreateListOfSize(10)
|
||||
var files = Builder<BookFile>.CreateListOfSize(10)
|
||||
.All()
|
||||
.With(c => c.Id = 0)
|
||||
.With(c => c.Quality = new QualityModel(Quality.MP3_192))
|
||||
.With(c => c.Quality = new QualityModel(Quality.MP3_320))
|
||||
.TheFirst(5)
|
||||
.With(c => c.AlbumId = _album.Id)
|
||||
.With(c => c.BookId = _album.Id)
|
||||
.TheFirst(1)
|
||||
.With(c => c.Path = @"C:\Test\Path\Artist\somefile1.flac".AsOsAgnostic())
|
||||
.TheNext(1)
|
||||
.With(c => c.Path = @"C:\Test\Path\Artist\somefile2.flac".AsOsAgnostic())
|
||||
.BuildListOfNew();
|
||||
Db.InsertMany(files);
|
||||
|
||||
var track = Builder<Track>.CreateListOfSize(10)
|
||||
.All()
|
||||
.With(a => a.Id = 0)
|
||||
.TheFirst(4)
|
||||
.With(a => a.AlbumReleaseId = _releases[0].Id)
|
||||
.TheFirst(1)
|
||||
.With(a => a.TrackFileId = files[0].Id)
|
||||
.TheNext(1)
|
||||
.With(a => a.TrackFileId = files[1].Id)
|
||||
.TheNext(1)
|
||||
.With(a => a.TrackFileId = files[2].Id)
|
||||
.TheNext(1)
|
||||
.With(a => a.TrackFileId = files[3].Id)
|
||||
.TheNext(1)
|
||||
.With(a => a.TrackFileId = files[4].Id)
|
||||
.With(a => a.AlbumReleaseId = _releases[1].Id)
|
||||
.TheNext(5)
|
||||
.With(a => a.TrackFileId = 0)
|
||||
.Build();
|
||||
Db.InsertMany(track);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -104,19 +71,6 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
unmappedfiles.Should().HaveCount(5);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void get_files_by_release()
|
||||
{
|
||||
VerifyData();
|
||||
var firstReleaseFiles = Subject.GetFilesByRelease(_releases[0].Id);
|
||||
var secondReleaseFiles = Subject.GetFilesByRelease(_releases[1].Id);
|
||||
VerifyEagerLoaded(firstReleaseFiles);
|
||||
VerifyEagerLoaded(secondReleaseFiles);
|
||||
|
||||
firstReleaseFiles.Should().HaveCount(4);
|
||||
secondReleaseFiles.Should().HaveCount(1);
|
||||
}
|
||||
|
||||
[TestCase("C:\\Test\\Path")]
|
||||
[TestCase("C:\\Test\\Path\\")]
|
||||
public void get_files_by_base_path_should_cope_with_trailing_slash(string dir)
|
||||
@@ -133,10 +87,10 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
{
|
||||
VerifyData();
|
||||
|
||||
var files = Builder<TrackFile>.CreateListOfSize(2)
|
||||
var files = Builder<BookFile>.CreateListOfSize(2)
|
||||
.All()
|
||||
.With(c => c.Id = 0)
|
||||
.With(c => c.Quality = new QualityModel(Quality.MP3_192))
|
||||
.With(c => c.Quality = new QualityModel(Quality.MP3_320))
|
||||
.TheFirst(1)
|
||||
.With(c => c.Path = @"C:\Test\Path2\Artist\somefile1.flac".AsOsAgnostic())
|
||||
.TheNext(1)
|
||||
@@ -155,25 +109,12 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
var file = Subject.GetFileWithPath(@"C:\Test\Path\Artist\somefile2.flac".AsOsAgnostic());
|
||||
|
||||
file.Should().NotBeNull();
|
||||
file.Tracks.IsLoaded.Should().BeTrue();
|
||||
file.Tracks.Value.Should().NotBeNull();
|
||||
file.Tracks.Value.Should().NotBeEmpty();
|
||||
file.Album.IsLoaded.Should().BeTrue();
|
||||
file.Album.Value.Should().NotBeNull();
|
||||
file.Artist.IsLoaded.Should().BeTrue();
|
||||
file.Artist.Value.Should().NotBeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void get_files_by_artist_should_only_return_tracks_for_monitored_releases()
|
||||
{
|
||||
VerifyData();
|
||||
var artistFiles = Subject.GetFilesByArtist(_artist.Id);
|
||||
VerifyEagerLoaded(artistFiles);
|
||||
|
||||
artistFiles.Should().HaveCount(4);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void get_files_by_album()
|
||||
{
|
||||
@@ -181,34 +122,20 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
var files = Subject.GetFilesByAlbum(_album.Id);
|
||||
VerifyEagerLoaded(files);
|
||||
|
||||
files.Should().OnlyContain(c => c.AlbumId == _album.Id);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void get_files_by_album_should_only_return_tracks_for_monitored_releases()
|
||||
{
|
||||
VerifyData();
|
||||
var files = Subject.GetFilesByAlbum(_album.Id);
|
||||
VerifyEagerLoaded(files);
|
||||
|
||||
files.Should().HaveCount(4);
|
||||
files.Should().OnlyContain(c => c.BookId == _album.Id);
|
||||
}
|
||||
|
||||
private void VerifyData()
|
||||
{
|
||||
Db.All<Artist>().Should().HaveCount(1);
|
||||
Db.All<Album>().Should().HaveCount(1);
|
||||
Db.All<Track>().Should().HaveCount(10);
|
||||
Db.All<TrackFile>().Should().HaveCount(10);
|
||||
Db.All<Author>().Should().HaveCount(1);
|
||||
Db.All<Book>().Should().HaveCount(1);
|
||||
Db.All<BookFile>().Should().HaveCount(10);
|
||||
}
|
||||
|
||||
private void VerifyEagerLoaded(List<TrackFile> files)
|
||||
private void VerifyEagerLoaded(List<BookFile> files)
|
||||
{
|
||||
foreach (var file in files)
|
||||
{
|
||||
file.Tracks.IsLoaded.Should().BeTrue();
|
||||
file.Tracks.Value.Should().NotBeNull();
|
||||
file.Tracks.Value.Should().NotBeEmpty();
|
||||
file.Album.IsLoaded.Should().BeTrue();
|
||||
file.Album.Value.Should().NotBeNull();
|
||||
file.Artist.IsLoaded.Should().BeTrue();
|
||||
@@ -218,13 +145,10 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
}
|
||||
}
|
||||
|
||||
private void VerifyUnmapped(List<TrackFile> files)
|
||||
private void VerifyUnmapped(List<BookFile> files)
|
||||
{
|
||||
foreach (var file in files)
|
||||
{
|
||||
file.Tracks.IsLoaded.Should().BeFalse();
|
||||
file.Tracks.Value.Should().NotBeNull();
|
||||
file.Tracks.Value.Should().BeEmpty();
|
||||
file.Album.IsLoaded.Should().BeFalse();
|
||||
file.Album.Value.Should().BeNull();
|
||||
file.Artist.IsLoaded.Should().BeFalse();
|
||||
@@ -238,7 +162,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
Db.Delete(_album);
|
||||
Subject.DeleteFilesByAlbum(_album.Id);
|
||||
|
||||
Db.All<TrackFile>().Where(x => x.AlbumId == _album.Id).Should().HaveCount(0);
|
||||
Db.All<BookFile>().Where(x => x.BookId == _album.Id).Should().HaveCount(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
@@ -42,7 +43,7 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaFileServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileRepository>()
|
||||
.Setup(c => c.GetFileWithPath(It.IsAny<List<string>>()))
|
||||
.Returns(new List<TrackFile>());
|
||||
.Returns(new List<BookFile>());
|
||||
|
||||
Subject.FilterUnchangedFiles(files, filter).Should().BeEquivalentTo(files);
|
||||
}
|
||||
@@ -60,7 +61,7 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaFileServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileRepository>()
|
||||
.Setup(c => c.GetFileWithPath(It.IsAny<List<string>>()))
|
||||
.Returns(files.Select(f => new TrackFile
|
||||
.Returns(files.Select(f => new BookFile
|
||||
{
|
||||
Path = f.FullName,
|
||||
Modified = _lastWrite
|
||||
@@ -82,9 +83,9 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaFileServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileRepository>()
|
||||
.Setup(c => c.GetFileWithPath(It.IsAny<List<string>>()))
|
||||
.Returns(new List<TrackFile>
|
||||
.Returns(new List<BookFile>
|
||||
{
|
||||
new TrackFile
|
||||
new BookFile
|
||||
{
|
||||
Path = "C:\\file2.avi".AsOsAgnostic(),
|
||||
Modified = _lastWrite
|
||||
@@ -110,9 +111,9 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaFileServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileRepository>()
|
||||
.Setup(c => c.GetFileWithPath(It.IsAny<List<string>>()))
|
||||
.Returns(new List<TrackFile>
|
||||
.Returns(new List<BookFile>
|
||||
{
|
||||
new TrackFile
|
||||
new BookFile
|
||||
{
|
||||
Path = "C:\\file2.avi".AsOsAgnostic(),
|
||||
Modified = _lastWrite
|
||||
@@ -138,9 +139,9 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaFileServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileRepository>()
|
||||
.Setup(c => c.GetFileWithPath(It.IsAny<List<string>>()))
|
||||
.Returns(new List<TrackFile>
|
||||
.Returns(new List<BookFile>
|
||||
{
|
||||
new TrackFile
|
||||
new BookFile
|
||||
{
|
||||
Path = "C:\\file2.avi".AsOsAgnostic(),
|
||||
Modified = _lastWrite
|
||||
@@ -161,7 +162,7 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaFileServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileRepository>()
|
||||
.Setup(c => c.GetFileWithPath(It.IsAny<List<string>>()))
|
||||
.Returns(new List<TrackFile>());
|
||||
.Returns(new List<BookFile>());
|
||||
|
||||
Subject.FilterUnchangedFiles(files, filter).Should().HaveCount(1);
|
||||
Subject.FilterUnchangedFiles(files, filter).Select(x => x.FullName).Should().NotContain(files.First().FullName.ToLower());
|
||||
@@ -180,9 +181,9 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaFileServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileRepository>()
|
||||
.Setup(c => c.GetFileWithPath(It.IsAny<List<string>>()))
|
||||
.Returns(new List<TrackFile>
|
||||
.Returns(new List<BookFile>
|
||||
{
|
||||
new TrackFile
|
||||
new BookFile
|
||||
{
|
||||
Path = "C:\\file2.avi".AsOsAgnostic(),
|
||||
Size = 10,
|
||||
@@ -205,14 +206,14 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaFileServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileRepository>()
|
||||
.Setup(c => c.GetFileWithPath(It.IsAny<List<string>>()))
|
||||
.Returns(new List<TrackFile>
|
||||
.Returns(new List<BookFile>
|
||||
{
|
||||
new TrackFile
|
||||
new BookFile
|
||||
{
|
||||
Path = "C:\\file2.avi".AsOsAgnostic(),
|
||||
Size = 10,
|
||||
Modified = _lastWrite,
|
||||
Tracks = new List<Track>()
|
||||
Album = new LazyLoaded<Book>(null)
|
||||
}
|
||||
});
|
||||
|
||||
@@ -231,14 +232,14 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaFileServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileRepository>()
|
||||
.Setup(c => c.GetFileWithPath(It.IsAny<List<string>>()))
|
||||
.Returns(new List<TrackFile>
|
||||
.Returns(new List<BookFile>
|
||||
{
|
||||
new TrackFile
|
||||
new BookFile
|
||||
{
|
||||
Path = "C:\\file2.avi".AsOsAgnostic(),
|
||||
Size = 10,
|
||||
Modified = _lastWrite,
|
||||
Tracks = Builder<Track>.CreateListOfSize(1).Build() as List<Track>
|
||||
Album = Builder<Book>.CreateNew().Build()
|
||||
}
|
||||
});
|
||||
|
||||
@@ -258,9 +259,9 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaFileServiceTests
|
||||
|
||||
Mocker.GetMock<IMediaFileRepository>()
|
||||
.Setup(c => c.GetFileWithPath(It.IsAny<List<string>>()))
|
||||
.Returns(new List<TrackFile>
|
||||
.Returns(new List<BookFile>
|
||||
{
|
||||
new TrackFile
|
||||
new BookFile
|
||||
{
|
||||
Path = "C:\\file2.avi".AsOsAgnostic(),
|
||||
Size = 10,
|
||||
|
||||
@@ -13,20 +13,20 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackFileMovingServiceTests
|
||||
[TestFixture]
|
||||
public class MediaFileServiceFixture : CoreTest<MediaFileService>
|
||||
{
|
||||
private Album _album;
|
||||
private List<TrackFile> _trackFiles;
|
||||
private Book _album;
|
||||
private List<BookFile> _trackFiles;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_album = Builder<Album>.CreateNew()
|
||||
_album = Builder<Book>.CreateNew()
|
||||
.Build();
|
||||
|
||||
_trackFiles = Builder<TrackFile>.CreateListOfSize(3)
|
||||
_trackFiles = Builder<BookFile>.CreateListOfSize(3)
|
||||
.TheFirst(2)
|
||||
.With(f => f.AlbumId = _album.Id)
|
||||
.With(f => f.BookId = _album.Id)
|
||||
.TheNext(1)
|
||||
.With(f => f.AlbumId = 0)
|
||||
.With(f => f.BookId = 0)
|
||||
.Build().ToList();
|
||||
}
|
||||
|
||||
|
||||
@@ -14,26 +14,22 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
public class MediaFileTableCleanupServiceFixture : CoreTest<MediaFileTableCleanupService>
|
||||
{
|
||||
private readonly string _DELETED_PATH = @"c:\ANY FILE STARTING WITH THIS PATH IS CONSIDERED DELETED!".AsOsAgnostic();
|
||||
private List<Track> _tracks;
|
||||
private Artist _artist;
|
||||
private List<Book> _tracks;
|
||||
private Author _artist;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_tracks = Builder<Track>.CreateListOfSize(10)
|
||||
_tracks = Builder<Book>.CreateListOfSize(10)
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
_artist = Builder<Artist>.CreateNew()
|
||||
_artist = Builder<Author>.CreateNew()
|
||||
.With(s => s.Path = @"C:\Test\Music\Artist".AsOsAgnostic())
|
||||
.Build();
|
||||
|
||||
Mocker.GetMock<ITrackService>()
|
||||
.Setup(c => c.GetTracksByFileId(It.IsAny<IEnumerable<int>>()))
|
||||
.Returns((IEnumerable<int> ids) => _tracks.Where(y => ids.Contains(y.TrackFileId)).ToList());
|
||||
}
|
||||
|
||||
private void GivenTrackFiles(IEnumerable<TrackFile> trackFiles)
|
||||
private void GivenTrackFiles(IEnumerable<BookFile> trackFiles)
|
||||
{
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Setup(c => c.GetFilesWithBasePath(It.IsAny<string>()))
|
||||
@@ -42,12 +38,9 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
|
||||
private void GivenFilesAreNotAttachedToTrack()
|
||||
{
|
||||
Mocker.GetMock<ITrackService>()
|
||||
.Setup(c => c.GetTracksByFileId(It.IsAny<int>()))
|
||||
.Returns(new List<Track>());
|
||||
}
|
||||
|
||||
private List<string> FilesOnDisk(IEnumerable<TrackFile> trackFiles)
|
||||
private List<string> FilesOnDisk(IEnumerable<BookFile> trackFiles)
|
||||
{
|
||||
return trackFiles.Select(e => e.Path).ToList();
|
||||
}
|
||||
@@ -55,7 +48,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
[Test]
|
||||
public void should_skip_files_that_exist_on_disk()
|
||||
{
|
||||
var trackFiles = Builder<TrackFile>.CreateListOfSize(10)
|
||||
var trackFiles = Builder<BookFile>.CreateListOfSize(10)
|
||||
.All()
|
||||
.With(x => x.Path = Path.Combine(@"c:\test".AsOsAgnostic(), Path.GetRandomFileName()))
|
||||
.Build();
|
||||
@@ -65,13 +58,13 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
Subject.Clean(_artist.Path, FilesOnDisk(trackFiles));
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(c => c.DeleteMany(It.Is<List<TrackFile>>(x => x.Count == 0), DeleteMediaFileReason.MissingFromDisk), Times.Once());
|
||||
.Verify(c => c.DeleteMany(It.Is<List<BookFile>>(x => x.Count == 0), DeleteMediaFileReason.MissingFromDisk), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_delete_non_existent_files()
|
||||
{
|
||||
var trackFiles = Builder<TrackFile>.CreateListOfSize(10)
|
||||
var trackFiles = Builder<BookFile>.CreateListOfSize(10)
|
||||
.All()
|
||||
.With(x => x.Path = Path.Combine(@"c:\test".AsOsAgnostic(), Path.GetRandomFileName()))
|
||||
.Random(2)
|
||||
@@ -83,13 +76,13 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
Subject.Clean(_artist.Path, FilesOnDisk(trackFiles.Where(e => !e.Path.StartsWith(_DELETED_PATH))));
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(c => c.DeleteMany(It.Is<List<TrackFile>>(e => e.Count == 2 && e.All(y => y.Path.StartsWith(_DELETED_PATH))), DeleteMediaFileReason.MissingFromDisk), Times.Once());
|
||||
.Verify(c => c.DeleteMany(It.Is<List<BookFile>>(e => e.Count == 2 && e.All(y => y.Path.StartsWith(_DELETED_PATH))), DeleteMediaFileReason.MissingFromDisk), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_unlink_track_when_trackFile_does_not_exist()
|
||||
{
|
||||
var trackFiles = Builder<TrackFile>.CreateListOfSize(10)
|
||||
var trackFiles = Builder<BookFile>.CreateListOfSize(10)
|
||||
.Random(10)
|
||||
.With(c => c.Path = Path.Combine(@"c:\test".AsOsAgnostic(), Path.GetRandomFileName()))
|
||||
.Build();
|
||||
@@ -97,15 +90,12 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
GivenTrackFiles(trackFiles);
|
||||
|
||||
Subject.Clean(_artist.Path, new List<string>());
|
||||
|
||||
Mocker.GetMock<ITrackService>()
|
||||
.Verify(c => c.SetFileIds(It.Is<List<Track>>(e => e.Count == 10 && e.All(y => y.TrackFileId == 0))), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_update_track_when_trackFile_exists()
|
||||
{
|
||||
var trackFiles = Builder<TrackFile>.CreateListOfSize(10)
|
||||
var trackFiles = Builder<BookFile>.CreateListOfSize(10)
|
||||
.Random(10)
|
||||
.With(c => c.Path = Path.Combine(@"c:\test".AsOsAgnostic(), Path.GetRandomFileName()))
|
||||
.Build();
|
||||
@@ -113,8 +103,6 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
GivenTrackFiles(trackFiles);
|
||||
|
||||
Subject.Clean(_artist.Path, FilesOnDisk(trackFiles));
|
||||
|
||||
Mocker.GetMock<ITrackService>().Verify(c => c.SetFileIds(It.Is<List<Track>>(x => x.Count == 0)), Times.Once());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,16 +14,16 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
{
|
||||
public class RenameTrackFileServiceFixture : CoreTest<RenameTrackFileService>
|
||||
{
|
||||
private Artist _artist;
|
||||
private List<TrackFile> _trackFiles;
|
||||
private Author _artist;
|
||||
private List<BookFile> _trackFiles;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_artist = Builder<Artist>.CreateNew()
|
||||
_artist = Builder<Author>.CreateNew()
|
||||
.Build();
|
||||
|
||||
_trackFiles = Builder<TrackFile>.CreateListOfSize(2)
|
||||
_trackFiles = Builder<BookFile>.CreateListOfSize(2)
|
||||
.All()
|
||||
.With(e => e.Artist = _artist)
|
||||
.Build()
|
||||
@@ -38,7 +38,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
{
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Setup(s => s.Get(It.IsAny<IEnumerable<int>>()))
|
||||
.Returns(new List<TrackFile>());
|
||||
.Returns(new List<BookFile>());
|
||||
}
|
||||
|
||||
private void GivenTrackFiles()
|
||||
@@ -51,7 +51,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
private void GivenMovedFiles()
|
||||
{
|
||||
Mocker.GetMock<IMoveTrackFiles>()
|
||||
.Setup(s => s.MoveTrackFile(It.IsAny<TrackFile>(), _artist));
|
||||
.Setup(s => s.MoveTrackFile(It.IsAny<BookFile>(), _artist));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -71,7 +71,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
GivenTrackFiles();
|
||||
|
||||
Mocker.GetMock<IMoveTrackFiles>()
|
||||
.Setup(s => s.MoveTrackFile(It.IsAny<TrackFile>(), It.IsAny<Artist>()))
|
||||
.Setup(s => s.MoveTrackFile(It.IsAny<BookFile>(), It.IsAny<Author>()))
|
||||
.Throws(new SameFilenameException("Same file name", "Filename"));
|
||||
|
||||
Subject.Execute(new RenameFilesCommand(_artist.Id, new List<int> { 1 }));
|
||||
@@ -101,7 +101,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
Subject.Execute(new RenameFilesCommand(_artist.Id, new List<int> { 1 }));
|
||||
|
||||
Mocker.GetMock<IMediaFileService>()
|
||||
.Verify(v => v.Update(It.IsAny<TrackFile>()), Times.Exactly(2));
|
||||
.Verify(v => v.Update(It.IsAny<BookFile>()), Times.Exactly(2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
+8
-8
@@ -21,37 +21,37 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackFileMovingServiceTests
|
||||
[TestFixture]
|
||||
public class MoveTrackFileFixture : CoreTest<TrackFileMovingService>
|
||||
{
|
||||
private Artist _artist;
|
||||
private TrackFile _trackFile;
|
||||
private Author _artist;
|
||||
private BookFile _trackFile;
|
||||
private LocalTrack _localtrack;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_artist = Builder<Artist>.CreateNew()
|
||||
_artist = Builder<Author>.CreateNew()
|
||||
.With(s => s.Path = @"C:\Test\Music\Artist".AsOsAgnostic())
|
||||
.Build();
|
||||
|
||||
_trackFile = Builder<TrackFile>.CreateNew()
|
||||
_trackFile = Builder<BookFile>.CreateNew()
|
||||
.With(f => f.Path = null)
|
||||
.With(f => f.Path = Path.Combine(_artist.Path, @"Album\File.mp3"))
|
||||
.Build();
|
||||
|
||||
_localtrack = Builder<LocalTrack>.CreateNew()
|
||||
.With(l => l.Artist = _artist)
|
||||
.With(l => l.Tracks = Builder<Track>.CreateListOfSize(1).Build().ToList())
|
||||
.With(l => l.Album = Builder<Book>.CreateNew().Build())
|
||||
.Build();
|
||||
|
||||
Mocker.GetMock<IBuildFileNames>()
|
||||
.Setup(s => s.BuildTrackFileName(It.IsAny<List<Track>>(), It.IsAny<Artist>(), It.IsAny<Album>(), It.IsAny<TrackFile>(), null, null))
|
||||
.Setup(s => s.BuildTrackFileName(It.IsAny<Author>(), It.IsAny<Book>(), It.IsAny<BookFile>(), null, null))
|
||||
.Returns("File Name");
|
||||
|
||||
Mocker.GetMock<IBuildFileNames>()
|
||||
.Setup(s => s.BuildTrackFilePath(It.IsAny<Artist>(), It.IsAny<Album>(), It.IsAny<string>(), It.IsAny<string>()))
|
||||
.Setup(s => s.BuildTrackFilePath(It.IsAny<Author>(), It.IsAny<Book>(), It.IsAny<string>(), It.IsAny<string>()))
|
||||
.Returns(@"C:\Test\Music\Artist\Album\File Name.mp3".AsOsAgnostic());
|
||||
|
||||
Mocker.GetMock<IBuildFileNames>()
|
||||
.Setup(s => s.BuildAlbumPath(It.IsAny<Artist>(), It.IsAny<Album>()))
|
||||
.Setup(s => s.BuildAlbumPath(It.IsAny<Author>(), It.IsAny<Book>()))
|
||||
.Returns(@"C:\Test\Music\Artist\Album".AsOsAgnostic());
|
||||
|
||||
var rootFolder = @"C:\Test\Music\".AsOsAgnostic();
|
||||
|
||||
@@ -1,263 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.MediaFiles.TrackImport.Identification;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||
{
|
||||
[TestFixture]
|
||||
public class AlbumDistanceFixture : CoreTest
|
||||
{
|
||||
private ArtistMetadata _artist;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_artist = Builder<ArtistMetadata>
|
||||
.CreateNew()
|
||||
.With(x => x.Name = "artist")
|
||||
.Build();
|
||||
}
|
||||
|
||||
private List<Track> GivenTracks(int count)
|
||||
{
|
||||
return Builder<Track>
|
||||
.CreateListOfSize(count)
|
||||
.All()
|
||||
.With(x => x.ArtistMetadata = _artist)
|
||||
.With(x => x.MediumNumber = 1)
|
||||
.Build()
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private LocalTrack GivenLocalTrack(Track track, AlbumRelease release)
|
||||
{
|
||||
var fileInfo = Builder<ParsedTrackInfo>
|
||||
.CreateNew()
|
||||
.With(x => x.Title = track.Title)
|
||||
.With(x => x.CleanTitle = track.Title.CleanTrackTitle())
|
||||
.With(x => x.AlbumTitle = release.Title)
|
||||
.With(x => x.Disambiguation = release.Disambiguation)
|
||||
.With(x => x.ReleaseMBId = release.ForeignReleaseId)
|
||||
.With(x => x.ArtistTitle = track.ArtistMetadata.Value.Name)
|
||||
.With(x => x.TrackNumbers = new[] { track.AbsoluteTrackNumber })
|
||||
.With(x => x.DiscCount = release.Media.Count)
|
||||
.With(x => x.DiscNumber = track.MediumNumber)
|
||||
.With(x => x.RecordingMBId = track.ForeignRecordingId)
|
||||
.With(x => x.Country = IsoCountries.Find("US"))
|
||||
.With(x => x.Label = release.Label.First())
|
||||
.With(x => x.Year = (uint)(release.Album.Value.ReleaseDate?.Year ?? 0))
|
||||
.Build();
|
||||
|
||||
var localTrack = Builder<LocalTrack>
|
||||
.CreateNew()
|
||||
.With(x => x.FileTrackInfo = fileInfo)
|
||||
.Build();
|
||||
|
||||
return localTrack;
|
||||
}
|
||||
|
||||
private List<LocalTrack> GivenLocalTracks(List<Track> tracks, AlbumRelease release)
|
||||
{
|
||||
var output = new List<LocalTrack>();
|
||||
foreach (var track in tracks)
|
||||
{
|
||||
output.Add(GivenLocalTrack(track, release));
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
private AlbumRelease GivenAlbumRelease(string title, List<Track> tracks)
|
||||
{
|
||||
var album = Builder<Album>
|
||||
.CreateNew()
|
||||
.With(x => x.Title = title)
|
||||
.With(x => x.ArtistMetadata = _artist)
|
||||
.Build();
|
||||
|
||||
var media = Builder<Medium>
|
||||
.CreateListOfSize(tracks.Max(x => x.MediumNumber))
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
return Builder<AlbumRelease>
|
||||
.CreateNew()
|
||||
.With(x => x.Tracks = tracks)
|
||||
.With(x => x.Title = title)
|
||||
.With(x => x.Album = album)
|
||||
.With(x => x.Media = media)
|
||||
.With(x => x.Country = new List<string> { "United States" })
|
||||
.With(x => x.Label = new List<string> { "label" })
|
||||
.Build();
|
||||
}
|
||||
|
||||
private TrackMapping GivenMapping(List<LocalTrack> local, List<Track> remote)
|
||||
{
|
||||
var mapping = new TrackMapping();
|
||||
var distances = local.Zip(remote, (l, r) => Tuple.Create(r, DistanceCalculator.TrackDistance(l, r, DistanceCalculator.GetTotalTrackNumber(r, remote))));
|
||||
mapping.Mapping = local.Zip(distances, (l, r) => new { l, r }).ToDictionary(x => x.l, x => x.r);
|
||||
mapping.LocalExtra = local.Except(mapping.Mapping.Keys).ToList();
|
||||
mapping.MBExtra = remote.Except(mapping.Mapping.Values.Select(x => x.Item1)).ToList();
|
||||
|
||||
return mapping;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_identical_albums()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
var mapping = GivenMapping(localTracks, tracks);
|
||||
|
||||
DistanceCalculator.AlbumReleaseDistance(localTracks, release, mapping).NormalizedDistance().Should().Be(0.0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_incomplete_album()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
localTracks.RemoveAt(1);
|
||||
var mapping = GivenMapping(localTracks, tracks);
|
||||
|
||||
var dist = DistanceCalculator.AlbumReleaseDistance(localTracks, release, mapping);
|
||||
dist.NormalizedDistance().Should().NotBe(0.0);
|
||||
dist.NormalizedDistance().Should().BeLessThan(0.2);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_global_artists_differ()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
var mapping = GivenMapping(localTracks, tracks);
|
||||
|
||||
release.Album.Value.ArtistMetadata = Builder<ArtistMetadata>
|
||||
.CreateNew()
|
||||
.With(x => x.Name = "different artist")
|
||||
.Build();
|
||||
|
||||
DistanceCalculator.AlbumReleaseDistance(localTracks, release, mapping).NormalizedDistance().Should().NotBe(0.0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_comp_track_artists_match()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
var mapping = GivenMapping(localTracks, tracks);
|
||||
|
||||
release.Album.Value.ArtistMetadata = Builder<ArtistMetadata>
|
||||
.CreateNew()
|
||||
.With(x => x.Name = "Various Artists")
|
||||
.With(x => x.ForeignArtistId = "89ad4ac3-39f7-470e-963a-56509c546377")
|
||||
.Build();
|
||||
|
||||
DistanceCalculator.AlbumReleaseDistance(localTracks, release, mapping).NormalizedDistance().Should().Be(0.0);
|
||||
}
|
||||
|
||||
// TODO: there are a couple more VA tests in beets but we don't support VA yet anyway
|
||||
[Test]
|
||||
public void test_tracks_out_of_order()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
localTracks = new[] { 1, 3, 2 }.Select(x => localTracks[x - 1]).ToList();
|
||||
var mapping = GivenMapping(localTracks, tracks);
|
||||
|
||||
var dist = DistanceCalculator.AlbumReleaseDistance(localTracks, release, mapping);
|
||||
dist.NormalizedDistance().Should().NotBe(0.0);
|
||||
dist.NormalizedDistance().Should().BeLessThan(0.2);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_two_medium_release()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
tracks[2].AbsoluteTrackNumber = 1;
|
||||
tracks[2].MediumNumber = 2;
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
var mapping = GivenMapping(localTracks, tracks);
|
||||
|
||||
DistanceCalculator.AlbumReleaseDistance(localTracks, release, mapping).NormalizedDistance().Should().Be(0.0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_absolute_track_numbering()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
tracks[2].AbsoluteTrackNumber = 1;
|
||||
tracks[2].MediumNumber = 2;
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
localTracks[2].FileTrackInfo.DiscNumber = 2;
|
||||
localTracks[2].FileTrackInfo.TrackNumbers = new[] { 3 };
|
||||
|
||||
var mapping = GivenMapping(localTracks, tracks);
|
||||
|
||||
DistanceCalculator.AlbumReleaseDistance(localTracks, release, mapping).NormalizedDistance().Should().Be(0.0);
|
||||
}
|
||||
|
||||
private static DateTime?[] dates = new DateTime?[] { null, new DateTime(2007, 1, 1), DateTime.Now };
|
||||
|
||||
[TestCaseSource("dates")]
|
||||
public void test_null_album_year(DateTime? releaseDate)
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
var mapping = GivenMapping(localTracks, tracks);
|
||||
|
||||
release.Album.Value.ReleaseDate = null;
|
||||
release.ReleaseDate = releaseDate;
|
||||
|
||||
var result = DistanceCalculator.AlbumReleaseDistance(localTracks, release, mapping).NormalizedDistance();
|
||||
|
||||
if (!releaseDate.HasValue || (localTracks[0].FileTrackInfo.Year == (releaseDate?.Year ?? 0)))
|
||||
{
|
||||
result.Should().Be(0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Should().NotBe(0.0);
|
||||
}
|
||||
}
|
||||
|
||||
[TestCaseSource("dates")]
|
||||
public void test_null_release_year(DateTime? albumDate)
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
var mapping = GivenMapping(localTracks, tracks);
|
||||
|
||||
release.Album.Value.ReleaseDate = albumDate;
|
||||
release.ReleaseDate = null;
|
||||
|
||||
var result = DistanceCalculator.AlbumReleaseDistance(localTracks, release, mapping).NormalizedDistance();
|
||||
|
||||
if (!albumDate.HasValue || (localTracks[0].FileTrackInfo.Year == (albumDate?.Year ?? 0)))
|
||||
{
|
||||
result.Should().Be(0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Should().NotBe(0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
-161
@@ -1,161 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.MediaFiles.TrackImport;
|
||||
using NzbDrone.Core.MediaFiles.TrackImport.Identification;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||
{
|
||||
[TestFixture]
|
||||
public class GetCandidatesFixture : CoreTest<CandidateService>
|
||||
{
|
||||
private ArtistMetadata _artist;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_artist = Builder<ArtistMetadata>
|
||||
.CreateNew()
|
||||
.With(x => x.Name = "artist")
|
||||
.Build();
|
||||
}
|
||||
|
||||
private List<Track> GivenTracks(int count)
|
||||
{
|
||||
return Builder<Track>
|
||||
.CreateListOfSize(count)
|
||||
.All()
|
||||
.With(x => x.ArtistMetadata = _artist)
|
||||
.Build()
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private ParsedTrackInfo GivenParsedTrackInfo(Track track, AlbumRelease release)
|
||||
{
|
||||
return Builder<ParsedTrackInfo>
|
||||
.CreateNew()
|
||||
.With(x => x.Title = track.Title)
|
||||
.With(x => x.AlbumTitle = release.Title)
|
||||
.With(x => x.Disambiguation = release.Disambiguation)
|
||||
.With(x => x.ReleaseMBId = release.ForeignReleaseId)
|
||||
.With(x => x.ArtistTitle = track.ArtistMetadata.Value.Name)
|
||||
.With(x => x.TrackNumbers = new[] { track.AbsoluteTrackNumber })
|
||||
.With(x => x.RecordingMBId = track.ForeignRecordingId)
|
||||
.With(x => x.Country = IsoCountries.Find("US"))
|
||||
.With(x => x.Label = release.Label.First())
|
||||
.With(x => x.Year = (uint)release.Album.Value.ReleaseDate.Value.Year)
|
||||
.Build();
|
||||
}
|
||||
|
||||
private List<LocalTrack> GivenLocalTracks(List<Track> tracks, AlbumRelease release)
|
||||
{
|
||||
var output = Builder<LocalTrack>
|
||||
.CreateListOfSize(tracks.Count)
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
for (int i = 0; i < tracks.Count; i++)
|
||||
{
|
||||
output[i].FileTrackInfo = GivenParsedTrackInfo(tracks[i], release);
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
private AlbumRelease GivenAlbumRelease(string title, List<Track> tracks)
|
||||
{
|
||||
var album = Builder<Album>
|
||||
.CreateNew()
|
||||
.With(x => x.Title = title)
|
||||
.With(x => x.ArtistMetadata = _artist)
|
||||
.Build();
|
||||
|
||||
var media = Builder<Medium>
|
||||
.CreateListOfSize(1)
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
return Builder<AlbumRelease>
|
||||
.CreateNew()
|
||||
.With(x => x.Tracks = tracks)
|
||||
.With(x => x.Title = title)
|
||||
.With(x => x.Album = album)
|
||||
.With(x => x.Media = media)
|
||||
.With(x => x.Country = new List<string>())
|
||||
.With(x => x.Label = new List<string> { "label" })
|
||||
.With(x => x.ForeignReleaseId = null)
|
||||
.Build();
|
||||
}
|
||||
|
||||
private LocalAlbumRelease GivenLocalAlbumRelease()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
|
||||
return new LocalAlbumRelease(localTracks);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void get_candidates_by_fingerprint_should_not_fail_if_fingerprint_lookup_returned_null()
|
||||
{
|
||||
Mocker.GetMock<IFingerprintingService>()
|
||||
.Setup(x => x.Lookup(It.IsAny<List<LocalTrack>>(), It.IsAny<double>()))
|
||||
.Callback((List<LocalTrack> x, double thres) =>
|
||||
{
|
||||
foreach (var track in x)
|
||||
{
|
||||
track.AcoustIdResults = null;
|
||||
}
|
||||
});
|
||||
|
||||
Mocker.GetMock<IReleaseService>()
|
||||
.Setup(x => x.GetReleasesByRecordingIds(It.IsAny<List<string>>()))
|
||||
.Returns(new List<AlbumRelease>());
|
||||
|
||||
var local = GivenLocalAlbumRelease();
|
||||
|
||||
Subject.GetDbCandidatesFromFingerprint(local, null, false).Should().BeEquivalentTo(new List<CandidateAlbumRelease>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void get_candidates_should_only_return_specified_release_if_set()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
var localAlbumRelease = new LocalAlbumRelease(localTracks);
|
||||
var idOverrides = new IdentificationOverrides
|
||||
{
|
||||
AlbumRelease = release
|
||||
};
|
||||
|
||||
Subject.GetDbCandidatesFromTags(localAlbumRelease, idOverrides, false).Should().BeEquivalentTo(
|
||||
new List<CandidateAlbumRelease> { new CandidateAlbumRelease(release) });
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void get_candidates_should_use_consensus_release_id()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
release.ForeignReleaseId = "xxx";
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
var localAlbumRelease = new LocalAlbumRelease(localTracks);
|
||||
|
||||
Mocker.GetMock<IReleaseService>()
|
||||
.Setup(x => x.GetReleaseByForeignReleaseId("xxx", true))
|
||||
.Returns(release);
|
||||
|
||||
Subject.GetDbCandidatesFromTags(localAlbumRelease, null, false).Should().BeEquivalentTo(
|
||||
new List<CandidateAlbumRelease> { new CandidateAlbumRelease(release) });
|
||||
}
|
||||
}
|
||||
}
|
||||
+12
-21
@@ -46,8 +46,6 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||
Mocker.SetConstant<IArtistRepository>(Mocker.Resolve<ArtistRepository>());
|
||||
Mocker.SetConstant<IArtistMetadataRepository>(Mocker.Resolve<ArtistMetadataRepository>());
|
||||
Mocker.SetConstant<IAlbumRepository>(Mocker.Resolve<AlbumRepository>());
|
||||
Mocker.SetConstant<IReleaseRepository>(Mocker.Resolve<ReleaseRepository>());
|
||||
Mocker.SetConstant<ITrackRepository>(Mocker.Resolve<TrackRepository>());
|
||||
Mocker.SetConstant<IImportListExclusionRepository>(Mocker.Resolve<ImportListExclusionRepository>());
|
||||
Mocker.SetConstant<IMediaFileRepository>(Mocker.Resolve<MediaFileRepository>());
|
||||
|
||||
@@ -57,23 +55,19 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||
Mocker.SetConstant<IArtistService>(_artistService);
|
||||
Mocker.SetConstant<IArtistMetadataService>(Mocker.Resolve<ArtistMetadataService>());
|
||||
Mocker.SetConstant<IAlbumService>(Mocker.Resolve<AlbumService>());
|
||||
Mocker.SetConstant<IReleaseService>(Mocker.Resolve<ReleaseService>());
|
||||
Mocker.SetConstant<ITrackService>(Mocker.Resolve<TrackService>());
|
||||
Mocker.SetConstant<IImportListExclusionService>(Mocker.Resolve<ImportListExclusionService>());
|
||||
Mocker.SetConstant<IMediaFileService>(Mocker.Resolve<MediaFileService>());
|
||||
|
||||
Mocker.SetConstant<IConfigService>(Mocker.Resolve<IConfigService>());
|
||||
Mocker.SetConstant<IProvideArtistInfo>(Mocker.Resolve<SkyHookProxy>());
|
||||
Mocker.SetConstant<IProvideAlbumInfo>(Mocker.Resolve<SkyHookProxy>());
|
||||
Mocker.SetConstant<IProvideAuthorInfo>(Mocker.Resolve<SkyHookProxy>());
|
||||
Mocker.SetConstant<IProvideBookInfo>(Mocker.Resolve<SkyHookProxy>());
|
||||
|
||||
_addArtistService = Mocker.Resolve<AddArtistService>();
|
||||
|
||||
Mocker.SetConstant<IRefreshTrackService>(Mocker.Resolve<RefreshTrackService>());
|
||||
Mocker.SetConstant<IRefreshAlbumReleaseService>(Mocker.Resolve<RefreshAlbumReleaseService>());
|
||||
Mocker.SetConstant<IRefreshAlbumService>(Mocker.Resolve<RefreshAlbumService>());
|
||||
_refreshArtistService = Mocker.Resolve<RefreshArtistService>();
|
||||
|
||||
Mocker.GetMock<IAddArtistValidator>().Setup(x => x.Validate(It.IsAny<Artist>())).Returns(new ValidationResult());
|
||||
Mocker.GetMock<IAddArtistValidator>().Setup(x => x.Validate(It.IsAny<Author>())).Returns(new ValidationResult());
|
||||
|
||||
Mocker.SetConstant<ITrackGroupingService>(Mocker.Resolve<TrackGroupingService>());
|
||||
Mocker.SetConstant<ICandidateService>(Mocker.Resolve<CandidateService>());
|
||||
@@ -94,9 +88,9 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||
Mocker.GetMock<IMetadataProfileService>().Setup(x => x.Get(profile.Id)).Returns(profile);
|
||||
}
|
||||
|
||||
private List<Artist> GivenArtists(List<ArtistTestCase> artists)
|
||||
private List<Author> GivenArtists(List<ArtistTestCase> artists)
|
||||
{
|
||||
var outp = new List<Artist>();
|
||||
var outp = new List<Author>();
|
||||
for (int i = 0; i < artists.Count; i++)
|
||||
{
|
||||
var meta = artists[i].MetadataProfile;
|
||||
@@ -108,13 +102,13 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||
return outp;
|
||||
}
|
||||
|
||||
private Artist GivenArtist(string foreignArtistId, int metadataProfileId)
|
||||
private Author GivenArtist(string foreignAuthorId, int metadataProfileId)
|
||||
{
|
||||
var artist = _addArtistService.AddArtist(new Artist
|
||||
var artist = _addArtistService.AddArtist(new Author
|
||||
{
|
||||
Metadata = new ArtistMetadata
|
||||
Metadata = new AuthorMetadata
|
||||
{
|
||||
ForeignArtistId = foreignArtistId
|
||||
ForeignAuthorId = foreignAuthorId
|
||||
},
|
||||
Path = @"c:\test".AsOsAgnostic(),
|
||||
MetadataProfileId = metadataProfileId
|
||||
@@ -122,13 +116,13 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||
|
||||
var command = new RefreshArtistCommand
|
||||
{
|
||||
ArtistId = artist.Id,
|
||||
AuthorId = artist.Id,
|
||||
Trigger = CommandTrigger.Unspecified
|
||||
};
|
||||
|
||||
_refreshArtistService.Execute(command);
|
||||
|
||||
return _artistService.FindById(foreignArtistId);
|
||||
return _artistService.FindById(foreignAuthorId);
|
||||
}
|
||||
|
||||
private void GivenFingerprints(List<AcoustIdTestCase> fingerprints)
|
||||
@@ -179,7 +173,7 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||
var testcase = JsonConvert.DeserializeObject<IdTestCase>(File.ReadAllText(path));
|
||||
|
||||
var artists = GivenArtists(testcase.LibraryArtists);
|
||||
var specifiedArtist = artists.SingleOrDefault(x => x.Metadata.Value.ForeignArtistId == testcase.Artist);
|
||||
var specifiedArtist = artists.SingleOrDefault(x => x.Metadata.Value.ForeignAuthorId == testcase.Artist);
|
||||
var idOverrides = new IdentificationOverrides { Artist = specifiedArtist };
|
||||
|
||||
var tracks = testcase.Tracks.Select(x => new LocalTrack
|
||||
@@ -202,10 +196,7 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||
|
||||
var result = _Subject.Identify(tracks, idOverrides, config);
|
||||
|
||||
TestLogger.Debug($"Found releases:\n{result.Where(x => x.AlbumRelease != null).Select(x => x.AlbumRelease?.ForeignReleaseId).ToJson()}");
|
||||
|
||||
result.Should().HaveCount(testcase.ExpectedMusicBrainzReleaseIds.Count);
|
||||
result.Where(x => x.AlbumRelease != null).Select(x => x.AlbumRelease.ForeignReleaseId).Should().BeEquivalentTo(testcase.ExpectedMusicBrainzReleaseIds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.MediaFiles.TrackImport.Identification;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||
{
|
||||
[TestFixture]
|
||||
public class TrackDistanceFixture : CoreTest
|
||||
{
|
||||
private Track GivenTrack(string title)
|
||||
{
|
||||
var artist = Builder<ArtistMetadata>
|
||||
.CreateNew()
|
||||
.With(x => x.Name = "artist")
|
||||
.Build();
|
||||
|
||||
var mbTrack = Builder<Track>
|
||||
.CreateNew()
|
||||
.With(x => x.Title = title)
|
||||
.With(x => x.ArtistMetadata = artist)
|
||||
.Build();
|
||||
|
||||
return mbTrack;
|
||||
}
|
||||
|
||||
private LocalTrack GivenLocalTrack(Track track)
|
||||
{
|
||||
var fileInfo = Builder<ParsedTrackInfo>
|
||||
.CreateNew()
|
||||
.With(x => x.Title = track.Title)
|
||||
.With(x => x.CleanTitle = track.Title.CleanTrackTitle())
|
||||
.With(x => x.ArtistTitle = track.ArtistMetadata.Value.Name)
|
||||
.With(x => x.TrackNumbers = new[] { 1 })
|
||||
.With(x => x.RecordingMBId = track.ForeignRecordingId)
|
||||
.Build();
|
||||
|
||||
var localTrack = Builder<LocalTrack>
|
||||
.CreateNew()
|
||||
.With(x => x.FileTrackInfo = fileInfo)
|
||||
.Build();
|
||||
|
||||
return localTrack;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_identical_tracks()
|
||||
{
|
||||
var track = GivenTrack("one");
|
||||
var localTrack = GivenLocalTrack(track);
|
||||
|
||||
DistanceCalculator.TrackDistance(localTrack, track, 1, true).NormalizedDistance().Should().Be(0.0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_feat_removed_from_localtrack()
|
||||
{
|
||||
var track = GivenTrack("one");
|
||||
var localTrack = GivenLocalTrack(track);
|
||||
localTrack.FileTrackInfo.Title = "one (feat. two)";
|
||||
|
||||
DistanceCalculator.TrackDistance(localTrack, track, 1, true).NormalizedDistance().Should().Be(0.0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_different_title()
|
||||
{
|
||||
var track = GivenTrack("one");
|
||||
var localTrack = GivenLocalTrack(track);
|
||||
localTrack.FileTrackInfo.CleanTitle = "foo";
|
||||
|
||||
DistanceCalculator.TrackDistance(localTrack, track, 1, true).NormalizedDistance().Should().NotBe(0.0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_different_artist()
|
||||
{
|
||||
var track = GivenTrack("one");
|
||||
var localTrack = GivenLocalTrack(track);
|
||||
localTrack.FileTrackInfo.ArtistTitle = "foo";
|
||||
|
||||
DistanceCalculator.TrackDistance(localTrack, track, 1, true).NormalizedDistance().Should().NotBe(0.0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_various_artists_tolerated()
|
||||
{
|
||||
var track = GivenTrack("one");
|
||||
var localTrack = GivenLocalTrack(track);
|
||||
localTrack.FileTrackInfo.ArtistTitle = "Various Artists";
|
||||
|
||||
DistanceCalculator.TrackDistance(localTrack, track, 1, true).NormalizedDistance().Should().Be(0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,188 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.MediaFiles.TrackImport.Identification;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Identification
|
||||
{
|
||||
[TestFixture]
|
||||
public class TrackMappingFixture : CoreTest<IdentificationService>
|
||||
{
|
||||
private ArtistMetadata _artist;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_artist = Builder<ArtistMetadata>
|
||||
.CreateNew()
|
||||
.With(x => x.Name = "artist")
|
||||
.Build();
|
||||
}
|
||||
|
||||
private List<Track> GivenTracks(int count)
|
||||
{
|
||||
return Builder<Track>
|
||||
.CreateListOfSize(count)
|
||||
.All()
|
||||
.With(x => x.ArtistMetadata = _artist)
|
||||
.Build()
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private ParsedTrackInfo GivenParsedTrackInfo(Track track, AlbumRelease release)
|
||||
{
|
||||
return Builder<ParsedTrackInfo>
|
||||
.CreateNew()
|
||||
.With(x => x.Title = track.Title)
|
||||
.With(x => x.CleanTitle = track.Title.CleanTrackTitle())
|
||||
.With(x => x.AlbumTitle = release.Title)
|
||||
.With(x => x.Disambiguation = release.Disambiguation)
|
||||
.With(x => x.ReleaseMBId = release.ForeignReleaseId)
|
||||
.With(x => x.ArtistTitle = track.ArtistMetadata.Value.Name)
|
||||
.With(x => x.TrackNumbers = new[] { track.AbsoluteTrackNumber })
|
||||
.With(x => x.RecordingMBId = track.ForeignRecordingId)
|
||||
.With(x => x.Country = IsoCountries.Find("US"))
|
||||
.With(x => x.Label = release.Label.First())
|
||||
.With(x => x.Year = (uint)release.Album.Value.ReleaseDate.Value.Year)
|
||||
.Build();
|
||||
}
|
||||
|
||||
private List<LocalTrack> GivenLocalTracks(List<Track> tracks, AlbumRelease release)
|
||||
{
|
||||
var output = Builder<LocalTrack>
|
||||
.CreateListOfSize(tracks.Count)
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
for (int i = 0; i < tracks.Count; i++)
|
||||
{
|
||||
output[i].FileTrackInfo = GivenParsedTrackInfo(tracks[i], release);
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
private AlbumRelease GivenAlbumRelease(string title, List<Track> tracks)
|
||||
{
|
||||
var album = Builder<Album>
|
||||
.CreateNew()
|
||||
.With(x => x.Title = title)
|
||||
.With(x => x.ArtistMetadata = _artist)
|
||||
.Build();
|
||||
|
||||
var media = Builder<Medium>
|
||||
.CreateListOfSize(1)
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
return Builder<AlbumRelease>
|
||||
.CreateNew()
|
||||
.With(x => x.Tracks = tracks)
|
||||
.With(x => x.Title = title)
|
||||
.With(x => x.Album = album)
|
||||
.With(x => x.Media = media)
|
||||
.With(x => x.Country = new List<string>())
|
||||
.With(x => x.Label = new List<string> { "label" })
|
||||
.Build();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_reorder_when_track_numbers_incorrect()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
|
||||
localTracks[2].FileTrackInfo.TrackNumbers = new[] { 2 };
|
||||
localTracks[1].FileTrackInfo.TrackNumbers = new[] { 3 };
|
||||
localTracks = new[] { 0, 2, 1 }.Select(x => localTracks[x]).ToList();
|
||||
|
||||
var result = Subject.MapReleaseTracks(localTracks, tracks);
|
||||
|
||||
result.Mapping
|
||||
.ToDictionary(x => x.Key, y => y.Value.Item1)
|
||||
.Should().BeEquivalentTo(new Dictionary<LocalTrack, Track>
|
||||
{
|
||||
{ localTracks[0], tracks[0] },
|
||||
{ localTracks[1], tracks[2] },
|
||||
{ localTracks[2], tracks[1] },
|
||||
});
|
||||
result.LocalExtra.Should().BeEmpty();
|
||||
result.MBExtra.Should().BeEmpty();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_order_works_with_invalid_track_numbers()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
|
||||
foreach (var track in localTracks)
|
||||
{
|
||||
track.FileTrackInfo.TrackNumbers = new[] { 1 };
|
||||
}
|
||||
|
||||
var result = Subject.MapReleaseTracks(localTracks, tracks);
|
||||
|
||||
result.Mapping
|
||||
.ToDictionary(x => x.Key, y => y.Value.Item1)
|
||||
.Should().BeEquivalentTo(new Dictionary<LocalTrack, Track>
|
||||
{
|
||||
{ localTracks[0], tracks[0] },
|
||||
{ localTracks[1], tracks[1] },
|
||||
{ localTracks[2], tracks[2] },
|
||||
});
|
||||
result.LocalExtra.Should().BeEmpty();
|
||||
result.MBExtra.Should().BeEmpty();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_order_works_with_missing_tracks()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
localTracks.RemoveAt(1);
|
||||
|
||||
var result = Subject.MapReleaseTracks(localTracks, tracks);
|
||||
|
||||
result.Mapping
|
||||
.ToDictionary(x => x.Key, y => y.Value.Item1)
|
||||
.Should().BeEquivalentTo(new Dictionary<LocalTrack, Track>
|
||||
{
|
||||
{ localTracks[0], tracks[0] },
|
||||
{ localTracks[1], tracks[2] }
|
||||
});
|
||||
result.LocalExtra.Should().BeEmpty();
|
||||
result.MBExtra.Should().BeEquivalentTo(new List<Track> { tracks[1] });
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_order_works_with_extra_tracks()
|
||||
{
|
||||
var tracks = GivenTracks(3);
|
||||
var release = GivenAlbumRelease("album", tracks);
|
||||
var localTracks = GivenLocalTracks(tracks, release);
|
||||
tracks.RemoveAt(1);
|
||||
|
||||
var result = Subject.MapReleaseTracks(localTracks, tracks);
|
||||
|
||||
result.Mapping
|
||||
.ToDictionary(x => x.Key, y => y.Value.Item1)
|
||||
.Should().BeEquivalentTo(new Dictionary<LocalTrack, Track>
|
||||
{
|
||||
{ localTracks[0], tracks[0] },
|
||||
{ localTracks[2], tracks[1] }
|
||||
});
|
||||
result.LocalExtra.Should().BeEquivalentTo(new List<LocalTrack> { localTracks[1] });
|
||||
result.MBExtra.Should().BeEmpty();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -26,9 +26,8 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport
|
||||
{
|
||||
private List<IFileInfo> _fileInfos;
|
||||
private LocalTrack _localTrack;
|
||||
private Artist _artist;
|
||||
private Album _album;
|
||||
private AlbumRelease _albumRelease;
|
||||
private Author _artist;
|
||||
private Book _album;
|
||||
private QualityModel _quality;
|
||||
|
||||
private IdentificationOverrides _idOverrides;
|
||||
@@ -85,26 +84,22 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport
|
||||
_fail2.Setup(c => c.IsSatisfiedBy(It.IsAny<LocalTrack>(), It.IsAny<DownloadClientItem>())).Returns(Decision.Reject("_fail2"));
|
||||
_fail3.Setup(c => c.IsSatisfiedBy(It.IsAny<LocalTrack>(), It.IsAny<DownloadClientItem>())).Returns(Decision.Reject("_fail3"));
|
||||
|
||||
_artist = Builder<Artist>.CreateNew()
|
||||
_artist = Builder<Author>.CreateNew()
|
||||
.With(e => e.QualityProfileId = 1)
|
||||
.With(e => e.QualityProfile = new QualityProfile { Items = Qualities.QualityFixture.GetDefaultQualities() })
|
||||
.Build();
|
||||
|
||||
_album = Builder<Album>.CreateNew()
|
||||
.With(x => x.Artist = _artist)
|
||||
_album = Builder<Book>.CreateNew()
|
||||
.With(x => x.Author = _artist)
|
||||
.Build();
|
||||
|
||||
_albumRelease = Builder<AlbumRelease>.CreateNew()
|
||||
.With(x => x.Album = _album)
|
||||
.Build();
|
||||
|
||||
_quality = new QualityModel(Quality.MP3_256);
|
||||
_quality = new QualityModel(Quality.MP3_320);
|
||||
|
||||
_localTrack = new LocalTrack
|
||||
{
|
||||
Artist = _artist,
|
||||
Quality = _quality,
|
||||
Tracks = new List<Track> { new Track() },
|
||||
Album = new Book(),
|
||||
Path = @"C:\Test\Unsorted\The.Office.S03E115.DVDRip.XviD-OSiTV.avi".AsOsAgnostic()
|
||||
};
|
||||
|
||||
@@ -122,7 +117,7 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport
|
||||
.Returns((List<LocalTrack> tracks, IdentificationOverrides idOverrides, ImportDecisionMakerConfig config) =>
|
||||
{
|
||||
var ret = new LocalAlbumRelease(tracks);
|
||||
ret.AlbumRelease = _albumRelease;
|
||||
ret.Book = _album;
|
||||
return new List<LocalAlbumRelease> { ret };
|
||||
});
|
||||
|
||||
@@ -154,7 +149,7 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport
|
||||
.Setup(s => s.Augment(It.IsAny<LocalTrack>(), It.IsAny<bool>()))
|
||||
.Callback<LocalTrack, bool>((localTrack, otherFiles) =>
|
||||
{
|
||||
localTrack.Tracks = _localTrack.Tracks;
|
||||
localTrack.Album = _localTrack.Album;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+3
-9
@@ -1,5 +1,4 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
@@ -17,7 +16,7 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
[TestFixture]
|
||||
public class FreeSpaceSpecificationFixture : CoreTest<FreeSpaceSpecification>
|
||||
{
|
||||
private Artist _artist;
|
||||
private Author _artist;
|
||||
private LocalTrack _localTrack;
|
||||
private string _rootFolder;
|
||||
|
||||
@@ -26,19 +25,14 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
{
|
||||
_rootFolder = @"C:\Test\Music".AsOsAgnostic();
|
||||
|
||||
_artist = Builder<Artist>.CreateNew()
|
||||
_artist = Builder<Author>.CreateNew()
|
||||
.With(s => s.Path = Path.Combine(_rootFolder, "Alice in Chains"))
|
||||
.Build();
|
||||
|
||||
var tracks = Builder<Track>.CreateListOfSize(1)
|
||||
.All()
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
_localTrack = new LocalTrack
|
||||
{
|
||||
Path = @"C:\Test\Unsorted\Alice in Chains\Alice in Chains - track1.mp3".AsOsAgnostic(),
|
||||
Tracks = tracks,
|
||||
Album = new Book(),
|
||||
Artist = _artist
|
||||
};
|
||||
}
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
{
|
||||
Path = @"C:\Test\Unsorted Music\Kid.Rock\Kid.Rock.Cowboy.mp3".AsOsAgnostic(),
|
||||
Size = 100,
|
||||
Artist = Builder<Artist>.CreateNew().Build()
|
||||
Artist = Builder<Author>.CreateNew().Build()
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
+25
-26
@@ -1,4 +1,4 @@
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
@@ -27,14 +27,13 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
[Test]
|
||||
public void should_be_accepted_if_no_existing_file()
|
||||
{
|
||||
_localTrack.Tracks = Builder<Track>.CreateListOfSize(1)
|
||||
.TheFirst(1)
|
||||
.With(e => e.TrackFileId = 0)
|
||||
.BuildList();
|
||||
_localTrack.Album = Builder<Book>.CreateNew()
|
||||
.Build();
|
||||
|
||||
Subject.IsSatisfiedBy(_localTrack, null).Accepted.Should().BeTrue();
|
||||
}
|
||||
|
||||
/*
|
||||
[Test]
|
||||
public void should_be_accepted_if_multiple_existing_files()
|
||||
{
|
||||
@@ -57,21 +56,21 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
.ToList();
|
||||
|
||||
Subject.IsSatisfiedBy(_localTrack, null).Accepted.Should().BeTrue();
|
||||
}
|
||||
}*/
|
||||
|
||||
[Test]
|
||||
public void should_be_accepted_if_file_size_is_different()
|
||||
{
|
||||
_localTrack.Tracks = Builder<Track>.CreateListOfSize(1)
|
||||
.TheFirst(1)
|
||||
.With(e => e.TrackFileId = 1)
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Size = _localTrack.Size + 100.Megabytes()
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
_localTrack.Album = Builder<Book>.CreateNew()
|
||||
.With(e => e.BookFiles = new LazyLoaded<List<BookFile>>(
|
||||
new List<BookFile>
|
||||
{
|
||||
new BookFile
|
||||
{
|
||||
Size = _localTrack.Size + 100.Megabytes()
|
||||
}
|
||||
}))
|
||||
.Build();
|
||||
|
||||
Subject.IsSatisfiedBy(_localTrack, null).Accepted.Should().BeTrue();
|
||||
}
|
||||
@@ -79,16 +78,16 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
[Test]
|
||||
public void should_be_reject_if_file_size_is_the_same()
|
||||
{
|
||||
_localTrack.Tracks = Builder<Track>.CreateListOfSize(1)
|
||||
.TheFirst(1)
|
||||
.With(e => e.TrackFileId = 1)
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Size = _localTrack.Size
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
_localTrack.Album = Builder<Book>.CreateNew()
|
||||
.With(e => e.BookFiles = new LazyLoaded<List<BookFile>>(
|
||||
new List<BookFile>
|
||||
{
|
||||
new BookFile
|
||||
{
|
||||
Size = _localTrack.Size
|
||||
}
|
||||
}))
|
||||
.Build();
|
||||
|
||||
Subject.IsSatisfiedBy(_localTrack, null).Accepted.Should().BeFalse();
|
||||
}
|
||||
|
||||
+12
-10
@@ -17,25 +17,26 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
[TestFixture]
|
||||
public class UpgradeSpecificationFixture : CoreTest<UpgradeSpecification>
|
||||
{
|
||||
private Artist _artist;
|
||||
private Album _album;
|
||||
/*
|
||||
private Author _artist;
|
||||
private Book _album;
|
||||
private LocalTrack _localTrack;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_artist = Builder<Artist>.CreateNew()
|
||||
_artist = Builder<Author>.CreateNew()
|
||||
.With(e => e.QualityProfile = new QualityProfile
|
||||
{
|
||||
Items = Qualities.QualityFixture.GetDefaultQualities(),
|
||||
}).Build();
|
||||
|
||||
_album = Builder<Album>.CreateNew().Build();
|
||||
_album = Builder<Book>.CreateNew().Build();
|
||||
|
||||
_localTrack = new LocalTrack
|
||||
{
|
||||
Path = @"C:\Test\Imagine Dragons\Imagine.Dragons.Song.1.mp3",
|
||||
Quality = new QualityModel(Quality.MP3_256, new Revision(version: 1)),
|
||||
Quality = new QualityModel(Quality.MP3_320, new Revision(version: 1)),
|
||||
Artist = _artist,
|
||||
Album = _album
|
||||
};
|
||||
@@ -76,7 +77,7 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_192, new Revision(version: 1))
|
||||
Quality = new QualityModel(Quality.MP3_320, new Revision(version: 1))
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
@@ -93,7 +94,7 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_192, new Revision(version: 1))
|
||||
Quality = new QualityModel(Quality.MP3_320, new Revision(version: 1))
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
@@ -144,7 +145,7 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_192, new Revision(version: 1))
|
||||
Quality = new QualityModel(Quality.MP3_320, new Revision(version: 1))
|
||||
}))
|
||||
.TheNext(1)
|
||||
.With(e => e.TrackFileId = 2)
|
||||
@@ -172,7 +173,7 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_256, new Revision(version: 2))
|
||||
Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2))
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
@@ -193,7 +194,7 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Quality = new QualityModel(Quality.MP3_256, new Revision(version: 2))
|
||||
Quality = new QualityModel(Quality.MP3_320, new Revision(version: 2))
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
@@ -236,5 +237,6 @@ namespace NzbDrone.Core.Test.MediaFiles.TrackImport.Specifications
|
||||
|
||||
Subject.IsSatisfiedBy(_localTrack, null).Accepted.Should().BeTrue();
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
@@ -9,6 +9,7 @@ using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using NzbDrone.Core.Music;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.RootFolders;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Test.Common;
|
||||
|
||||
@@ -16,7 +17,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
{
|
||||
public class UpgradeMediaFileServiceFixture : CoreTest<UpgradeMediaFileService>
|
||||
{
|
||||
private TrackFile _trackFile;
|
||||
private BookFile _trackFile;
|
||||
private LocalTrack _localTrack;
|
||||
private string _rootPath = @"C:\Test\Music\Artist".AsOsAgnostic();
|
||||
|
||||
@@ -24,12 +25,12 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
public void Setup()
|
||||
{
|
||||
_localTrack = new LocalTrack();
|
||||
_localTrack.Artist = new Artist
|
||||
_localTrack.Artist = new Author
|
||||
{
|
||||
Path = _rootPath
|
||||
};
|
||||
|
||||
_trackFile = Builder<TrackFile>
|
||||
_trackFile = Builder<BookFile>
|
||||
.CreateNew()
|
||||
.Build();
|
||||
|
||||
@@ -44,57 +45,25 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
Mocker.GetMock<IDiskProvider>()
|
||||
.Setup(c => c.GetParentFolder(It.IsAny<string>()))
|
||||
.Returns<string>(c => Path.GetDirectoryName(c));
|
||||
|
||||
Mocker.GetMock<IRootFolderService>()
|
||||
.Setup(c => c.GetBestRootFolder(It.IsAny<string>()))
|
||||
.Returns(new RootFolder());
|
||||
}
|
||||
|
||||
private void GivenSingleTrackWithSingleTrackFile()
|
||||
{
|
||||
_localTrack.Tracks = Builder<Track>.CreateListOfSize(1)
|
||||
.All()
|
||||
.With(e => e.TrackFileId = 1)
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Id = 1,
|
||||
Path = Path.Combine(_rootPath, @"Season 01\30.rock.s01e01.avi"),
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private void GivenMultipleTracksWithSingleTrackFile()
|
||||
{
|
||||
_localTrack.Tracks = Builder<Track>.CreateListOfSize(2)
|
||||
.All()
|
||||
.With(e => e.TrackFileId = 1)
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Id = 1,
|
||||
Path = Path.Combine(_rootPath, @"Season 01\30.rock.s01e01.avi"),
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private void GivenMultipleTracksWithMultipleTrackFiles()
|
||||
{
|
||||
_localTrack.Tracks = Builder<Track>.CreateListOfSize(2)
|
||||
.TheFirst(1)
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Id = 1,
|
||||
Path = Path.Combine(_rootPath, @"Season 01\30.rock.s01e01.avi"),
|
||||
}))
|
||||
.TheNext(1)
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(
|
||||
new TrackFile
|
||||
{
|
||||
Id = 2,
|
||||
Path = Path.Combine(_rootPath, @"Season 01\30.rock.s01e02.avi"),
|
||||
}))
|
||||
.Build()
|
||||
.ToList();
|
||||
_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]
|
||||
@@ -107,26 +76,6 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
Mocker.GetMock<IRecycleBinProvider>().Verify(v => v.DeleteFile(It.IsAny<string>(), It.IsAny<string>()), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_delete_the_same_track_file_only_once()
|
||||
{
|
||||
GivenMultipleTracksWithSingleTrackFile();
|
||||
|
||||
Subject.UpgradeTrackFile(_trackFile, _localTrack);
|
||||
|
||||
Mocker.GetMock<IRecycleBinProvider>().Verify(v => v.DeleteFile(It.IsAny<string>(), It.IsAny<string>()), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_delete_multiple_different_track_files()
|
||||
{
|
||||
GivenMultipleTracksWithMultipleTrackFiles();
|
||||
|
||||
Subject.UpgradeTrackFile(_trackFile, _localTrack);
|
||||
|
||||
Mocker.GetMock<IRecycleBinProvider>().Verify(v => v.DeleteFile(It.IsAny<string>(), It.IsAny<string>()), Times.Exactly(2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_delete_track_file_from_database()
|
||||
{
|
||||
@@ -134,7 +83,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
|
||||
Subject.UpgradeTrackFile(_trackFile, _localTrack);
|
||||
|
||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Delete(It.IsAny<TrackFile>(), DeleteMediaFileReason.Upgrade), Times.Once());
|
||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Delete(It.IsAny<BookFile>(), DeleteMediaFileReason.Upgrade), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -148,7 +97,7 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
|
||||
Subject.UpgradeTrackFile(_trackFile, _localTrack);
|
||||
|
||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Delete(_localTrack.Tracks.Single().TrackFile.Value, DeleteMediaFileReason.Upgrade), Times.Once());
|
||||
// Mocker.GetMock<IMediaFileService>().Verify(v => v.Delete(_localTrack.Album.BookFiles.Value, DeleteMediaFileReason.Upgrade), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -174,26 +123,16 @@ namespace NzbDrone.Core.Test.MediaFiles
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_old_track_files_in_oldFiles()
|
||||
{
|
||||
GivenMultipleTracksWithMultipleTrackFiles();
|
||||
|
||||
Subject.UpgradeTrackFile(_trackFile, _localTrack).OldFiles.Count.Should().Be(2);
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Ignore("Pending readarr fix")]
|
||||
public void should_import_if_existing_file_doesnt_exist_in_db()
|
||||
{
|
||||
_localTrack.Tracks = Builder<Track>.CreateListOfSize(1)
|
||||
.All()
|
||||
.With(e => e.TrackFileId = 1)
|
||||
.With(e => e.TrackFile = new LazyLoaded<TrackFile>(null))
|
||||
.Build()
|
||||
.ToList();
|
||||
_localTrack.Album = Builder<Book>.CreateNew()
|
||||
.With(e => e.BookFiles = new LazyLoaded<List<BookFile>>())
|
||||
.Build();
|
||||
|
||||
Subject.UpgradeTrackFile(_trackFile, _localTrack);
|
||||
|
||||
Mocker.GetMock<IMediaFileService>().Verify(v => v.Delete(_localTrack.Tracks.Single().TrackFile.Value, It.IsAny<DeleteMediaFileReason>()), Times.Never());
|
||||
// Mocker.GetMock<IMediaFileService>().Verify(v => v.Delete(_localTrack.Album.BookFiles.Value, It.IsAny<DeleteMediaFileReason>()), Times.Never());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user