public void TestIfCorrectPackagesAreInstalled() { bool arePackagesCorrect = true; Packages allPackages = new Packages(); allPackages.AllPackages = new Dictionary<string, string[]>(); allPackages.AllPackages.Add("backbone", new string[] { "jQuery", "underscore" }); allPackages.AllPackages.Add("jQuery" , new string[] { "queryJ" }); allPackages.AllPackages.Add("underscore", new string[] { "lodash" }); allPackages.AllPackages.Add("queryJ", new string[] { }); allPackages.AllPackages.Add("lodash", new string[] { }); Dependency dependency = new Dependency("Test0000", new object[] {"backbone"}); IOperator mockOperator = new PackagesOperatorMock(); mockOperator.InstallRequiredPackages(allPackages, dependency, "lodash"); string[] packagesResult = new string[] { "backbone", "jQuery", "queryJ", "underscore", "lodash", }; int position = 0; foreach (KeyValuePair<string, bool> package in mockOperator.ShowInstalledPackages()) { if(package.Key != packagesResult[position]) { arePackagesCorrect = false; break; } position++; } Assert.AreEqual(true, arePackagesCorrect); }
static void Main(string[] args) { JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); PackagesOperator packagesOperator = new PackagesOperator(); string pathOfAllPackages = "all_packages.json"; string pathOfDependencies = "dependencies.json"; string pathToInstallPackages = @"...\...\Installed modules"; Packages allPackages = new Packages(); allPackages.AllPackages = JSONDeserializer.DeserializeJsonAllPackagesFile(pathOfAllPackages, jsSerializer); Dependency dependencies = JSONDeserializer.DeserializeJsonDependencies(pathOfDependencies, jsSerializer); packagesOperator.InstallRequiredPackages(allPackages, dependencies, pathToInstallPackages); }
public void InstallRequiredPackages(Packages packages, Dependency dependencies, string installedPackagesString) { installedPackages = this.GetInstalledPackages(installedPackagesString); if (!Object.ReferenceEquals(null, dependencies)) { foreach (var dependcyPackage in dependencies.Dependencies) { InstallPackage(packages, dependencies, installedPackages, dependcyPackage.ToString()); } } else { throw new ArgumentException("Error! Dependencies object is null"); } }
private void InstallPackage(Packages packages, Dependency dependencies, Dictionary<string, bool> installedPackages, string currentPackage) { if (packages.AllPackages.ContainsKey(currentPackage)) { if (!installedPackages.ContainsKey(currentPackage)) { installedPackages.Add(currentPackage, true); } foreach (var package in packages.AllPackages[currentPackage]) { if (!installedPackages.ContainsKey(package)) { InstallPackage(packages, dependencies, installedPackages, package); } } } }
/// <summary> /// Install all required packages for the projecy /// </summary> /// <param name="packages">All available packages and their dependencies</param> /// <param name="dependencies">Project's dependencies</param> /// <param name="path">Path to install the packages</param> public void InstallRequiredPackages(Packages packages, Dependency dependencies, string path) { Dictionary<string, bool> installedPackages = this.GetInstalledPackages(path); if (!Object.ReferenceEquals(null, dependencies)) { foreach (var dependcyPackage in dependencies.Dependencies) { InstallNotifier.DisplayCurrentInstall(dependcyPackage.ToString()); InstallNotifier.DisplayDependencyPackages(packages, dependcyPackage.ToString(), installedPackages); InstallPackage(packages, dependencies, installedPackages, path, dependcyPackage.ToString()); Directory.CreateDirectory(path + @"\" + dependcyPackage); } InstallNotifier.DisplayEndMessage(); } else { InstallNotifier.DisplayNoProjectErrorMessage(); } }
/// <summary> /// Installs single package /// </summary> /// <param name="packages">All available packages and their dependencies</param> /// <param name="dependencies">Project's dependencies</param> /// <param name="installedPackages">Allready installed packages</param> /// <param name="path">Directory path to install the packages</param> /// <param name="currentPackage">Current packge to be installed</param> private void InstallPackage(Packages packages, Dependency dependencies, Dictionary<string, bool> installedPackages, string path, string currentPackage) { if (packages.AllPackages.ContainsKey(currentPackage)) { foreach (var package in packages.AllPackages[currentPackage]) { if (!installedPackages.ContainsKey(package)) { InstallNotifier.DisplayCurrentInstall(package); InstallNotifier.DisplayDependencyPackages(packages, package, installedPackages); InstallPackage(packages, dependencies, installedPackages, path, package); installedPackages.Add(package, true); Directory.CreateDirectory(path + @"\" + package); } } } }