public async Task UpdatesBlobStorageAfterIndexing()
            {
                var actions = new List <string>();

                Pusher
                .Setup(x => x.TryFinishAsync())
                .ReturnsAsync(new BatchPusherResult())
                .Callback(() => actions.Add(nameof(IBatchPusher.TryFinishAsync)));
                OwnerDataClient
                .Setup(x => x.UploadChangeHistoryAsync(It.IsAny <IReadOnlyList <string> >()))
                .Returns(Task.CompletedTask)
                .Callback(() => actions.Add(nameof(IOwnerDataClient.UploadChangeHistoryAsync)));
                OwnerDataClient
                .Setup(x => x.ReplaceLatestIndexedAsync(It.IsAny <SortedDictionary <string, SortedSet <string> > >(), It.IsAny <IAccessCondition>()))
                .Returns(Task.CompletedTask)
                .Callback(() => actions.Add(nameof(IOwnerDataClient.ReplaceLatestIndexedAsync)));

                Changes["NuGet.Core"] = new string[0];

                await Target.ExecuteAsync();

                Assert.Equal(
                    new[] { nameof(IBatchPusher.TryFinishAsync), nameof(IOwnerDataClient.UploadChangeHistoryAsync), nameof(IOwnerDataClient.ReplaceLatestIndexedAsync) },
                    actions.ToArray());
            }
            public async Task DoesNotPushWhenThereAreNoChanges()
            {
                await Target.ExecuteAsync();

                Pusher.Verify(
                    x => x.EnqueueIndexActions(It.IsAny <string>(), It.IsAny <IndexActions>()),
                    Times.Never);
                Pusher.Verify(x => x.TryPushFullBatchesAsync(), Times.Never);
                Pusher.Verify(x => x.TryFinishAsync(), Times.Never);
                OwnerDataClient.Verify(x => x.UploadChangeHistoryAsync(It.IsAny <IReadOnlyList <string> >()), Times.Never);
                OwnerDataClient.Verify(
                    x => x.ReplaceLatestIndexedAsync(
                        It.IsAny <SortedDictionary <string, SortedSet <string> > >(),
                        It.IsAny <IAccessCondition>()),
                    Times.Never);
            }
            public async Task UpdatesBlobStorage()
            {
                IReadOnlyList <string> changeHistory = null;

                OwnerDataClient
                .Setup(x => x.UploadChangeHistoryAsync(It.IsAny <IReadOnlyList <string> >()))
                .Returns(Task.CompletedTask)
                .Callback <IReadOnlyList <string> >(x => changeHistory = x);

                Changes["NuGet.Versioning"] = new string[0];
                Changes["NuGet.Core"]       = new string[0];

                await Target.ExecuteAsync();

                Assert.Equal(new[] { "NuGet.Core", "NuGet.Versioning" }, changeHistory.ToArray());
                OwnerDataClient.Verify(
                    x => x.ReplaceLatestIndexedAsync(DatabaseResult, StorageResult.AccessCondition),
                    Times.Once);
            }