Browse Source

remove fake local file system

pull/2655/head
Jason Dove 8 months ago
parent
commit
b5c1bedfd2
No known key found for this signature in database
  1. 81
      ErsatzTV.Scanner.Tests/Core/Fakes/FakeLocalFileSystem.cs
  2. 22
      ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs
  3. 4
      ErsatzTV.Scanner.Tests/Core/Metadata/MovieFolderScannerTests.cs
  4. 2
      ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs

81
ErsatzTV.Scanner.Tests/Core/Fakes/FakeLocalFileSystem.cs

@ -1,81 +0,0 @@ @@ -1,81 +0,0 @@
using ErsatzTV.Core;
using ErsatzTV.Core.Interfaces.Metadata;
namespace ErsatzTV.Scanner.Tests.Core.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 Task<Either<BaseError, Unit>> CopyFile(string source, string destination) =>
Task.FromResult(Right<BaseError, Unit>(Unit.Default));
public Unit EmptyFolder(string folder) => Unit.Default;
public Task<byte[]> GetHash(string path) => throw new NotImplementedException();
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;
}
}

22
ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs

@ -1,12 +1,16 @@ @@ -1,12 +1,16 @@
using System.Globalization;
using Bugsnag;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Metadata;
using ErsatzTV.Scanner.Core.Metadata;
using ErsatzTV.Scanner.Tests.Core.Fakes;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
using Shouldly;
using Testably.Abstractions.Testing;
using Testably.Abstractions.Testing.Initializer;
namespace ErsatzTV.Scanner.Tests.Core.Metadata;
@ -46,10 +50,17 @@ public class LocalSubtitlesProviderTests @@ -46,10 +50,17 @@ public class LocalSubtitlesProviderTests
new(@"/Movies/Avatar (2009)/Avatar (2009).DE.SDH.FORCED.SRT")
};
var fileSystem = new MockFileSystem();
IFileSystemInitializer<MockFileSystem> init = fileSystem.Initialize();
foreach (var file in fakeFiles)
{
init.WithFile(file.Path);
}
var provider = new LocalSubtitlesProvider(
Substitute.For<IMediaItemRepository>(),
Substitute.For<IMetadataRepository>(),
new FakeLocalFileSystem(fakeFiles),
new LocalFileSystem(fileSystem, Substitute.For<IClient>(), Substitute.For<ILogger<LocalFileSystem>>()),
Substitute.For<ILogger<LocalSubtitlesProvider>>());
List<Subtitle> result = provider.LocateExternalSubtitles(
@ -91,10 +102,17 @@ public class LocalSubtitlesProviderTests @@ -91,10 +102,17 @@ public class LocalSubtitlesProviderTests
new(@"/Movies/Avatar (2009)/Avatar (2009).DE.SDH.FORCED.SRT")
};
var fileSystem = new MockFileSystem();
IFileSystemInitializer<MockFileSystem> init = fileSystem.Initialize();
foreach (var file in fakeFiles)
{
init.WithFile(file.Path);
}
var provider = new LocalSubtitlesProvider(
Substitute.For<IMediaItemRepository>(),
Substitute.For<IMetadataRepository>(),
new FakeLocalFileSystem(fakeFiles),
new LocalFileSystem(fileSystem, Substitute.For<IClient>(), Substitute.For<ILogger<LocalFileSystem>>()),
Substitute.For<ILogger<LocalSubtitlesProvider>>());
List<Subtitle> result = provider.LocateExternalSubtitles(

4
ErsatzTV.Scanner.Tests/Core/Metadata/MovieFolderScannerTests.cs

@ -728,7 +728,7 @@ public class MovieFolderScannerTests @@ -728,7 +728,7 @@ public class MovieFolderScannerTests
return new MovieFolderScanner(
_scannerProxy,
fileSystem,
new FakeLocalFileSystem([..files]),
new LocalFileSystem(fileSystem, Substitute.For<IClient>(), Substitute.For<ILogger<LocalFileSystem>>()),
_movieRepository,
_localStatisticsProvider,
Substitute.For<ILocalSubtitlesProvider>(),
@ -756,7 +756,7 @@ public class MovieFolderScannerTests @@ -756,7 +756,7 @@ public class MovieFolderScannerTests
return new MovieFolderScanner(
_scannerProxy,
fileSystem,
new FakeLocalFileSystem([], [..folders]),
new LocalFileSystem(fileSystem, Substitute.For<IClient>(), Substitute.For<ILogger<LocalFileSystem>>()),
_movieRepository,
_localStatisticsProvider,
Substitute.For<ILocalSubtitlesProvider>(),

2
ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs

@ -10,7 +10,7 @@ namespace ErsatzTV.Scanner.Core.Metadata; @@ -10,7 +10,7 @@ namespace ErsatzTV.Scanner.Core.Metadata;
public class LocalSubtitlesProvider : ILocalSubtitlesProvider
{
private readonly List<CultureInfo> _languageCodes = new();
private readonly List<CultureInfo> _languageCodes = [];
private readonly ILocalFileSystem _localFileSystem;
private readonly ILogger<LocalSubtitlesProvider> _logger;
private readonly IMediaItemRepository _mediaItemRepository;

Loading…
Cancel
Save