diff --git a/src/Umbraco.Core/IO/ViewHelper.cs b/src/Umbraco.Core/IO/ViewHelper.cs index 534b20c345..5c3a437774 100644 --- a/src/Umbraco.Core/IO/ViewHelper.cs +++ b/src/Umbraco.Core/IO/ViewHelper.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Text; +using System.Text.RegularExpressions; using Umbraco.Core.Models; namespace Umbraco.Core.IO diff --git a/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs index a04abe0687..bd6a2bb350 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs @@ -70,7 +70,7 @@ namespace Umbraco.Tests.Persistence.Repositories } [Test] - public void Can_Perform_Add_MasterPage() + public void Can_Perform_Add_MasterPage_Detect_Content() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); @@ -79,7 +79,9 @@ namespace Umbraco.Tests.Persistence.Repositories Mock.Of(t => t.DefaultRenderingEngine == RenderingEngine.Mvc))) { // Act - var template = new Template("test", "test", _viewsFileSystem, _masterPageFileSystem, Mock.Of(t => t.DefaultRenderingEngine == RenderingEngine.Mvc)) + var template = new Template("test", "test", _viewsFileSystem, _masterPageFileSystem, + //even though the default is MVC, the content is not + Mock.Of(t => t.DefaultRenderingEngine == RenderingEngine.Mvc)) { Content = @"<%@ Master Language=""C#"" %>" }; @@ -152,6 +154,27 @@ namespace Umbraco.Tests.Persistence.Repositories [Test] public void Can_Perform_Add_View() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new TemplateRepository(unitOfWork, NullCacheProvider.Current, _masterPageFileSystem, _viewsFileSystem, + Mock.Of(t => t.DefaultRenderingEngine == RenderingEngine.Mvc))) + { + // Act + var template = new Template("test", "test", _viewsFileSystem, _masterPageFileSystem, Mock.Of(t => t.DefaultRenderingEngine == RenderingEngine.Mvc)); + repository.AddOrUpdate(template); + unitOfWork.Commit(); + + //Assert + Assert.That(repository.Get("test"), Is.Not.Null); + Assert.That(_viewsFileSystem.FileExists("test.cshtml"), Is.True); + } + + } + + [Test] + public void Can_Perform_Add_View_With_Default_Content() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); @@ -170,6 +193,41 @@ namespace Umbraco.Tests.Persistence.Repositories //Assert Assert.That(repository.Get("test"), Is.Not.Null); Assert.That(_viewsFileSystem.FileExists("test.cshtml"), Is.True); + Assert.AreEqual(@"@inherits Umbraco.Web.Mvc.UmbracoTemplatePage +@{ + Layout = null; +}", template.Content); + } + + } + + [Test] + public void Can_Perform_Add_View_With_Default_Content_With_Parent() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + using (var repository = new TemplateRepository(unitOfWork, NullCacheProvider.Current, _masterPageFileSystem, _viewsFileSystem, + Mock.Of(t => t.DefaultRenderingEngine == RenderingEngine.Mvc))) + { + //NOTE: This has to be persisted first + var template = new Template("test", "test", _viewsFileSystem, _masterPageFileSystem, Mock.Of(t => t.DefaultRenderingEngine == RenderingEngine.Mvc)); + repository.AddOrUpdate(template); + unitOfWork.Commit(); + + // Act + var template2 = new Template("test2", "test2", _viewsFileSystem, _masterPageFileSystem, Mock.Of(t => t.DefaultRenderingEngine == RenderingEngine.Mvc)); + template2.SetMasterTemplate(template); + repository.AddOrUpdate(template2); + unitOfWork.Commit(); + + //Assert + Assert.That(repository.Get("test2"), Is.Not.Null); + Assert.That(_viewsFileSystem.FileExists("test2.cshtml"), Is.True); + Assert.AreEqual(@"@inherits Umbraco.Web.Mvc.UmbracoTemplatePage +@{ + Layout = ""test.cshtml""; +}", template2.Content); } } diff --git a/src/umbraco.cms/businesslogic/template/Template.cs b/src/umbraco.cms/businesslogic/template/Template.cs index 8b49327a77..106a808100 100644 --- a/src/umbraco.cms/businesslogic/template/Template.cs +++ b/src/umbraco.cms/businesslogic/template/Template.cs @@ -29,8 +29,8 @@ namespace umbraco.cms.businesslogic.template #region Private members - private ViewHelper _viewHelper = new ViewHelper(new PhysicalFileSystem(SystemDirectories.MvcViews)); - private MasterPageHelper _masterPageHelper = new MasterPageHelper(new PhysicalFileSystem(SystemDirectories.Masterpages)); + private readonly ViewHelper _viewHelper = new ViewHelper(new PhysicalFileSystem(SystemDirectories.MvcViews)); + private readonly MasterPageHelper _masterPageHelper = new MasterPageHelper(new PhysicalFileSystem(SystemDirectories.Masterpages)); internal ITemplate TemplateEntity; //private string _OutputContentType; //private string _design; @@ -190,8 +190,6 @@ namespace umbraco.cms.businesslogic.template { return TemplateEntity.Path; - //TODO: Fix the path on templates! - //List path = new List(); //Template working = this; //while (working != null) @@ -345,7 +343,7 @@ namespace umbraco.cms.businesslogic.template { if (HasChildren) { - foreach (Template t in Template.GetAllAsList().FindAll(delegate(Template t) { return t.MasterTemplate == this.Id; })) + foreach (var t in GetAllAsList().FindAll(t => t.MasterTemplate == Id)) { t.MasterTemplate = 0; } @@ -749,12 +747,12 @@ namespace umbraco.cms.businesslogic.template /// /// Occurs when [before save]. /// - public static event SaveEventHandler BeforeSave; + public new static event SaveEventHandler BeforeSave; /// /// Raises the event. /// /// The instance containing the event data. - protected virtual void FireBeforeSave(SaveEventArgs e) + protected override void FireBeforeSave(SaveEventArgs e) { if (BeforeSave != null) BeforeSave(this, e); @@ -763,12 +761,12 @@ namespace umbraco.cms.businesslogic.template /// /// Occurs when [after save]. /// - public static event SaveEventHandler AfterSave; + public new static event SaveEventHandler AfterSave; /// /// Raises the event. /// /// The instance containing the event data. - protected virtual void FireAfterSave(SaveEventArgs e) + protected override void FireAfterSave(SaveEventArgs e) { if (AfterSave != null) AfterSave(this, e); @@ -791,12 +789,12 @@ namespace umbraco.cms.businesslogic.template /// /// Occurs when [before delete]. /// - public static event DeleteEventHandler BeforeDelete; + public new static event DeleteEventHandler BeforeDelete; /// /// Raises the event. /// /// The instance containing the event data. - protected virtual void FireBeforeDelete(DeleteEventArgs e) + protected override void FireBeforeDelete(DeleteEventArgs e) { if (BeforeDelete != null) BeforeDelete(this, e); @@ -805,12 +803,12 @@ namespace umbraco.cms.businesslogic.template /// /// Occurs when [after delete]. /// - public static event DeleteEventHandler AfterDelete; + public new static event DeleteEventHandler AfterDelete; /// /// Raises the event. /// /// The instance containing the event data. - protected virtual void FireAfterDelete(DeleteEventArgs e) + protected override void FireAfterDelete(DeleteEventArgs e) { if (AfterDelete != null) AfterDelete(this, e);