public async Task DoesNotFetchLeavesForDeleteEntries()
            {
                var items = new[]
                {
                    new CatalogCommitItem(
                        uri: new Uri("https://example/0"),
                        commitId: null,
                        commitTimeStamp: new DateTime(2018, 1, 1),
                        types: null,
                        typeUris: new List <Uri> {
                        Schema.DataTypes.PackageDetails
                    },
                        packageIdentity: new PackageIdentity("NuGet.Versioning", NuGetVersion.Parse("1.0.0"))),
                    new CatalogCommitItem(
                        uri: new Uri("https://example/1"),
                        commitId: null,
                        commitTimeStamp: new DateTime(2018, 1, 2),
                        types: null,
                        typeUris: new List <Uri> {
                        Schema.DataTypes.PackageDelete
                    },
                        packageIdentity: new PackageIdentity("NuGet.Frameworks", NuGetVersion.Parse("2.0.0"))),
                };

                await Target.OnProcessBatchAsync(items);

                CatalogClient.Verify(x => x.GetPackageDetailsLeafAsync("https://example/0"), Times.Once);
                CatalogClient.Verify(x => x.GetPackageDetailsLeafAsync(It.IsAny <string>()), Times.Exactly(1));
                CatalogClient.Verify(x => x.GetPackageDeleteLeafAsync(It.IsAny <string>()), Times.Never);

                RegistrationUpdater.Verify(
                    x => x.UpdateAsync(
                        "NuGet.Versioning",
                        It.Is <IReadOnlyList <CatalogCommitItem> >(
                            y => y.Count == 1),
                        It.Is <IReadOnlyDictionary <CatalogCommitItem, PackageDetailsCatalogLeaf> >(
                            y => y.Count == 1)),
                    Times.Once);
                RegistrationUpdater.Verify(
                    x => x.UpdateAsync(
                        "NuGet.Frameworks",
                        It.Is <IReadOnlyList <CatalogCommitItem> >(
                            y => y.Count == 1),
                        It.Is <IReadOnlyDictionary <CatalogCommitItem, PackageDetailsCatalogLeaf> >(
                            y => y.Count == 0)),
                    Times.Once);
            }
            public async Task RejectsMultipleLeavesForTheSamePackageAtTheSameTime()
            {
                var items = new[]
                {
                    new CatalogCommitItem(
                        uri: new Uri("https://example/0"),
                        commitId: null,
                        commitTimeStamp: new DateTime(2018, 1, 1),
                        types: null,
                        typeUris: new List <Uri> {
                        Schema.DataTypes.PackageDetails
                    },
                        packageIdentity: new PackageIdentity("NuGet.Versioning", NuGetVersion.Parse("1.0.0"))),
                    new CatalogCommitItem(
                        uri: new Uri("https://example/1"),
                        commitId: null,
                        commitTimeStamp: new DateTime(2018, 1, 1),
                        types: null,
                        typeUris: new List <Uri> {
                        Schema.DataTypes.PackageDetails
                    },
                        packageIdentity: new PackageIdentity("NuGet.Versioning", NuGetVersion.Parse("1.0.0"))),
                };

                var ex = await Assert.ThrowsAsync <InvalidOperationException>(
                    () => Target.OnProcessBatchAsync(items));

                Assert.Equal(
                    "There are multiple catalog leaves for a single package at one time.",
                    ex.Message);
                RegistrationUpdater.Verify(
                    x => x.UpdateAsync(
                        It.IsAny <string>(),
                        It.IsAny <IReadOnlyList <CatalogCommitItem> >(),
                        It.IsAny <IReadOnlyDictionary <CatalogCommitItem, PackageDetailsCatalogLeaf> >()),
                    Times.Never);
            }