Simplify parent lookup with Directory.GetParent (#1455)

* Simplify parent lookup with Directory.GetParent

* Address comments
This commit is contained in:
tjarls 2022-08-20 21:31:00 +01:00 committed by GitHub
parent 66a998425b
commit 329970f01b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 22 deletions

View File

@ -963,5 +963,36 @@ namespace API.Tests.Services
} }
#endregion #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<string, MockFileData>
{
{ path, new MockFileData(string.Empty)}
});
var ds = new DirectoryService(Substitute.For<ILogger<DirectoryService>>(), 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<ILogger<DirectoryService>>(), fileSystem);
Assert.Equal(expected, ds.GetParentDirectoryName(path));
}
#endregion
} }
} }

View File

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Immutable; using System.Collections.Immutable;
using System.IO; using System.IO;
@ -554,31 +554,18 @@ namespace API.Services
/// <summary> /// <summary>
/// Returns the parent directories name for a file or folder. Empty string is path is not valid. /// Returns the parent directories name for a file or folder. Empty string is path is not valid.
/// </summary> /// </summary>
/// <remarks>This does touch I/O with an Attribute lookup</remarks>
/// <param name="fileOrFolder"></param> /// <param name="fileOrFolder"></param>
/// <returns></returns> /// <returns></returns>
public string GetParentDirectoryName(string fileOrFolder) public string GetParentDirectoryName(string fileOrFolder)
{ {
// TODO: Write Unit tests try
try {
{ return Parser.Parser.NormalizePath(Directory.GetParent(fileOrFolder).FullName);
var attr = File.GetAttributes(fileOrFolder); }
var isDirectory = attr.HasFlag(FileAttributes.Directory); catch (Exception)
if (isDirectory) {
{ return string.Empty;
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;
}
} }
/// <summary> /// <summary>