public void AreDependenciesValid_PackageSameAsItsDependency_True()
        {
            // Arrange
            var dependencies = new Dictionary <PackageDetails, IList <PackageDetails> > {
                { _package, new List <PackageDetails> {
                      _package
                  } }
            };
            var packageInformation = new ApplicationPackageInformation(new[] { _package }, dependencies);

            // Act
            var result = _unitUnderTest.AreDependenciesValid(packageInformation);

            // Assert
            Assert.IsTrue(result);
        }
        public void AreDependenciesValid_RedundantDependencies_True()
        {
            // Arrange
            var redundantDependency = new PackageDetails("not-used", "not-used");
            var dependencies        = new Dictionary <PackageDetails, IList <PackageDetails> >
            {
                { _package, new List <PackageDetails> {
                      _dependency
                  } },
                { redundantDependency, new List <PackageDetails> {
                      _package, _dependency
                  } }
            };
            var packageInformation = new ApplicationPackageInformation(new[] { _package }, dependencies);

            // Act
            var result = _unitUnderTest.AreDependenciesValid(packageInformation);

            // Assert
            Assert.IsTrue(result);
        }
        public void AreDependenciesValid_MultiplePackagesWithTheSameDependency_True()
        {
            // Arrange
            var somePackage  = new PackageDetails("some-package", "some-package");
            var dependencies = new Dictionary <PackageDetails, IList <PackageDetails> >
            {
                { _package, new List <PackageDetails> {
                      _dependency
                  } },
                { somePackage, new List <PackageDetails> {
                      _package, _dependency
                  } }
            };
            var packageInformation = new ApplicationPackageInformation(new[] { _package }, dependencies);

            // Act
            var result = _unitUnderTest.AreDependenciesValid(packageInformation);

            // Assert
            Assert.IsTrue(result);
        }
        /// <inheritdoc/>
        public bool AreDependenciesValid(ApplicationPackageInformation packageInformation)
        {
            var packagesToInstall = packageInformation.PackagesToInstall.Distinct().ToList();
            var distinctPackages  = new Dictionary <string, string>();

            for (var i = 0; i < packagesToInstall.Count; i++)
            {
                var packageToInstall = packagesToInstall.ElementAt(i);
                if (!distinctPackages.ContainsKey(packageToInstall.Name))
                {
                    distinctPackages.Add(packageToInstall.Name, packageToInstall.Version);
                }
                else
                {
                    var existingVersion = distinctPackages[packageToInstall.Name];
                    if (existingVersion != packageToInstall.Version)
                    {
                        return(false);
                    }
                }

                if (!packageInformation.PackageDependencies.ContainsKey(packageToInstall))
                {
                    continue;
                }

                var dependencies = packageInformation.PackageDependencies[packageToInstall];
                foreach (var dependency in dependencies)
                {
                    if (packagesToInstall.Contains(dependency))
                    {
                        continue;
                    }

                    packagesToInstall.Add(dependency);
                }
            }

            return(true);
        }
 public void Ctor_NullDependenciesCollection_ArgumentNullException()
 {
     // Act
     _ = new ApplicationPackageInformation(_packages, null);
 }