using Microsoft.Extensions.Options; using Wiki.Adapters.FileIndex; using Wiki.Core.Ports; namespace Wiki.Contracts.FileIndex; public sealed class FileDocumentCatalogContractTests : DocumentCatalogContract, IDisposable { private readonly List _directories = []; private readonly Dictionary _directoryOf = new(ReferenceEqualityComparer.Instance); protected override Task CreateCatalogAsync() { var directory = NewDirectory(); IDocumentCatalog catalog = new Wiki.Adapters.FileIndex.FileDocumentCatalog(Options.Create(new FileIndexOptions { Directory = directory })); _directoryOf[catalog] = directory; return Task.FromResult(catalog); } protected override Task ReopenAsync(IDocumentCatalog catalog) { var directory = _directoryOf[catalog]; IDocumentCatalog reopened = new Wiki.Adapters.FileIndex.FileDocumentCatalog(Options.Create(new FileIndexOptions { Directory = directory })); _directoryOf[reopened] = directory; return Task.FromResult(reopened); } private string NewDirectory() { var directory = Path.Combine(Path.GetTempPath(), "wiki-tests", Guid.NewGuid().ToString("N")); Directory.CreateDirectory(directory); _directories.Add(directory); return directory; } public void Dispose() { foreach (var directory in _directories) { try { Directory.Delete(directory, recursive: true); } catch (IOException) { } catch (UnauthorizedAccessException) { } } } }