mirror of https://github.com/ErsatzTV/ErsatzTV.git
8 changed files with 22 additions and 134 deletions
@ -1,8 +0,0 @@
@@ -1,8 +0,0 @@
|
||||
namespace ErsatzTV.Core.Tests.Fakes; |
||||
|
||||
public record FakeFileEntry(string Path) |
||||
{ |
||||
public DateTime LastWriteTime { get; set; } = SystemTime.MinValueUtc; |
||||
|
||||
public string Contents { get; set; } |
||||
} |
||||
@ -1,3 +0,0 @@
@@ -1,3 +0,0 @@
|
||||
namespace ErsatzTV.Core.Tests.Fakes; |
||||
|
||||
public record FakeFolderEntry(string Path); |
||||
@ -1,89 +0,0 @@
@@ -1,89 +0,0 @@
|
||||
using ErsatzTV.Core.Interfaces.Metadata; |
||||
|
||||
namespace ErsatzTV.Core.Tests.Fakes; |
||||
|
||||
public class FakeLocalFileSystem : ILocalFileSystem |
||||
{ |
||||
private readonly List<FakeFileEntry> _files; |
||||
private readonly List<FakeFolderEntry> _folders; |
||||
|
||||
public FakeLocalFileSystem(List<FakeFileEntry> files) : this(files, new List<FakeFolderEntry>()) |
||||
{ |
||||
} |
||||
|
||||
public FakeLocalFileSystem(List<FakeFileEntry> files, List<FakeFolderEntry> folders) |
||||
{ |
||||
_files = files; |
||||
|
||||
var allFolders = new List<string>(folders.Map(f => f.Path)); |
||||
foreach (FakeFileEntry file in _files) |
||||
{ |
||||
List<DirectoryInfo> moreFolders = |
||||
Split(new DirectoryInfo(Path.GetDirectoryName(file.Path) ?? string.Empty)); |
||||
allFolders.AddRange(moreFolders.Map(i => i.FullName)); |
||||
} |
||||
|
||||
_folders = allFolders.Distinct().Map(f => new FakeFolderEntry(f)).ToList(); |
||||
} |
||||
|
||||
public Unit EnsureFolderExists(string folder) => Unit.Default; |
||||
|
||||
public DateTime GetLastWriteTime(string path) => |
||||
Optional(_files.SingleOrDefault(f => f.Path == path)) |
||||
.Map(f => f.LastWriteTime) |
||||
.IfNone(SystemTime.MinValueUtc); |
||||
|
||||
public IEnumerable<string> ListSubdirectories(string folder) => |
||||
_folders.Map(f => f.Path).Filter(f => f.StartsWith(folder) && Directory.GetParent(f)?.FullName == folder); |
||||
|
||||
public IEnumerable<string> ListFiles(string folder) => |
||||
_files.Map(f => f.Path).Filter(f => Path.GetDirectoryName(f) == folder); |
||||
|
||||
// TODO: this isn't accurate, need to use search pattern
|
||||
public IEnumerable<string> ListFiles(string folder, string searchPattern) => |
||||
_files.Map(f => f.Path).Filter(f => Path.GetDirectoryName(f) == folder); |
||||
|
||||
public IEnumerable<string> ListFiles(string folder, params string[] searchPatterns) => |
||||
_files.Map(f => f.Path).Filter(f => Path.GetDirectoryName(f) == folder); |
||||
|
||||
public bool FileExists(string path) => _files.Any(f => f.Path == path); |
||||
public bool FolderExists(string folder) => false; |
||||
|
||||
public Task<Either<BaseError, Unit>> CopyFile(string source, string destination) => |
||||
Task.FromResult(Right<BaseError, Unit>(Unit.Default)); |
||||
|
||||
public Unit EmptyFolder(string folder) => Unit.Default; |
||||
|
||||
public async Task<string[]> ReadAllLines(string path) => await _files |
||||
.Filter(f => f.Path == path) |
||||
.HeadOrNone() |
||||
.Select(f => f.Contents) |
||||
.IfNoneAsync(string.Empty) |
||||
.Map(s => s.Split(Environment.NewLine)); |
||||
|
||||
public Task<byte[]> GetHash(string path) => throw new NotSupportedException(); |
||||
|
||||
public string GetCustomOrDefaultFile(string folder, string file) |
||||
{ |
||||
string path = Path.Combine(folder, file); |
||||
return FileExists(path) ? path : Path.Combine(folder, $"_{file}"); |
||||
} |
||||
|
||||
private static List<DirectoryInfo> Split(DirectoryInfo path) |
||||
{ |
||||
var result = new List<DirectoryInfo>(); |
||||
if (path == null || string.IsNullOrWhiteSpace(path.FullName)) |
||||
{ |
||||
return result; |
||||
} |
||||
|
||||
if (path.Parent != null) |
||||
{ |
||||
result.AddRange(Split(path.Parent)); |
||||
} |
||||
|
||||
result.Add(path); |
||||
|
||||
return result; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue