big refactoring. get rid of static properties and coupled architecture. prepare system for integration tests

This commit is contained in:
Oleksandr Bezdieniezhnykh
2025-11-17 13:14:05 +02:00
parent 22529c26ec
commit e7ea5a8ded
38 changed files with 808 additions and 157 deletions
+67
View File
@@ -0,0 +1,67 @@
using System.IO;
using Azaion.Common.Services;
namespace Azaion.Test;
public class InMemoryFileSystem : IFileSystem
{
private readonly Dictionary<string, byte[]> _files = new();
private readonly HashSet<string> _directories = new();
public Task<byte[]> ReadAllBytesAsync(string path, CancellationToken ct = default)
{
if (!_files.TryGetValue(path, out var content))
throw new FileNotFoundException($"File not found: {path}");
return Task.FromResult(content);
}
public Task WriteAllBytesAsync(string path, byte[] content, CancellationToken ct = default)
{
_files[path] = content;
var directory = Path.GetDirectoryName(path);
if (directory != null)
_directories.Add(directory);
return Task.CompletedTask;
}
public bool FileExists(string path)
{
return _files.ContainsKey(path);
}
public void DeleteFile(string path)
{
_files.Remove(path);
}
public IEnumerable<string> GetFiles(string directory, string searchPattern)
{
var pattern = searchPattern.Replace("*", ".*").Replace("?", ".");
var regex = new System.Text.RegularExpressions.Regex(pattern);
return _files.Keys.Where(f => Path.GetDirectoryName(f) == directory && regex.IsMatch(Path.GetFileName(f)));
}
public IEnumerable<FileInfo> GetFileInfos(string directory, string[] searchPatterns)
{
var files = searchPatterns.SelectMany(pattern => GetFiles(directory, pattern));
return files.Select(f => new FileInfo(f));
}
public DirectoryInfo GetDirectoryInfo(string path)
{
if (!_directories.Contains(path))
_directories.Add(path);
return new DirectoryInfo(path);
}
public bool DirectoryExists(string path)
{
return _directories.Contains(path);
}
public void CreateDirectory(string path)
{
_directories.Add(path);
}
}