|
|
|
@ -331,4 +331,216 @@ public class FindExtrasTests
|
|
|
|
|
Assert.Equal("/series/Dexter/trailer.mkv", extras[0].Path);
|
|
|
|
|
Assert.Equal("/series/Dexter/trailers/trailer2.mkv", extras[1].Path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void FindExtras_SeriesWithExtras_FindsCorrectExtras()
|
|
|
|
|
{
|
|
|
|
|
var owner = new Series { Name = "Dexter", Path = "/series/Dexter" };
|
|
|
|
|
var paths = new List<string>
|
|
|
|
|
{
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E01.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E01-deleted.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E01 [WEBDL-1080p AVC][AAC 2.0][YouTube]-deleted.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E02 - Second Epi.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E02 - Second Epi-interview.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E02 - Second Epi-scene.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/It's a begining-behindthescenes.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/interviews/The Cast.mkv",
|
|
|
|
|
"/series/Dexter/Funny-behindthescenes.mkv",
|
|
|
|
|
"/series/Dexter/interviews/The Director.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S02E05.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S02E05-clip.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S03E05/Dexter - S03E05 - Fifth.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S03E05/Dexter - S03E05 - Fifth-featurette.mkv",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var files = paths.Select(p => new FileSystemMetadata
|
|
|
|
|
{
|
|
|
|
|
FullName = p,
|
|
|
|
|
Name = Path.GetFileName(p),
|
|
|
|
|
Extension = Path.GetExtension(p),
|
|
|
|
|
IsDirectory = string.IsNullOrEmpty(Path.GetExtension(p))
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
var extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList();
|
|
|
|
|
|
|
|
|
|
Assert.Equal(2, extras.Count);
|
|
|
|
|
Assert.Equal(ExtraType.BehindTheScenes, extras[0].ExtraType);
|
|
|
|
|
Assert.Equal(typeof(Video), extras[0].GetType());
|
|
|
|
|
Assert.Equal("Funny-behindthescenes", extras[0].FileNameWithoutExtension);
|
|
|
|
|
Assert.Equal("/series/Dexter/Funny-behindthescenes.mkv", extras[0].Path);
|
|
|
|
|
Assert.Equal("/series/Dexter/interviews/The Director.mkv", extras[1].Path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void FindExtras_SeasonWithExtras_FindsCorrectExtras()
|
|
|
|
|
{
|
|
|
|
|
var owner = new Season { Name = "Season 1", SeriesName = "Dexter", Path = "/series/Dexter/Season 1" };
|
|
|
|
|
var paths = new List<string>
|
|
|
|
|
{
|
|
|
|
|
"/series/Dexter/Season 1/Dexter 1x01 [Bluray-1080p x264][AC3 5.1][-reward] - Northwest Passage.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter 1x01-deleted.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter 1x01 [WEBDL-1080p AVC][AAC 2.0][YouTube]-deleted.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter 1x01 [WEBDL-1080p AVC][AAC 2.0][YouTube][-MrC] - Log Lady Introduction 1-extra.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E02 - Second Epi.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E02 - Second Epi-interview.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E02 - Second Epi-scene.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/It's a begining-behindthescenes.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/interviews/The Cast.mkv",
|
|
|
|
|
"/series/Dexter/Funny-behindthescenes.mkv",
|
|
|
|
|
"/series/Dexter/interviews/The Director.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S02E05.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S02E05-clip.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S03E05/Dexter - S03E05 - Fifth.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S03E05/Dexter - S03E05 - Fifth-featurette.mkv",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var files = paths.Select(p => new FileSystemMetadata
|
|
|
|
|
{
|
|
|
|
|
FullName = p,
|
|
|
|
|
Name = Path.GetFileName(p),
|
|
|
|
|
Extension = Path.GetExtension(p),
|
|
|
|
|
IsDirectory = string.IsNullOrEmpty(Path.GetExtension(p))
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
var extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList();
|
|
|
|
|
|
|
|
|
|
Assert.Equal(2, extras.Count);
|
|
|
|
|
Assert.Equal(ExtraType.BehindTheScenes, extras[0].ExtraType);
|
|
|
|
|
Assert.Equal(typeof(Video), extras[0].GetType());
|
|
|
|
|
Assert.Equal("It's a begining-behindthescenes", extras[0].FileNameWithoutExtension);
|
|
|
|
|
Assert.Equal("/series/Dexter/Season 1/It's a begining-behindthescenes.mkv", extras[0].Path);
|
|
|
|
|
Assert.Equal("/series/Dexter/Season 1/interviews/The Cast.mkv", extras[1].Path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void FindExtras_SeasonWithExtras_FindsCorrectExtras2()
|
|
|
|
|
{
|
|
|
|
|
// Series name directory has special characters stripped that episodes do not
|
|
|
|
|
var owner = new Season { Name = "Season 1", SeriesName = "The Venture Bros.", Path = "/series/The Venture Bros/Season 1" };
|
|
|
|
|
var paths = new List<string>
|
|
|
|
|
{
|
|
|
|
|
"/series/The Venture Bros/Season 1/The Venture Bros. S01E01.mkv",
|
|
|
|
|
"/series/The Venture Bros/Season 1/The Venture Bros. S01E01-deleted.mkv",
|
|
|
|
|
"/series/The Venture Bros/Season 1/The Venture Bros. - S01E02 - Second Epi.mkv",
|
|
|
|
|
"/series/The Venture Bros/Season 1/The Venture Bros. - S01E02 - Second Epi-interview.mkv",
|
|
|
|
|
"/series/The Venture Bros/Season 1/The Venture Bros. - S01E02 - Second Epi-scene.mkv",
|
|
|
|
|
"/series/The Venture Bros/Season 1/It's a begining-behindthescenes.mkv",
|
|
|
|
|
"/series/The Venture Bros/Season 1/interviews/The Cast.mkv",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var files = paths.Select(p => new FileSystemMetadata
|
|
|
|
|
{
|
|
|
|
|
FullName = p,
|
|
|
|
|
Name = Path.GetFileName(p),
|
|
|
|
|
Extension = Path.GetExtension(p),
|
|
|
|
|
IsDirectory = string.IsNullOrEmpty(Path.GetExtension(p))
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
var extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList();
|
|
|
|
|
|
|
|
|
|
Assert.Equal(2, extras.Count);
|
|
|
|
|
Assert.Equal(ExtraType.BehindTheScenes, extras[0].ExtraType);
|
|
|
|
|
Assert.Equal(typeof(Video), extras[0].GetType());
|
|
|
|
|
Assert.Equal("It's a begining-behindthescenes", extras[0].FileNameWithoutExtension);
|
|
|
|
|
Assert.Equal("/series/The Venture Bros/Season 1/It's a begining-behindthescenes.mkv", extras[0].Path);
|
|
|
|
|
Assert.Equal("/series/The Venture Bros/Season 1/interviews/The Cast.mkv", extras[1].Path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void FindExtras_EpisodeWithExtras_FindsCorrectExtras()
|
|
|
|
|
{
|
|
|
|
|
var paths = new List<string>
|
|
|
|
|
{
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E01.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E01-deleted.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E02 - Second Epi.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E02 - Second Epi-interview.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E02 - Second Epi-scene.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/It's a begining-behindthescenes.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/interviews/The Cast.mkv",
|
|
|
|
|
"/series/Dexter/Funny-behindthescenes.mkv",
|
|
|
|
|
"/series/Dexter/interviews/The Director.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S02E05.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S02E05-clip.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S03E05/Dexter - S03E05 - Fifth.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S03E05/Dexter - S03E05 - Fifth-featurette.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S03E05/Dexter - S03E05 - Fifth-featurette2.mkv",
|
|
|
|
|
"/series/Dexter/Dexter - S03E05/Deleted Scenes/Meet Friends.mkv",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var files = paths.Select(p => new FileSystemMetadata
|
|
|
|
|
{
|
|
|
|
|
FullName = p,
|
|
|
|
|
Name = Path.GetFileName(p),
|
|
|
|
|
Extension = Path.GetExtension(p),
|
|
|
|
|
IsDirectory = string.IsNullOrEmpty(Path.GetExtension(p))
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
var owner = new Episode { Name = "Dexter - S01E01", Path = "/series/Dexter/Season 1/Dexter - S01E01.mkv", IsInMixedFolder = true };
|
|
|
|
|
var extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList();
|
|
|
|
|
|
|
|
|
|
Assert.Single(extras);
|
|
|
|
|
Assert.Equal(ExtraType.DeletedScene, extras[0].ExtraType);
|
|
|
|
|
Assert.Equal(typeof(Video), extras[0].GetType());
|
|
|
|
|
Assert.Equal("/series/Dexter/Season 1/Dexter - S01E01-deleted.mkv", extras[0].Path);
|
|
|
|
|
|
|
|
|
|
owner = new Episode { Name = "Dexter - S01E02 - Second Epi", Path = "/series/Dexter/Season 1/Dexter - S01E02 - Second Epi.mkv", IsInMixedFolder = true };
|
|
|
|
|
extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList();
|
|
|
|
|
|
|
|
|
|
Assert.Equal(2, extras.Count);
|
|
|
|
|
Assert.Equal(ExtraType.Interview, extras[0].ExtraType);
|
|
|
|
|
Assert.Equal(ExtraType.Scene, extras[1].ExtraType);
|
|
|
|
|
Assert.Equal(typeof(Video), extras[0].GetType());
|
|
|
|
|
Assert.Equal("/series/Dexter/Season 1/Dexter - S01E02 - Second Epi-interview.mkv", extras[0].Path);
|
|
|
|
|
Assert.Equal("/series/Dexter/Season 1/Dexter - S01E02 - Second Epi-scene.mkv", extras[1].Path);
|
|
|
|
|
|
|
|
|
|
owner = new Episode { Name = "Dexter - S02E05", Path = "/series/Dexter/Dexter - S02E05.mkv", IsInMixedFolder = true };
|
|
|
|
|
extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList();
|
|
|
|
|
|
|
|
|
|
Assert.Single(extras);
|
|
|
|
|
Assert.Equal(ExtraType.Clip, extras[0].ExtraType);
|
|
|
|
|
Assert.Equal(typeof(Video), extras[0].GetType());
|
|
|
|
|
Assert.Equal("/series/Dexter/Dexter - S02E05-clip.mkv", extras[0].Path);
|
|
|
|
|
|
|
|
|
|
// episode folder with special feature subfolders are not supported yet, but it should be considered as not mixed, but current is marked as mixed
|
|
|
|
|
Folder folderOwner = new Folder { Name = "Dexter - S03E05", Path = "/series/Dexter/Dexter - S03E05", IsInMixedFolder = false };
|
|
|
|
|
extras = _libraryManager.FindExtras(folderOwner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList();
|
|
|
|
|
|
|
|
|
|
Assert.Equal(3, extras.Count);
|
|
|
|
|
// directory type extras are found before suffix type
|
|
|
|
|
Assert.Equal(ExtraType.DeletedScene, extras[0].ExtraType);
|
|
|
|
|
Assert.Equal("/series/Dexter/Dexter - S03E05/Deleted Scenes/Meet Friends.mkv", extras[0].Path);
|
|
|
|
|
Assert.Equal(ExtraType.Featurette, extras[1].ExtraType);
|
|
|
|
|
Assert.Equal(typeof(Video), extras[1].GetType());
|
|
|
|
|
Assert.Equal("/series/Dexter/Dexter - S03E05/Dexter - S03E05 - Fifth-featurette.mkv", extras[1].Path);
|
|
|
|
|
Assert.Equal("/series/Dexter/Dexter - S03E05/Dexter - S03E05 - Fifth-featurette2.mkv", extras[2].Path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void FindExtras_EpisodeWithExtras_CleanNameTest()
|
|
|
|
|
{
|
|
|
|
|
var paths = new List<string>
|
|
|
|
|
{
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E01[Bluray-1080p x264][AC3 5.1].mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E01 [WEBDL-1080p AVC][AAC 2.0][YouTube]-deleted.mkv",
|
|
|
|
|
"/series/Dexter/Season 1/Dexter - S01E01[Bluray-1080p x264][AC3 5.1] - Some crazy deleted scene -deleted.mkv"
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var files = paths.Select(p => new FileSystemMetadata
|
|
|
|
|
{
|
|
|
|
|
FullName = p,
|
|
|
|
|
Name = Path.GetFileName(p),
|
|
|
|
|
Extension = Path.GetExtension(p),
|
|
|
|
|
IsDirectory = string.IsNullOrEmpty(Path.GetExtension(p))
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
var owner = new Episode { Name = "Dexter - S01E01", Path = "/series/Dexter/Season 1/Dexter - S01E01[Bluray-1080p x264][AC3 5.1].mkv", IsInMixedFolder = true };
|
|
|
|
|
var extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList();
|
|
|
|
|
|
|
|
|
|
Assert.Equal(2, extras.Count);
|
|
|
|
|
Assert.Equal(ExtraType.DeletedScene, extras[0].ExtraType);
|
|
|
|
|
Assert.Equal(typeof(Video), extras[0].GetType());
|
|
|
|
|
Assert.Equal("/series/Dexter/Season 1/Dexter - S01E01 [WEBDL-1080p AVC][AAC 2.0][YouTube]-deleted.mkv", extras[0].Path);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|