public void MapsProperties() { var v1 = NuGetVersion.Parse("1.0.0"); var changes = MutableIndexChanges.FromLatestIndexChanges(new Dictionary <SearchFilters, LatestIndexChanges> { { SearchFilters.Default, new LatestIndexChanges( SearchIndexChangeType.AddFirst, new List <HijackIndexChange> { HijackIndexChange.UpdateMetadata(v1), HijackIndexChange.SetLatestToTrue(v1), }) }, }); var solid = changes.Solidify(); Assert.Equal(new[] { SearchFilters.Default }, solid.Search.Keys.ToArray()); Assert.Equal(SearchIndexChangeType.AddFirst, solid.Search[SearchFilters.Default]); Assert.False(solid.Hijack[v1].Delete); Assert.True(solid.Hijack[v1].UpdateMetadata); Assert.True(solid.Hijack[v1].LatestStableSemVer1); Assert.False(solid.Hijack[v1].LatestSemVer1); Assert.False(solid.Hijack[v1].LatestStableSemVer2); Assert.False(solid.Hijack[v1].LatestSemVer2); }
private MutableIndexChanges Upsert( string fullVersion, NuGetVersion parsedVersion, VersionPropertiesData data) { var added = new VersionProperties(fullVersion, parsedVersion, data); _versionProperties[added.ParsedVersion] = KeyValuePair.Create(added.FullVersion, data); // Detect changes related to the latest versions, per search filter. var output = new Dictionary <SearchFilters, LatestIndexChanges>(); foreach (var pair in _versionLists) { var searchFilter = pair.Key; var listState = pair.Value; var predicate = SearchFilterPredicates[searchFilter]; LatestIndexChanges latestIndexChanges; if (predicate(added)) { latestIndexChanges = listState.Upsert(added.Filtered); } else { latestIndexChanges = listState.Remove(added.ParsedVersion); } output[searchFilter] = latestIndexChanges; } return(MutableIndexChanges.FromLatestIndexChanges(output)); }
internal MutableIndexChanges Delete(NuGetVersion parsedVersion) { _versionProperties.Remove(parsedVersion); // Detect changes related to the latest versions, per search filter. var output = new Dictionary <SearchFilters, LatestIndexChanges>(); foreach (var pair in _versionLists) { var searchFilter = pair.Key; var listState = pair.Value; // We can execute this on all lists, no matter the search filter predicate because removing a version // that was never added will result in recalculating the version list, which supports the reflow // scenario. output[searchFilter] = listState.Delete(parsedVersion); } return(MutableIndexChanges.FromLatestIndexChanges(output)); }