diff --git a/ErsatzTV.Scanner.Tests/Core/Fakes/FakeLocalFileSystem.cs b/ErsatzTV.Scanner.Tests/Core/Fakes/FakeLocalFileSystem.cs deleted file mode 100644 index 176ba0ecb..000000000 --- a/ErsatzTV.Scanner.Tests/Core/Fakes/FakeLocalFileSystem.cs +++ /dev/null @@ -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 _files; - private readonly List _folders; - - public FakeLocalFileSystem(List files) : this(files, new List()) - { - } - - public FakeLocalFileSystem(List files, List folders) - { - _files = files; - - var allFolders = new List(folders.Map(f => f.Path)); - foreach (FakeFileEntry file in _files) - { - List 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 ListSubdirectories(string folder) => - _folders.Map(f => f.Path).Filter(f => f.StartsWith(folder) && Directory.GetParent(f)?.FullName == folder); - - public IEnumerable 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 ListFiles(string folder, string searchPattern) => - _files.Map(f => f.Path).Filter(f => Path.GetDirectoryName(f) == folder); - - public IEnumerable 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> CopyFile(string source, string destination) => - Task.FromResult(Right(Unit.Default)); - - public Unit EmptyFolder(string folder) => Unit.Default; - public Task 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 Split(DirectoryInfo path) - { - var result = new List(); - if (path == null || string.IsNullOrWhiteSpace(path.FullName)) - { - return result; - } - - if (path.Parent != null) - { - result.AddRange(Split(path.Parent)); - } - - result.Add(path); - - return result; - } -} diff --git a/ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs b/ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs index c0c9ba2ed..0a9330741 100644 --- a/ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs +++ b/ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs @@ -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 new(@"/Movies/Avatar (2009)/Avatar (2009).DE.SDH.FORCED.SRT") }; + var fileSystem = new MockFileSystem(); + IFileSystemInitializer init = fileSystem.Initialize(); + foreach (var file in fakeFiles) + { + init.WithFile(file.Path); + } + var provider = new LocalSubtitlesProvider( Substitute.For(), Substitute.For(), - new FakeLocalFileSystem(fakeFiles), + new LocalFileSystem(fileSystem, Substitute.For(), Substitute.For>()), Substitute.For>()); List result = provider.LocateExternalSubtitles( @@ -91,10 +102,17 @@ public class LocalSubtitlesProviderTests new(@"/Movies/Avatar (2009)/Avatar (2009).DE.SDH.FORCED.SRT") }; + var fileSystem = new MockFileSystem(); + IFileSystemInitializer init = fileSystem.Initialize(); + foreach (var file in fakeFiles) + { + init.WithFile(file.Path); + } + var provider = new LocalSubtitlesProvider( Substitute.For(), Substitute.For(), - new FakeLocalFileSystem(fakeFiles), + new LocalFileSystem(fileSystem, Substitute.For(), Substitute.For>()), Substitute.For>()); List result = provider.LocateExternalSubtitles( diff --git a/ErsatzTV.Scanner.Tests/Core/Metadata/MovieFolderScannerTests.cs b/ErsatzTV.Scanner.Tests/Core/Metadata/MovieFolderScannerTests.cs index f5808939d..6a5d73092 100644 --- a/ErsatzTV.Scanner.Tests/Core/Metadata/MovieFolderScannerTests.cs +++ b/ErsatzTV.Scanner.Tests/Core/Metadata/MovieFolderScannerTests.cs @@ -728,7 +728,7 @@ public class MovieFolderScannerTests return new MovieFolderScanner( _scannerProxy, fileSystem, - new FakeLocalFileSystem([..files]), + new LocalFileSystem(fileSystem, Substitute.For(), Substitute.For>()), _movieRepository, _localStatisticsProvider, Substitute.For(), @@ -756,7 +756,7 @@ public class MovieFolderScannerTests return new MovieFolderScanner( _scannerProxy, fileSystem, - new FakeLocalFileSystem([], [..folders]), + new LocalFileSystem(fileSystem, Substitute.For(), Substitute.For>()), _movieRepository, _localStatisticsProvider, Substitute.For(), diff --git a/ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs b/ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs index faab7296a..abbb8486c 100644 --- a/ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs +++ b/ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs @@ -10,7 +10,7 @@ namespace ErsatzTV.Scanner.Core.Metadata; public class LocalSubtitlesProvider : ILocalSubtitlesProvider { - private readonly List _languageCodes = new(); + private readonly List _languageCodes = []; private readonly ILocalFileSystem _localFileSystem; private readonly ILogger _logger; private readonly IMediaItemRepository _mediaItemRepository;