public async Task DownloadAndIndex_DeletesTempFile()
            {
                var package = new FakeDataServicePackage(new Uri("http://example.com/packages/Foo/1.0"));

                fileSystem.Setup(fs => fs.GetFullPath(It.IsAny <string>())).Returns <string>(n => Path.Combine(Environment.CurrentDirectory, n));

                await repository.AddPackageAsync(package, CancellationToken.None);

                fileSystem.Verify(fs => fs.DeleteFile(It.IsRegex(@"\.tmp[\\/].+\.nupkg.tmp")));
            }
            public async Task DownloadAndIndex()
            {
                var package = new FakeDataServicePackage(new Uri("http://example.com/packages/Foo/1.0"));

                fileSystem.Setup(fs => fs.GetFullPath(It.IsAny <string>())).Returns <string>(n => Path.Combine(Environment.CurrentDirectory, n));

                await repository.AddPackageAsync(package, CancellationToken.None);

                indexer.Verify(i => i.AddPackageAsync(It.IsAny <LucenePackage>(), It.IsAny <CancellationToken>()), Times.Once);
            }
            public async Task CancelDuringGetDownloadStream()
            {
                var package = new FakeDataServicePackage(new Uri("http://example.com/packages/Foo/1.0"));

                packagePathResolver.Setup(r => r.GetInstallPath(package)).Returns("Foo");
                packagePathResolver.Setup(r => r.GetPackageFileName(package)).Returns("Foo.1.0.nupkg");
                var insideHandlerSignal      = new ManualResetEventSlim(initialState: false);
                var proceedFromHandlerSignal = new ManualResetEventSlim(initialState: false);
                var exception = new TaskCanceledException("Fake");

                repository.MessageHandler = new FakeHttpMessageHandler((req, token) =>
                {
                    insideHandlerSignal.Set();
                    Assert.True(proceedFromHandlerSignal.Wait(TimeSpan.FromMilliseconds(500)), "Timeout waiting for proceedFromHandlerSignal");
                    if (token.IsCancellationRequested)
                    {
                        throw exception;
                    }
                });

                var cts = new CancellationTokenSource();

                var cancelTask = Task.Run(() =>
                {
                    Assert.True(insideHandlerSignal.Wait(TimeSpan.FromMilliseconds(500)), "Timeout waiting for MessageHandler.SendAsync");
                    cts.Cancel();
                    proceedFromHandlerSignal.Set();
                });

                try
                {
                    await repository.AddPackageAsync(package, cts.Token);

                    await cancelTask;
                    Assert.Fail("Expected TaskCanceledException");
                }
                catch (TaskCanceledException ex)
                {
                    Assert.That(ex, Is.SameAs(exception), "Expected spcific instance of TaskCanceledException");
                }
            }
            public async Task CancelDuringGetDownloadStream()
            {
                var package = new FakeDataServicePackage(new Uri("http://example.com/packages/Foo/1.0"));
                packagePathResolver.Setup(r => r.GetInstallPath(package)).Returns("Foo");
                packagePathResolver.Setup(r => r.GetPackageFileName(package)).Returns("Foo.1.0.nupkg");
                var insideHandlerSignal = new ManualResetEventSlim(initialState: false);
                var proceedFromHandlerSignal = new ManualResetEventSlim(initialState: false);
                var exception = new TaskCanceledException("Fake");
                repository.MessageHandler = new FakeHttpMessageHandler((req, token) =>
                {
                    insideHandlerSignal.Set();
                    Assert.True(proceedFromHandlerSignal.Wait(TimeSpan.FromMilliseconds(500)), "Timeout waiting for proceedFromHandlerSignal");
                    if (token.IsCancellationRequested)
                    {
                        throw exception;
                    }
                });

                var cts = new CancellationTokenSource();

                var cancelTask = Task.Run(() =>
                {
                    Assert.True(insideHandlerSignal.Wait(TimeSpan.FromMilliseconds(500)), "Timeout waiting for MessageHandler.SendAsync");
                    cts.Cancel();
                    proceedFromHandlerSignal.Set();
                });

                try
                {
                    await repository.AddPackageAsync(package, cts.Token);
                    await cancelTask;
                    Assert.Fail("Expected TaskCanceledException");
                }
                catch (TaskCanceledException ex)
                {
                    Assert.That(ex, Is.SameAs(exception), "Expected spcific instance of TaskCanceledException");
                }
            }
            public async Task DownloadAndIndex_DeletesTempFile()
            {
                var package = new FakeDataServicePackage(new Uri("http://example.com/packages/Foo/1.0"));
                fileSystem.Setup(fs => fs.GetFullPath(It.IsAny<string>())).Returns<string>(n => Path.Combine(Environment.CurrentDirectory, n));

                await repository.AddPackageAsync(package, CancellationToken.None);

                fileSystem.Verify(fs => fs.DeleteFile(It.IsRegex(@"\.tmp[\\/].+\.nupkg.tmp")));
            }
            public async Task DownloadAndIndex()
            {
                var package = new FakeDataServicePackage(new Uri("http://example.com/packages/Foo/1.0"));
                fileSystem.Setup(fs => fs.GetFullPath(It.IsAny<string>())).Returns<string>(n => Path.Combine(Environment.CurrentDirectory, n));

                await repository.AddPackageAsync(package, CancellationToken.None);

                indexer.Verify(i => i.AddPackageAsync(It.IsAny<LucenePackage>(), It.IsAny<CancellationToken>()), Times.Once);
            }