public void ShouldSkipRenderingIfPhysicalFileAlreadyExistsAndForceIsOff() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject { RootPath = "z:\\proj" }).Build(); var mockFileSystem = new Mock<IFileSystem>().WithExampleTemplate("requestedTemplate", "fixedStringTemplate") .WithFile("z:\\proj\\someFolder\\someFile.ext"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { Template = "requestedTemplate", OutputPath = "someFolder\\someFile.ext" }.GetResults<string>(); // Assert Assert.AreEqual(0, results.Count()); // Did not write any files }
public void ShouldBeAbleToGetOutputAsStringIfNoOutputPathIsSpecified() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject()).Build(); var mockFileSystem = new Mock<IFileSystem>().WithExampleTemplate("requestedTemplate", "simpleTemplate"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { Model = new Hashtable { { "Name", "Bert" }, { "Values", new [] { 1, 2, 3, 4 }} }, Template = "requestedTemplate" }.GetResults<string>(); // Assert Assert.AreEqual("The name is Bert. There are 4 values.", results.Single()); }
public void ShouldBeAbleToLocateProjectRelativeTemplates() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject( new MockFolder("myTemplates", new MockItem("someTemplate.ext.t4")) ) { RootPath = "z:\\proj" }).Build(); var mockFileSystem = new Mock<IFileSystem>().WithTextFile("z:\\proj\\myTemplates\\someTemplate.ext.t4", "My project-relative template contents"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = "someFolder\\someFile.ext", Template = "myTemplates\\someTemplate.ext.t4" }.GetResults<string>(); // Assert Assert.AreEqual("someFolder\\someFile.ext", results.Single()); mockFileSystem.Verify(x => x.WriteAllText("z:\\proj\\someFolder\\someFile.ext", "My project-relative template contents")); Assert.IsNotNull(solutionManager.DefaultProject.GetProjectItem("someFolder\\someFile.ext")); }
public void ShouldPerformRenderingIfPhysicalFileExistsAndIsReferencedByProjectAndForceIsOn() { // Arrange var solutionManager = new MockSolutionManagerBuilder(new MockProject( new MockFolder("someFolder", new MockItem("someFile.ext")) ) { RootPath = "z:\\proj" }).Build(); var mockFileSystem = new Mock<IFileSystem>().WithExampleTemplate("requestedTemplate", "fixedStringTemplate") .WithFile("z:\\proj\\someFolder\\someFile.ext"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = "someFolder\\someFile.ext", Template = "requestedTemplate", Force = new SwitchParameter(true) }.GetResults<string>(); // Assert Assert.AreEqual("someFolder\\someFile.ext", results.Single()); mockFileSystem.Verify(x => x.WriteAllText("z:\\proj\\someFolder\\someFile.ext", "Fixed string output from template")); }
public void ShouldBeAbleToSpecifyArbitraryProjectName() { // Arrange var solutionManager = new MockSolutionManagerBuilder( new MockProject("firstProject"), new MockProject("secondProject") { RootPath = "second:\\root" } ).Build(); var mockFileSystem = new Mock<IFileSystem>().WithExampleTemplate("requestedTemplate", "fixedStringTemplate"); // Act var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = "someFolder\\someFile.ext", Template = "requestedTemplate", Project = "secondProject" }.GetResults<string>(); // Assert Assert.AreEqual("someFolder\\someFile.ext", results.Single()); mockFileSystem.Verify(x => x.WriteAllText("second:\\root\\someFolder\\someFile.ext", "Fixed string output from template")); Assert.IsNotNull(solutionManager.GetProject("secondProject").GetProjectItem("someFolder\\someFile.ext")); }
private static string RunTemplateRenderingTest(string exampleTemplateName, Hashtable model, IEnumerable<Assembly> projectAssemblyReferences = null, string expectedOutputExtension = null) { // Arrange: Project containing a single folder var solutionManager = new MockSolutionManagerBuilder(new MockProject(new MockFolder("someFolder")) { RootPath = "z:\\proj", References = projectAssemblyReferences != null ? projectAssemblyReferences.Select(x => x.Location) : new string[] { } }).Build(); // Arrange: Filesystem that has template and captures attempt to write rendered output to disk var requestedOutputPath = "someFolder\\nonExistentFolder\\file.ext"; var expectedOutputPathWithExtension = requestedOutputPath; if (!string.IsNullOrEmpty(expectedOutputExtension)) expectedOutputPathWithExtension += "." + expectedOutputExtension; var mockFileSystem = new Mock<IFileSystem>().WithExampleTemplate("requestedTemplate", exampleTemplateName); string templateOutput = null; mockFileSystem.Setup(x => x.WriteAllText("z:\\proj\\" + expectedOutputPathWithExtension, It.IsAny<string>())) .Callback<string, string>((filename, writtenText) => { templateOutput = writtenText; }); // Act: Invoke the template try { var results = new InvokeScaffoldTemplateCmdlet(solutionManager, mockFileSystem.Object) { OutputPath = requestedOutputPath, Template = "requestedTemplate", Model = model }.GetResults<string>(); // Assert Assert.AreEqual(expectedOutputPathWithExtension, results.Single()); Assert.IsNotNull(solutionManager.DefaultProject.GetProjectItem(expectedOutputPathWithExtension)); return templateOutput; } catch (InvalidOperationException ex) { // If it was a template rendering error, throw a more descriptive exception var templateErrors = ex.Data["CmdletOutput"] as IList<object>; if ((templateErrors != null) && (templateErrors.Any()) && (templateErrors.First() is IEnumerable<CompilerError>)) throw new InvalidOperationException("Template rendering error: " + string.Join(Environment.NewLine, ((IEnumerable<CompilerError>)templateErrors.First()).Select(x => x.ToString()))); throw; } }