From 329970f01b638af2ba42c635ac3c770624a09318 Mon Sep 17 00:00:00 2001 From: tjarls Date: Sat, 20 Aug 2022 21:31:00 +0100 Subject: [PATCH] Simplify parent lookup with Directory.GetParent (#1455) * Simplify parent lookup with Directory.GetParent * Address comments --- API.Tests/Services/DirectoryServiceTests.cs | 31 +++++++++++++++++++++ API/Services/DirectoryService.cs | 31 ++++++--------------- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/API.Tests/Services/DirectoryServiceTests.cs b/API.Tests/Services/DirectoryServiceTests.cs index fac04bf9ef..2e02641b9a 100644 --- a/API.Tests/Services/DirectoryServiceTests.cs +++ b/API.Tests/Services/DirectoryServiceTests.cs @@ -963,5 +963,36 @@ public void GetAllDirectories_ShouldFindAllNestedDirectories() } #endregion + + #region GetParentDirectory + + [Theory] + [InlineData(@"C:/file.txt", "C:/")] + [InlineData(@"C:/folder/file.txt", "C:/folder")] + [InlineData(@"C:/folder/subfolder/file.txt", "C:/folder/subfolder")] + public void GetParentDirectoryName_ShouldFindParentOfFiles(string path, string expected) + { + var fileSystem = new MockFileSystem(new Dictionary + { + { path, new MockFileData(string.Empty)} + }); + + var ds = new DirectoryService(Substitute.For>(), fileSystem); + Assert.Equal(expected, ds.GetParentDirectoryName(path)); + } + [Theory] + [InlineData(@"C:/folder", "C:/")] + [InlineData(@"C:/folder/subfolder", "C:/folder")] + [InlineData(@"C:/folder/subfolder/another", "C:/folder/subfolder")] + public void GetParentDirectoryName_ShouldFindParentOfDirectories(string path, string expected) + { + var fileSystem = new MockFileSystem(); + fileSystem.AddDirectory(path); + + var ds = new DirectoryService(Substitute.For>(), fileSystem); + Assert.Equal(expected, ds.GetParentDirectoryName(path)); + } + + #endregion } } diff --git a/API/Services/DirectoryService.cs b/API/Services/DirectoryService.cs index 8c7d29603f..5de343ea4d 100644 --- a/API/Services/DirectoryService.cs +++ b/API/Services/DirectoryService.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Collections.Immutable; using System.IO; @@ -554,31 +554,18 @@ public IEnumerable GetAllDirectories(string folderPath) /// /// Returns the parent directories name for a file or folder. Empty string is path is not valid. /// - /// This does touch I/O with an Attribute lookup /// /// public string GetParentDirectoryName(string fileOrFolder) { - // TODO: Write Unit tests - try - { - var attr = File.GetAttributes(fileOrFolder); - var isDirectory = attr.HasFlag(FileAttributes.Directory); - if (isDirectory) - { - return Parser.Parser.NormalizePath(FileSystem.DirectoryInfo - .FromDirectoryName(fileOrFolder).Parent - .FullName); - } - - return Parser.Parser.NormalizePath(FileSystem.FileInfo - .FromFileName(fileOrFolder).Directory.Parent - .FullName); - } - catch (Exception) - { - return string.Empty; - } + try + { + return Parser.Parser.NormalizePath(Directory.GetParent(fileOrFolder).FullName); + } + catch (Exception) + { + return string.Empty; + } } ///