using Microsoft.Extensions.Options; using Wiki.Adapters.FileIndex; using Wiki.Core.Ports; namespace Wiki.Contracts.FileIndex; public sealed class FileVectorIndexContractTests : VectorIndexContract, IDisposable { private readonly List _directories = []; private readonly Dictionary _directoryOf = new(ReferenceEqualityComparer.Instance); protected override Task CreateIndexAsync() { var directory = NewDirectory(); IVectorIndex index = new Wiki.Adapters.FileIndex.FileVectorIndex(Options.Create(new FileIndexOptions { Directory = directory })); _directoryOf[index] = directory; return Task.FromResult(index); } protected override Task ReopenAsync(IVectorIndex index) { var directory = _directoryOf[index]; IVectorIndex reopened = new Wiki.Adapters.FileIndex.FileVectorIndex(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) { } } } }