123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- using System.Linq;
- using MediaBrowser.Controller.Providers;
- using MediaBrowser.Model.IO;
- using Moq;
- using Xunit;
- namespace Jellyfin.Controller.Tests
- {
- public class DirectoryServiceTests
- {
- private const string LowerCasePath = "/music/someartist";
- private const string UpperCasePath = "/music/SOMEARTIST";
- private static readonly FileSystemMetadata[] _lowerCaseFileSystemMetadata =
- {
- new()
- {
- FullName = LowerCasePath + "/Artwork",
- IsDirectory = true
- },
- new()
- {
- FullName = LowerCasePath + "/Some Other Folder",
- IsDirectory = true
- },
- new()
- {
- FullName = LowerCasePath + "/Song 2.mp3",
- IsDirectory = false
- },
- new()
- {
- FullName = LowerCasePath + "/Song 3.mp3",
- IsDirectory = false
- }
- };
- private static readonly FileSystemMetadata[] _upperCaseFileSystemMetadata =
- {
- new()
- {
- FullName = UpperCasePath + "/Lyrics",
- IsDirectory = true
- },
- new()
- {
- FullName = UpperCasePath + "/Song 1.mp3",
- IsDirectory = false
- }
- };
- [Fact]
- public void GetFileSystemEntries_GivenPathsWithDifferentCasing_CachesAll()
- {
- var fileSystemMock = new Mock<IFileSystem>();
- fileSystemMock.Setup(f => f.GetFileSystemEntries(It.Is<string>(x => x == UpperCasePath), false)).Returns(_upperCaseFileSystemMetadata);
- fileSystemMock.Setup(f => f.GetFileSystemEntries(It.Is<string>(x => x == LowerCasePath), false)).Returns(_lowerCaseFileSystemMetadata);
- var directoryService = new DirectoryService(fileSystemMock.Object);
- var upperCaseResult = directoryService.GetFileSystemEntries(UpperCasePath);
- var lowerCaseResult = directoryService.GetFileSystemEntries(LowerCasePath);
- Assert.Equal(_upperCaseFileSystemMetadata, upperCaseResult);
- Assert.Equal(_lowerCaseFileSystemMetadata, lowerCaseResult);
- }
- [Fact]
- public void GetFiles_GivenPathsWithDifferentCasing_ReturnsCorrectFiles()
- {
- var fileSystemMock = new Mock<IFileSystem>();
- fileSystemMock.Setup(f => f.GetFileSystemEntries(It.Is<string>(x => x == UpperCasePath), false)).Returns(_upperCaseFileSystemMetadata);
- fileSystemMock.Setup(f => f.GetFileSystemEntries(It.Is<string>(x => x == LowerCasePath), false)).Returns(_lowerCaseFileSystemMetadata);
- var directoryService = new DirectoryService(fileSystemMock.Object);
- var upperCaseResult = directoryService.GetFiles(UpperCasePath);
- var lowerCaseResult = directoryService.GetFiles(LowerCasePath);
- Assert.Equal(_upperCaseFileSystemMetadata.Where(f => !f.IsDirectory), upperCaseResult);
- Assert.Equal(_lowerCaseFileSystemMetadata.Where(f => !f.IsDirectory), lowerCaseResult);
- }
- [Fact]
- public void GetDirectories_GivenPathsWithDifferentCasing_ReturnsCorrectDirectories()
- {
- var fileSystemMock = new Mock<IFileSystem>();
- fileSystemMock.Setup(f => f.GetFileSystemEntries(It.Is<string>(x => x == UpperCasePath), false)).Returns(_upperCaseFileSystemMetadata);
- fileSystemMock.Setup(f => f.GetFileSystemEntries(It.Is<string>(x => x == LowerCasePath), false)).Returns(_lowerCaseFileSystemMetadata);
- var directoryService = new DirectoryService(fileSystemMock.Object);
- var upperCaseResult = directoryService.GetDirectories(UpperCasePath);
- var lowerCaseResult = directoryService.GetDirectories(LowerCasePath);
- Assert.Equal(_upperCaseFileSystemMetadata.Where(f => f.IsDirectory), upperCaseResult);
- Assert.Equal(_lowerCaseFileSystemMetadata.Where(f => f.IsDirectory), lowerCaseResult);
- }
- [Fact]
- public void GetFile_GivenFilePathsWithDifferentCasing_ReturnsCorrectFile()
- {
- const string lowerCasePath = "/music/someartist/song 1.mp3";
- var lowerCaseFileSystemMetadata = new FileSystemMetadata
- {
- FullName = lowerCasePath,
- Exists = true
- };
- const string upperCasePath = "/music/SOMEARTIST/SONG 1.mp3";
- var upperCaseFileSystemMetadata = new FileSystemMetadata
- {
- FullName = upperCasePath,
- Exists = false
- };
- var fileSystemMock = new Mock<IFileSystem>();
- fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == upperCasePath))).Returns(upperCaseFileSystemMetadata);
- fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == lowerCasePath))).Returns(lowerCaseFileSystemMetadata);
- var directoryService = new DirectoryService(fileSystemMock.Object);
- var lowerCaseDirResult = directoryService.GetDirectory(lowerCasePath);
- var lowerCaseFileResult = directoryService.GetFile(lowerCasePath);
- var upperCaseDirResult = directoryService.GetDirectory(upperCasePath);
- var upperCaseFileResult = directoryService.GetFile(upperCasePath);
- Assert.Null(lowerCaseDirResult);
- Assert.Equal(lowerCaseFileSystemMetadata, lowerCaseFileResult);
- Assert.Null(upperCaseDirResult);
- Assert.Null(upperCaseFileResult);
- }
- [Fact]
- public void GetDirectory_GivenFilePathsWithDifferentCasing_ReturnsCorrectDirectory()
- {
- const string lowerCasePath = "/music/someartist/Lyrics";
- var lowerCaseFileSystemMetadata = new FileSystemMetadata
- {
- FullName = lowerCasePath,
- IsDirectory = true,
- Exists = true
- };
- const string upperCasePath = "/music/SOMEARTIST/LYRICS";
- var upperCaseFileSystemMetadata = new FileSystemMetadata
- {
- FullName = upperCasePath,
- IsDirectory = true,
- Exists = false
- };
- var fileSystemMock = new Mock<IFileSystem>();
- fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == upperCasePath))).Returns(upperCaseFileSystemMetadata);
- fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == lowerCasePath))).Returns(lowerCaseFileSystemMetadata);
- var directoryService = new DirectoryService(fileSystemMock.Object);
- var lowerCaseDirResult = directoryService.GetDirectory(lowerCasePath);
- var lowerCaseFileResult = directoryService.GetFile(lowerCasePath);
- var upperCaseDirResult = directoryService.GetDirectory(upperCasePath);
- var upperCaseFileResult = directoryService.GetFile(upperCasePath);
- Assert.Equal(lowerCaseFileSystemMetadata, lowerCaseDirResult);
- Assert.Null(lowerCaseFileResult);
- Assert.Null(upperCaseDirResult);
- Assert.Null(upperCaseFileResult);
- }
- [Fact]
- public void GetFile_GivenCachedPath_ReturnsCachedFile()
- {
- const string path = "/music/someartist/song 1.mp3";
- var cachedFileSystemMetadata = new FileSystemMetadata
- {
- FullName = path,
- Exists = true
- };
- var newFileSystemMetadata = new FileSystemMetadata
- {
- FullName = "/music/SOMEARTIST/song 1.mp3",
- Exists = true
- };
- var fileSystemMock = new Mock<IFileSystem>();
- fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == path))).Returns(cachedFileSystemMetadata);
- var directoryService = new DirectoryService(fileSystemMock.Object);
- var result = directoryService.GetFile(path);
- fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is<string>(x => x == path))).Returns(newFileSystemMetadata);
- var secondResult = directoryService.GetFile(path);
- Assert.Equivalent(cachedFileSystemMetadata, result);
- Assert.Equivalent(cachedFileSystemMetadata, secondResult);
- }
- [Fact]
- public void GetFilePaths_GivenCachedFilePathWithoutClear_ReturnsOnlyCachedPaths()
- {
- const string path = "/music/someartist";
- var cachedPaths = new[]
- {
- "/music/someartist/song 1.mp3",
- "/music/someartist/song 2.mp3",
- "/music/someartist/song 3.mp3",
- "/music/someartist/song 4.mp3",
- };
- var newPaths = new[]
- {
- "/music/someartist/song 5.mp3",
- "/music/someartist/song 6.mp3",
- "/music/someartist/song 7.mp3",
- "/music/someartist/song 8.mp3",
- };
- var fileSystemMock = new Mock<IFileSystem>();
- fileSystemMock.Setup(f => f.GetFilePaths(It.Is<string>(x => x == path), false)).Returns(cachedPaths);
- var directoryService = new DirectoryService(fileSystemMock.Object);
- var result = directoryService.GetFilePaths(path);
- fileSystemMock.Setup(f => f.GetFilePaths(It.Is<string>(x => x == path), false)).Returns(newPaths);
- var secondResult = directoryService.GetFilePaths(path);
- Assert.Equal(cachedPaths, result);
- Assert.Equal(cachedPaths, secondResult);
- }
- [Fact]
- public void GetFilePaths_GivenCachedFilePathWithClear_ReturnsNewPaths()
- {
- const string path = "/music/someartist";
- var cachedPaths = new[]
- {
- "/music/someartist/song 1.mp3",
- "/music/someartist/song 2.mp3",
- "/music/someartist/song 3.mp3",
- "/music/someartist/song 4.mp3",
- };
- var newPaths = new[]
- {
- "/music/someartist/song 5.mp3",
- "/music/someartist/song 6.mp3",
- "/music/someartist/song 7.mp3",
- "/music/someartist/song 8.mp3",
- };
- var fileSystemMock = new Mock<IFileSystem>();
- fileSystemMock.Setup(f => f.GetFilePaths(It.Is<string>(x => x == path), false)).Returns(cachedPaths);
- var directoryService = new DirectoryService(fileSystemMock.Object);
- var result = directoryService.GetFilePaths(path);
- fileSystemMock.Setup(f => f.GetFilePaths(It.Is<string>(x => x == path), false)).Returns(newPaths);
- var secondResult = directoryService.GetFilePaths(path, true);
- Assert.Equal(cachedPaths, result);
- Assert.Equal(newPaths, secondResult);
- }
- }
- }
|