예제 #1
0
        private static IReadOnlyList <HijackIndexChange> UpsertToHijackIndex(Context ctx)
        {
            var changes = new List <HijackIndexChange>();

            // Update the metadata for the upserted version.
            changes.Add(HijackIndexChange.UpdateMetadata(ctx.ChangedVersion));

            // If the new latest is not the version that we are processing right now, explicitly set the current version
            // to not be the latest. This supports the reflow scenario.
            if (ctx.NewLatest != ctx.ChangedVersion)
            {
                changes.Add(HijackIndexChange.SetLatestToFalse(ctx.ChangedVersion));
            }

            // If the latest version has changed and the old latest version existed, mark that old latest version as
            // no longer latest.
            if (ctx.OldLatest != null &&
                ctx.OldLatest != ctx.NewLatest &&
                ctx.OldLatest != ctx.ChangedVersion)
            {
                changes.Add(HijackIndexChange.SetLatestToFalse(ctx.OldLatest));
            }

            // Always mark the new latest version as latest, even if it has not changed. This supports the reflow
            // scenario.
            if (ctx.NewLatest != null)
            {
                changes.Add(HijackIndexChange.SetLatestToTrue(ctx.NewLatest));
            }

            return(changes);
        }
            public void ReplacesNonLatestFullVersionByNormalizedVersion()
            {
                ClearList();
                var latest = new FilteredVersionProperties("2.0.0", listed: true);

                _list.Upsert(latest);
                _list.Upsert(new FilteredVersionProperties("1.02.0-Alpha.1+git", listed: true));
                var properties = new FilteredVersionProperties("1.2.0.0-ALPHA.1+somethingelse", listed: true);

                var output = _list.Upsert(properties);

                Assert.Equal(SearchIndexChangeType.UpdateVersionList, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.UpdateMetadata(properties.ParsedVersion),
                    HijackIndexChange.SetLatestToFalse(properties.ParsedVersion),
                    HijackIndexChange.SetLatestToTrue(latest.ParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Equal(latest.FullVersion, _list.GetLatestVersionInfo().FullVersion);
                Assert.Equal(latest.ParsedVersion, _list._latestOrNull);
                Assert.Equal(new[] { properties.FullVersion, latest.FullVersion }, _list.GetLatestVersionInfo().ListedFullVersions);
                Assert.Equal(
                    new[] { properties.ParsedVersion, latest.ParsedVersion },
                    _list._versions.Keys.ToArray());
            }
예제 #3
0
            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);
            }
            public void DeletesVeryLastVersionWhenLastVersionIsUnlisted()
            {
                var output = _list.Delete(InitialParsedVersion);

                Assert.Equal(SearchIndexChangeType.Delete, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.Delete(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Null(_list.GetLatestVersionInfo());
                Assert.Null(_list._latestOrNull);
                Assert.Empty(_list._versions);
            }
            public void UnlistingLatestAndNoOtherVersions()
            {
                var output = _list.Upsert(_unlistedVersionProperties);

                Assert.Equal(SearchIndexChangeType.Delete, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.UpdateMetadata(InitialParsedVersion),
                    HijackIndexChange.SetLatestToFalse(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Null(_list.GetLatestVersionInfo());
                Assert.Null(_list._latestOrNull);
                Assert.Equal(new[] { InitialParsedVersion }, _list._versions.Keys.ToArray());
            }
예제 #6
0
        private static IReadOnlyList <HijackIndexChange> DeleteFromHijackIndex(Context ctx)
        {
            var changes = new List <HijackIndexChange>();

            // Delete the document for the deleted version.
            changes.Add(HijackIndexChange.Delete(ctx.ChangedVersion));

            // Update the latest status of the latest version, if there is one.
            if (ctx.NewLatest != null)
            {
                Guard.Assert(ctx.ChangedVersion != ctx.NewLatest, "The deleted version should not be the new latest version.");
                changes.Add(HijackIndexChange.SetLatestToTrue(ctx.NewLatest));
            }

            return(changes);
        }
            public void DeletesFromEmptyList()
            {
                ClearList();

                var output = _list.Delete(InitialParsedVersion);

                Assert.Equal(SearchIndexChangeType.Delete, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.Delete(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Null(_list.GetLatestVersionInfo());
                Assert.Null(_list._latestOrNull);
                Assert.Empty(_list._versions.Keys);
            }
            public void RelistingLatestVersion()
            {
                var output = _list.Upsert(_initialVersionProperties);

                Assert.Equal(SearchIndexChangeType.UpdateLatest, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.UpdateMetadata(InitialParsedVersion),
                    HijackIndexChange.SetLatestToTrue(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Equal(InitialFullVersion, _list.GetLatestVersionInfo().FullVersion);
                Assert.Equal(InitialParsedVersion, _list._latestOrNull);
                Assert.Equal(new[] { InitialFullVersion }, _list.GetLatestVersionInfo().ListedFullVersions);
                Assert.Equal(new[] { InitialParsedVersion }, _list._versions.Keys.ToArray());
            }
            public void RemovesVeryLastVersionWhenLastVersionIsListed()
            {
                StartWithUnlisted();

                var output = _list.Remove(InitialParsedVersion);

                Assert.Equal(SearchIndexChangeType.Delete, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.UpdateMetadata(InitialParsedVersion),
                    HijackIndexChange.SetLatestToFalse(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Null(_list.GetLatestVersionInfo());
                Assert.Null(_list._latestOrNull);
                Assert.Empty(_list._versions);
            }
예제 #10
0
            public void DeletesByNormalizedVersion()
            {
                ClearList();
                _list.Upsert(new FilteredVersionProperties("1.02.0-Alpha.1+git", listed: true));
                var deletedVersion = NuGetVersion.Parse("1.02.0-Alpha.1+git");

                var output = _list.Delete(deletedVersion);

                Assert.Equal(SearchIndexChangeType.Delete, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.Delete(deletedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Null(_list.GetLatestVersionInfo());
                Assert.Null(_list._latestOrNull);
                Assert.Empty(_list._versions.Keys);
            }
예제 #11
0
            public void DeletesLastListedVersion(string version)
            {
                var unlisted = new FilteredVersionProperties(version, listed: false);

                _list.Upsert(unlisted);

                var output = _list.Delete(InitialParsedVersion);

                Assert.Equal(SearchIndexChangeType.Delete, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.Delete(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Null(_list.GetLatestVersionInfo());
                Assert.Null(_list._latestOrNull);
                Assert.Equal(new[] { unlisted.ParsedVersion }, _list._versions.Keys.ToArray());
            }
예제 #12
0
            public void DeletesNewVersion(string version)
            {
                var parsedVersion = NuGetVersion.Parse(version);

                var output = _list.Delete(parsedVersion);

                Assert.Equal(SearchIndexChangeType.UpdateVersionList, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.Delete(parsedVersion),
                    HijackIndexChange.SetLatestToTrue(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Equal(InitialFullVersion, _list.GetLatestVersionInfo().FullVersion);
                Assert.Equal(InitialParsedVersion, _list._latestOrNull);
                Assert.Equal(new[] { InitialFullVersion }, _list.GetLatestVersionInfo().ListedFullVersions);
                Assert.Equal(new[] { InitialParsedVersion }, _list._versions.Keys.ToArray());
            }
예제 #13
0
            public void DeletesLatestListedVersionWithTwoOtherVersions()
            {
                _list.Upsert(new FilteredVersionProperties(PreviousFullVersion, listed: true));
                _list.Upsert(new FilteredVersionProperties(NextFullVersion, listed: true));

                var output = _list.Delete(NextParsedVersion);

                Assert.Equal(SearchIndexChangeType.DowngradeLatest, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.Delete(NextParsedVersion),
                    HijackIndexChange.SetLatestToTrue(InitialParsedVersion),
                },
                    Enumerable.ToArray(output.Hijack));
                Assert.Equal(InitialFullVersion, _list.GetLatestVersionInfo().FullVersion);
                Assert.Equal(InitialParsedVersion, _list._latestOrNull);
                Assert.Equal(new[] { PreviousFullVersion, InitialFullVersion }, _list.GetLatestVersionInfo().ListedFullVersions);
                Assert.Equal(new[] { PreviousParsedVersion, InitialParsedVersion }, _list._versions.Keys.ToArray());
            }
예제 #14
0
            public void AddingListedNonLatestVersion()
            {
                var listed = new FilteredVersionProperties(PreviousFullVersion, listed: true);

                var output = _list.Upsert(listed);

                Assert.Equal(SearchIndexChangeType.UpdateVersionList, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.UpdateMetadata(listed.ParsedVersion),
                    HijackIndexChange.SetLatestToFalse(listed.ParsedVersion),
                    HijackIndexChange.SetLatestToTrue(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Equal(InitialFullVersion, _list.GetLatestVersionInfo().FullVersion);
                Assert.Equal(InitialParsedVersion, _list._latestOrNull);
                Assert.Equal(new[] { PreviousFullVersion, InitialFullVersion }, _list.GetLatestVersionInfo().ListedFullVersions);
                Assert.Equal(new[] { listed.ParsedVersion, InitialParsedVersion }, _list._versions.Keys.ToArray());
            }
예제 #15
0
            public void DeletesNonLatestListedVersionWithOneOtherVersion()
            {
                var nonLatest = new FilteredVersionProperties(PreviousFullVersion, listed: true);

                _list.Upsert(nonLatest);

                var output = _list.Delete(nonLatest.ParsedVersion);

                Assert.Equal(SearchIndexChangeType.UpdateVersionList, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.Delete(nonLatest.ParsedVersion),
                    HijackIndexChange.SetLatestToTrue(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Equal(InitialFullVersion, _list.GetLatestVersionInfo().FullVersion);
                Assert.Equal(InitialParsedVersion, _list._latestOrNull);
                Assert.Equal(new[] { InitialFullVersion }, _list.GetLatestVersionInfo().ListedFullVersions);
                Assert.Equal(new[] { InitialParsedVersion }, _list._versions.Keys.ToArray());
            }
예제 #16
0
            public void DeletesLatestVersion()
            {
                var latest = new FilteredVersionProperties(NextFullVersion, listed: true);

                _list.Upsert(latest);

                var output = _list.Delete(latest.ParsedVersion);

                Assert.Equal(SearchIndexChangeType.DowngradeLatest, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.Delete(latest.ParsedVersion),
                    HijackIndexChange.SetLatestToTrue(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Equal(InitialFullVersion, _list.GetLatestVersionInfo().FullVersion);
                Assert.Equal(InitialParsedVersion, _list._latestOrNull);
                Assert.Equal(new[] { InitialFullVersion }, _list.GetLatestVersionInfo().ListedFullVersions);
                Assert.Equal(new[] { InitialParsedVersion }, _list._versions.Keys.ToArray());
            }
예제 #17
0
            public void RemovesNonLatestListedVersionWithTwoOtherVersions()
            {
                _list.Upsert(new FilteredVersionProperties(PreviousFullVersion, listed: true));
                _list.Upsert(new FilteredVersionProperties(NextFullVersion, listed: true));

                var output = _list.Remove(InitialParsedVersion);

                Assert.Equal(SearchIndexChangeType.UpdateVersionList, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.UpdateMetadata(InitialParsedVersion),
                    HijackIndexChange.SetLatestToFalse(InitialParsedVersion),
                    HijackIndexChange.SetLatestToTrue(NextParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Equal(NextFullVersion, _list.GetLatestVersionInfo().FullVersion);
                Assert.Equal(NextParsedVersion, _list._latestOrNull);
                Assert.Equal(new[] { PreviousFullVersion, NextFullVersion }, _list.GetLatestVersionInfo().ListedFullVersions);
                Assert.Equal(new[] { PreviousParsedVersion, NextParsedVersion }, _list._versions.Keys.ToArray());
            }
예제 #18
0
            public void AddingFirstListedVersion(string version)
            {
                StartWithUnlisted();
                var listed = new FilteredVersionProperties(version, listed: true);

                var output = _list.Upsert(listed);

                Assert.Equal(SearchIndexChangeType.AddFirst, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.UpdateMetadata(listed.ParsedVersion),
                    HijackIndexChange.SetLatestToTrue(listed.ParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Equal(listed.FullVersion, _list.GetLatestVersionInfo().FullVersion);
                Assert.Equal(listed.ParsedVersion, _list._latestOrNull);
                Assert.Equal(new[] { listed.FullVersion }, _list.GetLatestVersionInfo().ListedFullVersions);
                Assert.Equal(
                    new[] { InitialParsedVersion, listed.ParsedVersion }.OrderBy(x => x).ToArray(),
                    _list._versions.Keys.ToArray());
            }
예제 #19
0
            public void AddingUnlistedVersion(string version)
            {
                var unlisted = new FilteredVersionProperties(version, listed: false);

                var output = _list.Upsert(unlisted);

                Assert.Equal(SearchIndexChangeType.UpdateVersionList, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.UpdateMetadata(unlisted.ParsedVersion),
                    HijackIndexChange.SetLatestToFalse(unlisted.ParsedVersion),
                    HijackIndexChange.SetLatestToTrue(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Equal(InitialFullVersion, _list.GetLatestVersionInfo().FullVersion);
                Assert.Equal(InitialParsedVersion, _list._latestOrNull);
                Assert.Equal(new[] { InitialFullVersion }, _list.GetLatestVersionInfo().ListedFullVersions);
                Assert.Equal(
                    new[] { unlisted.ParsedVersion, InitialParsedVersion }.OrderBy(x => x).ToArray(),
                    _list._versions.Keys.ToArray());
            }
예제 #20
0
            public void UnlistingLatestWithOtherUnlistedVersions(string version)
            {
                var unlisted = new FilteredVersionProperties(version, listed: false);

                _list.Upsert(unlisted);

                var output = _list.Upsert(_unlistedVersionProperties);

                Assert.Equal(SearchIndexChangeType.Delete, output.Search);
                Assert.Equal(
                    new[]
                {
                    HijackIndexChange.UpdateMetadata(InitialParsedVersion),
                    HijackIndexChange.SetLatestToFalse(InitialParsedVersion),
                },
                    output.Hijack.ToArray());
                Assert.Null(_list.GetLatestVersionInfo());
                Assert.Null(_list._latestOrNull);
                Assert.Equal(
                    new[] { InitialParsedVersion, unlisted.ParsedVersion }.OrderBy(x => x).ToArray(),
                    _list._versions.Keys.ToArray());
            }