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_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 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"); }