diff --git a/tests/Jellyfin.Controller.Tests/DirectoryServiceTests.cs b/tests/Jellyfin.Controller.Tests/DirectoryServiceTests.cs index 46439aecbe..83a0233845 100644 --- a/tests/Jellyfin.Controller.Tests/DirectoryServiceTests.cs +++ b/tests/Jellyfin.Controller.Tests/DirectoryServiceTests.cs @@ -79,6 +79,21 @@ namespace Jellyfin.Controller.Tests Assert.Equal(_lowerCaseFileSystemMetadata.Where(f => !f.IsDirectory), lowerCaseResult); } + [Fact] + public void GetDirectories_GivenPathsWithDifferentCasing_ReturnsCorrectDirectories() + { + var fileSystemMock = new Mock(); + fileSystemMock.Setup(f => f.GetFileSystemEntries(It.Is(x => x == UpperCasePath), false)).Returns(_upperCaseFileSystemMetadata); + fileSystemMock.Setup(f => f.GetFileSystemEntries(It.Is(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() { @@ -95,15 +110,52 @@ namespace Jellyfin.Controller.Tests Exists = false }; var fileSystemMock = new Mock(); - fileSystemMock.Setup(f => f.GetFileInfo(It.Is(x => x == upperCasePath))).Returns(upperCaseFileSystemMetadata); - fileSystemMock.Setup(f => f.GetFileInfo(It.Is(x => x == lowerCasePath))).Returns(lowerCaseFileSystemMetadata); + fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is(x => x == upperCasePath))).Returns(upperCaseFileSystemMetadata); + fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is(x => x == lowerCasePath))).Returns(lowerCaseFileSystemMetadata); var directoryService = new DirectoryService(fileSystemMock.Object); - var lowerCaseResult = directoryService.GetFile(lowerCasePath); - var upperCaseResult = directoryService.GetFile(upperCasePath); + var lowerCaseDirResult = directoryService.GetDirectory(lowerCasePath); + var lowerCaseFileResult = directoryService.GetFile(lowerCasePath); + var upperCaseDirResult = directoryService.GetDirectory(upperCasePath); + var upperCaseFileResult = directoryService.GetFile(upperCasePath); - Assert.Equal(lowerCaseFileSystemMetadata, lowerCaseResult); - Assert.Null(upperCaseResult); + 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(); + fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is(x => x == upperCasePath))).Returns(upperCaseFileSystemMetadata); + fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is(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] @@ -122,11 +174,11 @@ namespace Jellyfin.Controller.Tests }; var fileSystemMock = new Mock(); - fileSystemMock.Setup(f => f.GetFileInfo(It.Is(x => x == path))).Returns(cachedFileSystemMetadata); + fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is(x => x == path))).Returns(cachedFileSystemMetadata); var directoryService = new DirectoryService(fileSystemMock.Object); var result = directoryService.GetFile(path); - fileSystemMock.Setup(f => f.GetFileInfo(It.Is(x => x == path))).Returns(newFileSystemMetadata); + fileSystemMock.Setup(f => f.GetFileSystemInfo(It.Is(x => x == path))).Returns(newFileSystemMetadata); var secondResult = directoryService.GetFile(path); Assert.Equal(cachedFileSystemMetadata, result);