public async Task Delete() { await FileStreamer.Delete(Filename); MockFile.Verify(x => x.Delete(Filename), Times.Once); }
public async Task <bool> Unindex <TDataType>(TDataType data) where TDataType : DataEntity { using (_logger.BeginScope("{Operation} is {Action} for {DataType}", nameof(FileIndexWorker), "unindexing", typeof(TDataType).Name)) { var indexProperties = typeof(TDataType) .GetProperties() .Where(x => x.GetCustomAttributes(typeof(IndexAttribute), true).Any()) .ToArray(); if (!indexProperties.Any()) { _logger.LogTrace("There are no properties are indexed"); return(true); } _logger.LogInformation("Starting to unindex"); var unindexSuccess = true; foreach (var indexProperty in indexProperties) { var indexName = indexProperty.Name; _logger.LogTrace("Unindexing {IndexName}", indexName); if (await IndexExist <TDataType>(indexName)) { _logger.LogTrace("Index exists"); var indexFileName = GetFileName <TDataType>(indexName); using (_logger.BeginScope("The index file {filename} will be used", indexFileName)) { var index = await FileStreamer.ReadDataFromStream <Index <object> >(indexFileName); _logger.LogTrace("Loaded index data"); if (index.Keys is null) { _logger.LogWarning("There are no keys in the index"); continue; } var keys = index.Keys .Where(x => x.Ids.Any(y => y == data.Id)) .ToArray(); if (!keys.Any()) { _logger.LogInformation("There where no keys with the data's Id indexes against it."); continue; } foreach (var key in keys) { key.Ids.Remove(data.Id); _logger.LogTrace("Removed id from index key"); if (!key.Ids.Any()) { index.Keys.Remove(key); _logger.LogTrace("No more ids against the key removed the key from the index"); } } if (index.Keys.Any()) { _logger.LogTrace("The index still has some keys"); if (await FileStreamer.WriteDataToStream(indexFileName, index)) { _logger.LogTrace("Successfully wrote index to the index file"); if (!await FileStreamer.CloseStream(indexFileName)) { _logger.LogWarning("Failed to save the index to disk"); unindexSuccess = false; } else { _logger.LogInformation("Index updated"); } } else { _logger.LogWarning("Failed to write data to the file"); unindexSuccess = false; } } else { _logger.LogTrace("No more keys in the index"); if (!await FileStreamer.Delete(indexFileName)) { _logger.LogWarning("Failed to remove index file"); unindexSuccess = false; } else { _logger.LogInformation("Removed index file"); } } } } else { _logger.LogTrace("Index doesn't exist"); } } if (unindexSuccess) { _logger.LogInformation("Unindex data successfully"); } else { _logger.LogWarning("Failed to unindex data"); } return(unindexSuccess); } }