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 @@
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 @@
using System.Globalization; using System.Globalization;
using Bugsnag;
using ErsatzTV.Core.Domain; using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories; using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Metadata;
using ErsatzTV.Scanner.Core.Metadata; using ErsatzTV.Scanner.Core.Metadata;
using ErsatzTV.Scanner.Tests.Core.Fakes; using ErsatzTV.Scanner.Tests.Core.Fakes;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using NSubstitute; using NSubstitute;
using NUnit.Framework; using NUnit.Framework;
using Shouldly; using Shouldly;
using Testably.Abstractions.Testing;
using Testably.Abstractions.Testing.Initializer;
namespace ErsatzTV.Scanner.Tests.Core.Metadata; namespace ErsatzTV.Scanner.Tests.Core.Metadata;
@ -46,10 +50,17 @@ public class LocalSubtitlesProviderTests
new(@"/Movies/Avatar (2009)/Avatar (2009).DE.SDH.FORCED.SRT") 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( var provider = new LocalSubtitlesProvider(
Substitute.For<IMediaItemRepository>(), Substitute.For<IMediaItemRepository>(),
Substitute.For<IMetadataRepository>(), Substitute.For<IMetadataRepository>(),
new FakeLocalFileSystem(fakeFiles), new LocalFileSystem(fileSystem, Substitute.For<IClient>(), Substitute.For<ILogger<LocalFileSystem>>()),
Substitute.For<ILogger<LocalSubtitlesProvider>>()); Substitute.For<ILogger<LocalSubtitlesProvider>>());
List<Subtitle> result = provider.LocateExternalSubtitles( List<Subtitle> result = provider.LocateExternalSubtitles(
@ -91,10 +102,17 @@ public class LocalSubtitlesProviderTests
new(@"/Movies/Avatar (2009)/Avatar (2009).DE.SDH.FORCED.SRT") 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( var provider = new LocalSubtitlesProvider(
Substitute.For<IMediaItemRepository>(), Substitute.For<IMediaItemRepository>(),
Substitute.For<IMetadataRepository>(), Substitute.For<IMetadataRepository>(),
new FakeLocalFileSystem(fakeFiles), new LocalFileSystem(fileSystem, Substitute.For<IClient>(), Substitute.For<ILogger<LocalFileSystem>>()),
Substitute.For<ILogger<LocalSubtitlesProvider>>()); Substitute.For<ILogger<LocalSubtitlesProvider>>());
List<Subtitle> result = provider.LocateExternalSubtitles( List<Subtitle> result = provider.LocateExternalSubtitles(

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

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

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

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

Loading…
Cancel
Save