From 2a6b559b6e23bb414203a42ca574ce0b6a7dc410 Mon Sep 17 00:00:00 2001 From: Stephan Date: Thu, 21 Jan 2016 17:27:24 +0100 Subject: [PATCH] U4-7739 - added more options to ViewHelper.GetDefaultFileContent --- src/Umbraco.Core/IO/ViewHelper.cs | 55 +++++++++-- .../Templates/ViewHelperTests.cs | 91 +++++++++++++++++++ src/Umbraco.Tests/Umbraco.Tests.csproj | 1 + 3 files changed, 138 insertions(+), 9 deletions(-) create mode 100644 src/Umbraco.Tests/Templates/ViewHelperTests.cs diff --git a/src/Umbraco.Core/IO/ViewHelper.cs b/src/Umbraco.Core/IO/ViewHelper.cs index a247f5170e..933a9d2956 100644 --- a/src/Umbraco.Core/IO/ViewHelper.cs +++ b/src/Umbraco.Core/IO/ViewHelper.cs @@ -66,21 +66,58 @@ namespace Umbraco.Core.IO return viewContent; } - public static string GetDefaultFileContent(string layoutPageAlias = null, string modelClassName = null) + public static string GetDefaultFileContent(string layoutPageAlias = null, string modelClassName = null, string modelNamespace = null, string modelNamespaceAlias = null) { - var design = @"@inherits Umbraco.Web.Mvc.UmbracoTemplatePage -@{ - Layout = null; -}"; + var content = new StringBuilder(); - if (layoutPageAlias.IsNullOrWhiteSpace() == false) - design = design.Replace("null", string.Format("\"{0}.cshtml\"", layoutPageAlias)); + if (string.IsNullOrWhiteSpace(modelNamespaceAlias)) + modelNamespaceAlias = "ContentModels"; + // either + // @inherits Umbraco.Web.Mvc.UmbracoTemplatePage + // @inherits Umbraco.Web.Mvc.UmbracoTemplatePage + // @inherits Umbraco.Web.Mvc.UmbracoTemplatePage + content.Append("@inherits Umbraco.Web.Mvc.UmbracoTemplatePage"); if (modelClassName.IsNullOrWhiteSpace() == false) - design = design.Replace(".UmbracoTemplatePage", string.Format(".UmbracoTemplatePage<{0}>", modelClassName)); + { + content.Append("<"); + if (modelNamespace.IsNullOrWhiteSpace() == false) + { + content.Append(modelNamespaceAlias); + content.Append("."); + } + content.Append(modelClassName); + content.Append(">"); + } + content.Append("\r\n"); + // if required, add + // @using ContentModels = ModelNamespace; + if (modelClassName.IsNullOrWhiteSpace() == false && modelNamespace.IsNullOrWhiteSpace() == false) + { + content.Append("@using "); + content.Append(modelNamespaceAlias); + content.Append(" = "); + content.Append(modelNamespace); + content.Append(";\r\n"); + } - return design; + // either + // Layout = null; + // Layout = "layoutPage.cshtml"; + content.Append("@{\r\n\tLayout = "); + if (layoutPageAlias.IsNullOrWhiteSpace()) + { + content.Append("null"); + } + else + { + content.Append("\""); + content.Append(layoutPageAlias); + content.Append(".cshtml\""); + } + content.Append(";\r\n}"); + return content.ToString(); } private string SaveTemplateToFile(ITemplate template) diff --git a/src/Umbraco.Tests/Templates/ViewHelperTests.cs b/src/Umbraco.Tests/Templates/ViewHelperTests.cs new file mode 100644 index 0000000000..5bd7733920 --- /dev/null +++ b/src/Umbraco.Tests/Templates/ViewHelperTests.cs @@ -0,0 +1,91 @@ +using NUnit.Framework; +using Umbraco.Core.IO; + +namespace Umbraco.Tests.Templates +{ + [TestFixture] + public class ViewHelperTests + { + [Test] + public void NoOptions() + { + var view = ViewHelper.GetDefaultFileContent(); + Assert.AreEqual(FixView(@"@inherits Umbraco.Web.Mvc.UmbracoTemplatePage +@{ + Layout = null; +}"), FixView(view)); + } + + [Test] + public void Layout() + { + var view = ViewHelper.GetDefaultFileContent(layoutPageAlias: "Dharznoik"); + Assert.AreEqual(FixView(@"@inherits Umbraco.Web.Mvc.UmbracoTemplatePage +@{ + Layout = ""Dharznoik.cshtml""; +}"), FixView(view)); + } + + [Test] + public void ClassName() + { + var view = ViewHelper.GetDefaultFileContent(modelClassName: "ClassName"); + Assert.AreEqual(FixView(@"@inherits Umbraco.Web.Mvc.UmbracoTemplatePage +@{ + Layout = null; +}"), FixView(view)); + } + + [Test] + public void Namespace() + { + var view = ViewHelper.GetDefaultFileContent(modelNamespace: "Models"); + Assert.AreEqual(FixView(@"@inherits Umbraco.Web.Mvc.UmbracoTemplatePage +@{ + Layout = null; +}"), FixView(view)); + } + + [Test] + public void ClassNameAndNamespace() + { + var view = ViewHelper.GetDefaultFileContent(modelClassName: "ClassName", modelNamespace: "My.Models"); + Assert.AreEqual(FixView(@"@inherits Umbraco.Web.Mvc.UmbracoTemplatePage +@using ContentModels = My.Models; +@{ + Layout = null; +}"), FixView(view)); + } + + [Test] + public void ClassNameAndNamespaceAndAlias() + { + var view = ViewHelper.GetDefaultFileContent(modelClassName: "ClassName", modelNamespace: "My.Models", modelNamespaceAlias: "MyModels"); + Assert.AreEqual(FixView(@"@inherits Umbraco.Web.Mvc.UmbracoTemplatePage +@using MyModels = My.Models; +@{ + Layout = null; +}"), FixView(view)); + } + + [Test] + public void Combined() + { + var view = ViewHelper.GetDefaultFileContent(layoutPageAlias: "Dharznoik", modelClassName: "ClassName", modelNamespace: "My.Models", modelNamespaceAlias: "MyModels"); + Assert.AreEqual(FixView(@"@inherits Umbraco.Web.Mvc.UmbracoTemplatePage +@using MyModels = My.Models; +@{ + Layout = ""Dharznoik.cshtml""; +}"), FixView(view)); + } + + private static string FixView(string view) + { + view = view.Replace("\r\n", "\n"); + view = view.Replace("\r", "\n"); + view = view.Replace("\n", "\r\n"); + view = view.Replace("\t", " "); + return view; + } + } +} diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 5bb59eaa04..2f048f12b5 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -369,6 +369,7 @@ +