public async Task MergeEntries_LeavesNoDuplicateVersions()
        {
            var testData = TestUtility.LoadTestResponse("NuGet.Core.json");
            var package1 = testData[0];
            var package2 = testData[1];

            var splicer = new PackageSearchMetadataSplicer();

            var mergedPackage = splicer.MergeEntries(package1, package2);

            var vm = (await mergedPackage.GetVersionsAsync()).Select(v => v.Version);

            Assert.Equal(vm, vm.Distinct());
        }
        public void MergeEntries_WithDifferentPackageIds_Throws()
        {
            var packageA = PackageSearchMetadataBuilder
                           .FromIdentity(new PackageIdentity("packageA", new Versioning.NuGetVersion("1.0.0")))
                           .Build();
            var packageB = PackageSearchMetadataBuilder
                           .FromIdentity(new PackageIdentity("packageB", new Versioning.NuGetVersion("1.0.0")))
                           .Build();

            var splicer = new PackageSearchMetadataSplicer();

            var error = Assert.Throws <InvalidOperationException>(() => splicer.MergeEntries(packageA, packageB));

            Assert.Equal($"Cannot merge packages 'packageA.1.0.0' and 'packageB.1.0.0' because their ids are different.", error.Message);
        }
        public void MergeEntries_PicksTheLatest()
        {
            var older = new PackageIdentity("packageA", new Versioning.NuGetVersion("1.0.0"));
            var newer = new PackageIdentity("packageA", new Versioning.NuGetVersion("1.0.2"));

            var packageA = PackageSearchMetadataBuilder
                           .FromIdentity(older)
                           .Build();
            var packageB = PackageSearchMetadataBuilder
                           .FromIdentity(newer)
                           .Build();

            var splicer = new PackageSearchMetadataSplicer();

            var result = splicer.MergeEntries(packageA, packageB);

            Assert.NotNull(result);
            Assert.Equal(newer, result.Identity);
        }
        public async Task MergeEntries_MergesVersions()
        {
            var testData = TestUtility.LoadTestResponse("NuGet.Core.json");

            var package1 = testData[0];
            var v1       = await GetPackageVersionsAsync(package1);

            Assert.NotEmpty(v1);

            var package2 = testData[1];
            var v2       = await GetPackageVersionsAsync(package2);

            Assert.NotEmpty(v2);

            var splicer = new PackageSearchMetadataSplicer();

            var mergedPackage = splicer.MergeEntries(package1, package2);

            var vm = await GetPackageVersionsAsync(mergedPackage);

            Assert.Superset(v1, vm);
            Assert.Superset(v2, vm);
        }