public void FindPackageCallsFindPackageFromActiveSource()
        {
            // Arrange
            var mockRepositoryFactory = new Mock <IPackageRepositoryFactory>();
            var mockSourceProvider    = new Mock <IVsPackageSourceProvider>();

            var mockRepository = new Mock <IPackageRepository>(MockBehavior.Strict);
            var source         = new PackageSource("bar", "foo");

            mockRepository.As <IPackageLookup>()
            .Setup(p => p.FindPackage("A", new SemanticVersion("1.0")))
            .Returns(PackageUtility.CreatePackage("A", "1.0"))
            .Verifiable();

            mockSourceProvider.Setup(m => m.ActivePackageSource).Returns(source);
            mockRepositoryFactory.Setup(m => m.CreateRepository(source.Source)).Returns(mockRepository.Object);
            var repository = new VsPackageSourceRepository(mockRepositoryFactory.Object, mockSourceProvider.Object);

            // Act
            IPackage package = repository.FindPackage("A", new SemanticVersion("1.0"));

            // Assert
            mockRepository.VerifyAll();
            Assert.Equal("A", package.Id);
            Assert.Equal(new SemanticVersion("1.0"), package.Version);
        }
        public void NullActivePackageSourceThrowsForAddPackageAndRemovePackage()
        {
            // Arrange
            var mockRepositoryFactory = new Mock<IPackageRepositoryFactory>();
            var mockSourceProvider = new Mock<IVsPackageSourceProvider>();
            mockSourceProvider.Setup(m => m.ActivePackageSource).Returns((PackageSource)null);
            mockRepositoryFactory.Setup(m => m.CreateRepository(It.IsAny<string>())).Returns(new MockPackageRepository());
            var repository = new VsPackageSourceRepository(mockRepositoryFactory.Object, mockSourceProvider.Object);

            // Act & Assert
            ExceptionAssert.Throws<InvalidOperationException>(() => repository.AddPackage(null), "Unable to retrieve package list because no source was specified.");
            ExceptionAssert.Throws<InvalidOperationException>(() => repository.RemovePackage(null), "Unable to retrieve package list because no source was specified.");
        }
        public void NullActivePackageSourceThrowsForAddPackageAndRemovePackage()
        {
            // Arrange
            var mockRepositoryFactory = new Mock <IPackageRepositoryFactory>();
            var mockSourceProvider    = new Mock <IVsPackageSourceProvider>();

            mockSourceProvider.Setup(m => m.ActivePackageSource).Returns((PackageSource)null);
            mockRepositoryFactory.Setup(m => m.CreateRepository(It.IsAny <string>())).Returns(new MockPackageRepository());
            var repository = new VsPackageSourceRepository(mockRepositoryFactory.Object, mockSourceProvider.Object);

            // Act & Assert
            ExceptionAssert.Throws <InvalidOperationException>(() => repository.AddPackage(null), "Unable to retrieve package list because no source was specified.");
            ExceptionAssert.Throws <InvalidOperationException>(() => repository.RemovePackage(null), "Unable to retrieve package list because no source was specified.");
        }
        public void NullActivePackageSourceDoesNotThrowForOtherMethods()
        {
            // Arrange
            var mockRepositoryFactory = new Mock<IPackageRepositoryFactory>();
            var mockSourceProvider = new Mock<IVsPackageSourceProvider>();
            mockSourceProvider.Setup(m => m.ActivePackageSource).Returns((PackageSource)null);
            mockRepositoryFactory.Setup(m => m.CreateRepository(It.IsAny<string>())).Returns(new MockPackageRepository());
            var repository = new VsPackageSourceRepository(mockRepositoryFactory.Object, mockSourceProvider.Object);

            // Act & Assert
            Assert.NotNull(repository.Clone());
            Assert.Empty(repository.GetPackages());
            Assert.False(repository.SupportsPrereleasePackages);
            Assert.Empty(repository.FindPackagesById("A"));
            Assert.Null(repository.FindPackage("A", new SemanticVersion("1.0")));
            Assert.Empty(repository.Search("web", new string[] { "net40" }, true));
        }
        public void NullActivePackageSourceDoesNotThrowForOtherMethods()
        {
            // Arrange
            var mockRepositoryFactory = new Mock <IPackageRepositoryFactory>();
            var mockSourceProvider    = new Mock <IVsPackageSourceProvider>();

            mockSourceProvider.Setup(m => m.ActivePackageSource).Returns((PackageSource)null);
            mockRepositoryFactory.Setup(m => m.CreateRepository(It.IsAny <string>())).Returns(new MockPackageRepository());
            var repository = new VsPackageSourceRepository(mockRepositoryFactory.Object, mockSourceProvider.Object);

            // Act & Assert
            Assert.NotNull(repository.Clone());
            Assert.Empty(repository.GetPackages());
            Assert.False(repository.SupportsPrereleasePackages);
            Assert.Empty(repository.FindPackagesById("A"));
            Assert.Null(repository.FindPackage("A", new SemanticVersion("1.0")));
            Assert.Empty(repository.Search("web", new string[] { "net40" }, true));
        }
        public void GetPackagesReturnsPackagesFromActiveSource()
        {
            // Arrange
            var mockRepositoryFactory = new Mock<IPackageRepositoryFactory>();
            var mockSourceProvider = new Mock<IVsPackageSourceProvider>();
            var mockRepository = new MockPackageRepository();
            var source = new PackageSource("bar", "foo");
            mockRepository.AddPackage(PackageUtility.CreatePackage("A", "1.0"));
            mockSourceProvider.Setup(m => m.ActivePackageSource).Returns(source);
            mockRepositoryFactory.Setup(m => m.CreateRepository(source.Source)).Returns(mockRepository);
            var repository = new VsPackageSourceRepository(mockRepositoryFactory.Object, mockSourceProvider.Object);

            // Act
            List<IPackage> packages = repository.GetPackages().ToList();

            // Assert
            Assert.Equal(1, packages.Count);
            Assert.Equal("A", packages[0].Id);
            Assert.Equal(new SemanticVersion("1.0"), packages[0].Version);
        }
        public void GetPackagesReturnsPackagesFromActiveSource()
        {
            // Arrange
            var mockRepositoryFactory = new Mock <IPackageRepositoryFactory>();
            var mockSourceProvider    = new Mock <IVsPackageSourceProvider>();
            var mockRepository        = new MockPackageRepository();
            var source = new PackageSource("bar", "foo");

            mockRepository.AddPackage(PackageUtility.CreatePackage("A", "1.0"));
            mockSourceProvider.Setup(m => m.ActivePackageSource).Returns(source);
            mockRepositoryFactory.Setup(m => m.CreateRepository(source.Source)).Returns(mockRepository);
            var repository = new VsPackageSourceRepository(mockRepositoryFactory.Object, mockSourceProvider.Object);

            // Act
            List <IPackage> packages = repository.GetPackages().ToList();

            // Assert
            Assert.Equal(1, packages.Count);
            Assert.Equal("A", packages[0].Id);
            Assert.Equal(new SemanticVersion("1.0"), packages[0].Version);
        }
        // name parameter is to make it easier to identify failing tests when debugging.
        public void MethodsPassCurrentOperationAlong(string name, Action <VsPackageSourceRepository> method)
        {
            // Arrange
            var mockRepositoryFactory = new Mock <IPackageRepositoryFactory>();
            var mockSourceProvider    = new Mock <IVsPackageSourceProvider>();
            var mockRepository        = new Mock <IPackageRepository>();
            var mockOperationAware    = mockRepository.As <IOperationAwareRepository>();
            var source = new PackageSource("bar", "foo");

            mockSourceProvider.Setup(m => m.ActivePackageSource).Returns(source);
            mockRepositoryFactory.Setup(m => m.CreateRepository(source.Source)).Returns(mockRepository.Object);
            mockRepository.SetupGet(r => r.Source).Returns("Bar");
            var repository = new VsPackageSourceRepository(mockRepositoryFactory.Object, mockSourceProvider.Object);

            // Act
            using (repository.StartOperation("Foo"))
            {
                method(repository);
            }

            // Assert
            mockOperationAware.Verify(o => o.StartOperation("Foo"));
        }
        public void FindPackageCallsFindPackageFromActiveSource()
        {
            // Arrange
            var mockRepositoryFactory = new Mock<IPackageRepositoryFactory>();
            var mockSourceProvider = new Mock<IVsPackageSourceProvider>();

            var mockRepository = new Mock<IPackageRepository>(MockBehavior.Strict);
            var source = new PackageSource("bar", "foo");
            mockRepository.As<IPackageLookup>()
                          .Setup(p => p.FindPackage("A", new SemanticVersion("1.0")))
                          .Returns(PackageUtility.CreatePackage("A", "1.0"))
                          .Verifiable();

            mockSourceProvider.Setup(m => m.ActivePackageSource).Returns(source);
            mockRepositoryFactory.Setup(m => m.CreateRepository(source.Source)).Returns(mockRepository.Object);
            var repository = new VsPackageSourceRepository(mockRepositoryFactory.Object, mockSourceProvider.Object);

            // Act
            IPackage package = repository.FindPackage("A", new SemanticVersion("1.0"));

            // Assert
            mockRepository.VerifyAll();
            Assert.Equal("A", package.Id);
            Assert.Equal(new SemanticVersion("1.0"), package.Version);
        }
        // name parameter is to make it easier to identify failing tests when debugging.
        public void MethodsPassCurrentOperationAlong(string name, Action<VsPackageSourceRepository> method)
        {
            // Arrange
            var mockRepositoryFactory = new Mock<IPackageRepositoryFactory>();
            var mockSourceProvider = new Mock<IVsPackageSourceProvider>();
            var mockRepository = new Mock<IPackageRepository>();
            var mockOperationAware = mockRepository.As<IOperationAwareRepository>();
            var source = new PackageSource("bar", "foo");
            mockSourceProvider.Setup(m => m.ActivePackageSource).Returns(source);
            mockRepositoryFactory.Setup(m => m.CreateRepository(source.Source)).Returns(mockRepository.Object);
            mockRepository.SetupGet(r => r.Source).Returns("Bar");
            var repository = new VsPackageSourceRepository(mockRepositoryFactory.Object, mockSourceProvider.Object);

            // Act
            using (repository.StartOperation("Foo"))
            {
                method(repository);
            }

            // Assert
            mockOperationAware.Verify(o => o.StartOperation("Foo"));
        }