public void VisitProject_ShouldReturn_DirectoryDoesNotExist_WhenDirectoryDoesNotExist()
        {
            var instance = new BuildAndUpdateDependenciesVisitor(new List <string>());
            var code     = instance.VisitProject(Lib2Directory, Lib2Config);

            Assert.AreEqual(ReturnCode.DirectoryDoesNotExist, code, "Invalid Return Code");
        }
        public void VisitProject_ShouldCallNugetRestoreBeforeCallingNuGetUpdate()
        {
            var fileSystem = RegisterMockFileSystem();
            var nuget      = Container.Resolve <INuget>();
            var instance   = new BuildAndUpdateDependenciesVisitor(new List <string>());

            EnsureFiles(fileSystem, Lib1PackagesDirectory, Lib1Packages);
            EnsureFiles(fileSystem, Lib2Directory, Lib2Solutions);

            bool nugetRestoreCalled = false;

            nuget.Arrange(n => n.Restore(Arg.AnyString))
            .Returns((string solution) =>
            {
                nugetRestoreCalled = true;
                return(ReturnCode.Success);
            });

            nuget.Arrange(n => n.Update(Arg.AnyString, Arg.AnyString, Arg.AnyString, Arg.AnyString))
            .Returns((string solution, string id, string version, string sourceDirectory) =>
            {
                Assert.IsTrue(nugetRestoreCalled, "NuGet.exe restore should have been called before Update");
                return(ReturnCode.Success);
            });

            fileSystem.Directory.CreateDirectory(Lib2Directory);

            var code = instance.VisitProject(Lib2Directory, Lib2Config);

            Assert.AreEqual(ReturnCode.Success, code, "Invalid Return Code");
            Assert.AreEqual(ReturnCode.Success, instance.ReturnCode, "Invalid Return Code");
        }
        public void VisitProject_ShouldReturn_Success_WhenConfigIsNull()
        {
            var instance = new BuildAndUpdateDependenciesVisitor(new List <string>());
            var code     = instance.VisitProject(Lib2Directory, null);

            Assert.AreEqual(ReturnCode.Success, code, "Invalid Return Code");
            Assert.AreEqual(ReturnCode.Success, instance.ReturnCode, "Invalid Return Code");
        }
        public void VisitProject_ShouldCallNugetUpdate_ForEachNugetPackageInDependencyArtifactsFolder()
        {
            var fileSystem = RegisterMockFileSystem();
            var nuget      = Container.Resolve <INuget>();
            var instance   = new BuildAndUpdateDependenciesVisitor(new List <string>());

            EnsureFiles(fileSystem, Lib1PackagesDirectory, Lib1Packages);
            EnsureFiles(fileSystem, Lib1PackagesDirectory, new List <string>
            {
                ".nupkg",
                "bad.input.nupkg"
            });

            EnsureFiles(fileSystem, Lib2Directory, Lib2Solutions);
            Dictionary <string, List <string> > updatedPackages = new Dictionary <string, List <string> >();

            nuget.Arrange(n => n.Update(Arg.AnyString, Arg.AnyString, Arg.AnyString, Arg.AnyString))
            .Returns((string solution, string id, string version, string sourceDirectory) =>
            {
                Assert.AreEqual(Lib2Directory, nuget.WorkingDirectory, "Invalid working directory for Nuget.exe");

                var key = $"{id}.{version}";
                if (updatedPackages.ContainsKey(key))
                {
                    var list = updatedPackages[key];

                    Assert.IsFalse(list.Contains(solution));
                    list.Add(solution);
                }
                else
                {
                    updatedPackages.Add(key, new List <string> {
                        solution
                    });
                }
                return(ReturnCode.Success);
            });

            fileSystem.Directory.CreateDirectory(Lib2Directory);

            var code = instance.VisitProject(Lib2Directory, Lib2Config);

            Assert.AreEqual(ReturnCode.Success, code, "Invalid Return Code");
            Assert.AreEqual(ReturnCode.Success, instance.ReturnCode, "Invalid Return Code");

            Assert.AreEqual(Lib1Packages.Count, updatedPackages.Keys.Count, "Invalid number of updated packages");

            foreach (var kvp in updatedPackages)
            {
                Assert.IsTrue(Lib1Packages.Any(p => fileSystem.Path.GetFileNameWithoutExtension(p) == kvp.Key));

                foreach (var solution in kvp.Value)
                {
                    Assert.IsTrue(Lib2Solutions.Any(s => s == fileSystem.Path.GetFileName(solution)), $"{solution} was not found in Lib2Solutions");
                }
            }
        }
        public void VisitDependency_ShouldReturn_GitDependFileNotFound_WhenUnableToLoadConfigFile()
        {
            var factory  = Container.Resolve <IGitDependFileFactory>();
            var instance = new BuildAndUpdateDependenciesVisitor(new List <string>());

            string     dir;
            ReturnCode loadCode = ReturnCode.GitRepositoryNotFound;

            factory.Arrange(f => f.LoadFromDirectory(Arg.AnyString, out dir, out loadCode))
            .Returns(null as GitDependFile);

            var code = instance.VisitDependency(Lib2Directory, Lib1Dependency);

            Assert.AreEqual(ReturnCode.GitRepositoryNotFound, code, "Invalid ReturnCode");
            Assert.AreEqual(ReturnCode.GitRepositoryNotFound, instance.ReturnCode, "Invalid ReturnCode");
        }
        public void VisitDependency_ShouldRunBuildScript()
        {
            var factory        = Container.Resolve <IGitDependFileFactory>();
            var processManager = Container.Resolve <IProcessManager>();
            var fileSystem     = RegisterMockFileSystem();
            var instance       = new BuildAndUpdateDependenciesVisitor(new List <string>());

            string     dir;
            ReturnCode loadCode = ReturnCode.Success;

            factory.Arrange(f => f.LoadFromDirectory(Arg.AnyString, out dir, out loadCode))
            .Returns(Lib1Config);

            bool scriptExecuted = false;

            processManager.Arrange(m => m.Start(Arg.IsAny <ProcessStartInfo>()))
            .Returns((ProcessStartInfo info) =>
            {
                scriptExecuted = true;
                EnsureFiles(fileSystem, Lib1PackagesDirectory, Lib1Packages);

                return(new FakeProcess
                {
                    ExitCode = 0,
                    HasExited = true
                });
            });


            var code = instance.VisitDependency(Lib2Directory, Lib1Dependency);

            var cachedPackages = fileSystem.Directory.GetFiles(instance.GetCacheDirectory(), "*.nupkg");

            Assert.AreEqual(Lib1Packages.Count, cachedPackages.Length, "Invalid number of cached nuget packages");

            foreach (var package in cachedPackages)
            {
                var name = fileSystem.Path.GetFileName(package);
                // Make sure that name shows up in the original list.
                Assert.IsTrue(Lib1Packages.Any(p => fileSystem.Path.GetFileName(p) == name));
            }

            Assert.IsTrue(scriptExecuted, "Build Script was not executed");
            Assert.AreEqual(ReturnCode.Success, code, "Invalid ReturnCode");
            Assert.AreEqual(ReturnCode.Success, instance.ReturnCode, "Invalid ReturnCode");
        }
        public void VisitDependency_ShouldReturn_CouldNotCreateCacheDirectory_IfCacheDirectoryFailsToCreate()
        {
            var factory = Container.Resolve <IGitDependFileFactory>();

            string     dir;
            ReturnCode loadCode = ReturnCode.Success;

            factory.Arrange(f => f.LoadFromDirectory(Arg.AnyString, out dir, out loadCode))
            .Returns(Lib1Config);

            var fileSystem = Container.Resolve <IFileSystem>();

            fileSystem.Directory.Arrange(d => d.CreateDirectory(Arg.AnyString))
            .Throws <IOException>("Access Denied");

            var instance = new BuildAndUpdateDependenciesVisitor(new List <string>());

            var code = instance.VisitDependency(Lib2Directory, Lib1Dependency);

            Assert.AreEqual(ReturnCode.CouldNotCreateCacheDirectory, code, "Invalid ReturnCode");
            Assert.AreEqual(ReturnCode.CouldNotCreateCacheDirectory, instance.ReturnCode, "Invalid ReturnCode");
        }
Exemplo n.º 8
0
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <returns>The return code.</returns>
        public ReturnCode Execute()
        {
            IVisitor visitor = new CheckOutBranchVisitor();

            _algorithm.TraverseDependencies(visitor, _options.Directory);

            if (visitor.ReturnCode != ReturnCode.Success)
            {
                _console.WriteLine("Could not ensure the correct branch on all dependencies.");
                return(visitor.ReturnCode);
            }

            _algorithm.Reset();
            visitor = new BuildAndUpdateDependenciesVisitor();
            _algorithm.TraverseDependencies(visitor, _options.Directory);

            if (visitor.ReturnCode == ReturnCode.Success)
            {
                _console.WriteLine("Update complete!");
            }

            return(visitor.ReturnCode);
        }
        public void VisitProject_ShouldReturn_CouldNotCreateCacheDirectory_WhenCacheDirectoryFailsToInitialize()
        {
            var fileSystem = Container.Resolve <IFileSystem>();

            fileSystem.Directory.Arrange(d => d.Exists(Arg.AnyString)).Returns(true);
            fileSystem.Directory.Arrange(d => d.GetFiles(Arg.AnyString, "*.nupkg"))
            .Returns(Lib1Packages.ToArray());
            fileSystem.Directory.Arrange(d => d.GetFiles(Arg.AnyString, "*.sln", Arg.IsAny <SearchOption>()))
            .Returns(Lib2Solutions.Select(s => Lib2Directory + "\\" + s).ToArray());

            fileSystem.Path.Arrange(p => p.GetFileNameWithoutExtension(Arg.AnyString))
            .Returns(Path.GetFileNameWithoutExtension);

            fileSystem.Directory.Arrange(d => d.CreateDirectory(Arg.AnyString))
            .Throws <IOException>("Access Denied");

            var instance = new BuildAndUpdateDependenciesVisitor(new List <string>());

            var code = instance.VisitProject(Lib2Directory, Lib2Config);

            Assert.AreEqual(ReturnCode.CouldNotCreateCacheDirectory, code, "Invalid Return Code");
            Assert.AreEqual(ReturnCode.CouldNotCreateCacheDirectory, instance.ReturnCode, "Invalid Return Code");
        }
Exemplo n.º 10
0
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <returns>The return code.</returns>
        public ReturnCode Execute()
        {
            var verifyVisitor = new VerifyCorrectBranchVisitor(_options.Dependencies);

            _algorithm.TraverseDependencies(verifyVisitor, _options.Directory);

            if (verifyVisitor.ReturnCode != ReturnCode.Success)
            {
                _console.WriteLine("Not all dependencies are on the correct branch.");
                return(verifyVisitor.ReturnCode);
            }

            _console.WriteLine();
            _algorithm.Reset();
            var buildAndUpdateVisitor = new BuildAndUpdateDependenciesVisitor(_options.Dependencies);

            _algorithm.TraverseDependencies(buildAndUpdateVisitor, _options.Directory);

            if (buildAndUpdateVisitor.ReturnCode == ReturnCode.Success)
            {
                if (buildAndUpdateVisitor.UpdatedPackages.Any())
                {
                    _console.WriteLine("Updated packages: ");
                    foreach (var package in buildAndUpdateVisitor.UpdatedPackages)
                    {
                        _console.WriteLine($"    {package}");
                    }
                    _console.WriteLine("Update complete!");
                }
                else
                {
                    _console.WriteLine("nothing was updated");
                }
            }

            return(buildAndUpdateVisitor.ReturnCode);
        }