From 97e9cd4be0013544042675a905fa438fc94331f0 Mon Sep 17 00:00:00 2001 From: Andy Rose Date: Thu, 29 Oct 2015 13:54:12 +0000 Subject: [PATCH 1/5] U4-6980: Only assume a masterpage template if a MVC hasn't already been created --- .../Persistence/Repositories/TemplateRepository.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs index 0a0dbe37dd..8d0d091621 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs @@ -682,14 +682,14 @@ namespace Umbraco.Core.Persistence.Repositories public RenderingEngine DetermineTemplateRenderingEngine(ITemplate template) { var engine = _templateConfig.DefaultRenderingEngine; + var viewHelper = new ViewHelper(_viewsFileSystem); - if (template.Content.IsNullOrWhiteSpace() == false && MasterPageHelper.IsMasterPageSyntax(template.Content)) + if (template.Content.IsNullOrWhiteSpace() == false && MasterPageHelper.IsMasterPageSyntax(template.Content) && !viewHelper.ViewExists(template)) { - //there is a design but its definitely a webforms design + //there is a design but its definitely a webforms design and we haven't got a MVC view already for it return RenderingEngine.WebForms; } - var viewHelper = new ViewHelper(_viewsFileSystem); var masterPageHelper = new MasterPageHelper(_masterpagesFileSystem); switch (engine) From e86aaefaafa1f5027f8acb15056bd0c782da5ce8 Mon Sep 17 00:00:00 2001 From: Andy Rose Date: Thu, 29 Oct 2015 13:54:12 +0000 Subject: [PATCH 2/5] U4-6980: Only assume a masterpage template if a MVC hasn't already been created --- .../Persistence/Repositories/TemplateRepository.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs index 0a0dbe37dd..8d0d091621 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs @@ -682,14 +682,14 @@ namespace Umbraco.Core.Persistence.Repositories public RenderingEngine DetermineTemplateRenderingEngine(ITemplate template) { var engine = _templateConfig.DefaultRenderingEngine; + var viewHelper = new ViewHelper(_viewsFileSystem); - if (template.Content.IsNullOrWhiteSpace() == false && MasterPageHelper.IsMasterPageSyntax(template.Content)) + if (template.Content.IsNullOrWhiteSpace() == false && MasterPageHelper.IsMasterPageSyntax(template.Content) && !viewHelper.ViewExists(template)) { - //there is a design but its definitely a webforms design + //there is a design but its definitely a webforms design and we haven't got a MVC view already for it return RenderingEngine.WebForms; } - var viewHelper = new ViewHelper(_viewsFileSystem); var masterPageHelper = new MasterPageHelper(_masterpagesFileSystem); switch (engine) From 0eacbcb7cb487c34c209f124ff7a04aa0ce350d6 Mon Sep 17 00:00:00 2001 From: Andy Rose Date: Thu, 29 Oct 2015 13:54:12 +0000 Subject: [PATCH 3/5] U4-6980: Only assume a masterpage template if a MVC hasn't already been created --- .../Persistence/Repositories/TemplateRepository.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs index 0a0dbe37dd..8d0d091621 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs @@ -682,14 +682,14 @@ namespace Umbraco.Core.Persistence.Repositories public RenderingEngine DetermineTemplateRenderingEngine(ITemplate template) { var engine = _templateConfig.DefaultRenderingEngine; + var viewHelper = new ViewHelper(_viewsFileSystem); - if (template.Content.IsNullOrWhiteSpace() == false && MasterPageHelper.IsMasterPageSyntax(template.Content)) + if (template.Content.IsNullOrWhiteSpace() == false && MasterPageHelper.IsMasterPageSyntax(template.Content) && !viewHelper.ViewExists(template)) { - //there is a design but its definitely a webforms design + //there is a design but its definitely a webforms design and we haven't got a MVC view already for it return RenderingEngine.WebForms; } - var viewHelper = new ViewHelper(_viewsFileSystem); var masterPageHelper = new MasterPageHelper(_masterpagesFileSystem); switch (engine) From 7b73ed1796f24218611e8bc1b7eff3065bfe4b05 Mon Sep 17 00:00:00 2001 From: Andy Rose Date: Thu, 29 Oct 2015 15:27:54 +0000 Subject: [PATCH 4/5] U4-6980: Adding supporting unit tests for changes to the template repository --- .../Templates/TemplateRepositoryTests.cs | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 src/Umbraco.Tests/Templates/TemplateRepositoryTests.cs diff --git a/src/Umbraco.Tests/Templates/TemplateRepositoryTests.cs b/src/Umbraco.Tests/Templates/TemplateRepositoryTests.cs new file mode 100644 index 0000000000..c385799411 --- /dev/null +++ b/src/Umbraco.Tests/Templates/TemplateRepositoryTests.cs @@ -0,0 +1,109 @@ +using Moq; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Umbraco.Core; +using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.IO; +using Umbraco.Core.Logging; +using Umbraco.Core.Models; +using Umbraco.Core.Persistence.Repositories; +using Umbraco.Core.Persistence.SqlSyntax; +using Umbraco.Core.Persistence.UnitOfWork; + +namespace Umbraco.Tests.Templates +{ + [TestFixture] + public class TemplateRepositoryTests + { + private readonly Mock _unitOfWorkMock = new Mock(); + private readonly Mock _cacheMock = new Mock(); + private TemplateRepository _templateRepository; + private readonly Mock _viewFileSystemMock = new Mock(); + private readonly Mock _masterpageFileSystemMock = new Mock(); + private readonly Mock _templateConfigMock = new Mock(); + + [SetUp] + public void Setup() + { + var loggerMock = new Mock(); + var sqlSyntaxMock = new Mock(); + _templateRepository = new TemplateRepository(_unitOfWorkMock.Object, _cacheMock.Object, loggerMock.Object, sqlSyntaxMock.Object, _masterpageFileSystemMock.Object, _viewFileSystemMock.Object, _templateConfigMock.Object); + + } + + [Test] + public void DetermineTemplateRenderingEngine_Returns_MVC_When_ViewFile_Exists_And_Content_Has_Webform_Markup() + { + // Project in MVC mode + _templateConfigMock.Setup(x => x.DefaultRenderingEngine).Returns(RenderingEngine.Mvc); + + // Template has masterpage content + var templateMock = new Mock(); + templateMock.Setup(x => x.Alias).Returns("Something"); + templateMock.Setup(x => x.Content).Returns(""); + + // but MVC View already exists + _viewFileSystemMock.Setup(x => x.FileExists(It.IsAny())).Returns(true); + + var res = _templateRepository.DetermineTemplateRenderingEngine(templateMock.Object); + Assert.AreEqual(RenderingEngine.Mvc, res); + } + + [Test] + public void DetermineTemplateRenderingEngine_Returns_WebForms_When_ViewFile_Doesnt_Exist_And_Content_Has_Webform_Markup() + { + // Project in MVC mode + _templateConfigMock.Setup(x => x.DefaultRenderingEngine).Returns(RenderingEngine.Mvc); + + // Template has masterpage content + var templateMock = new Mock(); + templateMock.Setup(x => x.Alias).Returns("Something"); + templateMock.Setup(x => x.Content).Returns(""); + + // MVC View doesn't exist + _viewFileSystemMock.Setup(x => x.FileExists(It.IsAny())).Returns(false); + + var res = _templateRepository.DetermineTemplateRenderingEngine(templateMock.Object); + Assert.AreEqual(RenderingEngine.WebForms, res); + } + + [Test] + public void DetermineTemplateRenderingEngine_Returns_WebForms_When_MasterPage_Exists_And_In_Mvc_Mode() + { + // Project in MVC mode + _templateConfigMock.Setup(x => x.DefaultRenderingEngine).Returns(RenderingEngine.Mvc); + + var templateMock = new Mock(); + templateMock.Setup(x => x.Alias).Returns("Something"); + + // but masterpage already exists + _viewFileSystemMock.Setup(x => x.FileExists(It.IsAny())).Returns(false); + _masterpageFileSystemMock.Setup(x => x.FileExists(It.IsAny())).Returns(true); + + var res = _templateRepository.DetermineTemplateRenderingEngine(templateMock.Object); + Assert.AreEqual(RenderingEngine.WebForms, res); + } + + [Test] + public void DetermineTemplateRenderingEngine_Returns_Mvc_When_ViewPage_Exists_And_In_Webforms_Mode() + { + // Project in WebForms mode + _templateConfigMock.Setup(x => x.DefaultRenderingEngine).Returns(RenderingEngine.WebForms); + + var templateMock = new Mock(); + templateMock.Setup(x => x.Alias).Returns("Something"); + + // but MVC View already exists + _viewFileSystemMock.Setup(x => x.FileExists(It.IsAny())).Returns(true); + _masterpageFileSystemMock.Setup(x => x.FileExists(It.IsAny())).Returns(false); + + var res = _templateRepository.DetermineTemplateRenderingEngine(templateMock.Object); + Assert.AreEqual(RenderingEngine.Mvc, res); + } + + } +} From f4ae45d8f2b7d48c11e3f6761b1173a67ad60133 Mon Sep 17 00:00:00 2001 From: Andy Rose Date: Thu, 29 Oct 2015 15:28:15 +0000 Subject: [PATCH 5/5] U4-6980: Adding supporting unit tests for changes to the template repository --- .../Persistence/Repositories/TemplateRepository.cs | 10 ++++++---- src/Umbraco.Tests/Umbraco.Tests.csproj | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs index 8d0d091621..2ea6d79d43 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs @@ -683,11 +683,13 @@ namespace Umbraco.Core.Persistence.Repositories { var engine = _templateConfig.DefaultRenderingEngine; var viewHelper = new ViewHelper(_viewsFileSystem); - - if (template.Content.IsNullOrWhiteSpace() == false && MasterPageHelper.IsMasterPageSyntax(template.Content) && !viewHelper.ViewExists(template)) + if (!viewHelper.ViewExists(template)) { - //there is a design but its definitely a webforms design and we haven't got a MVC view already for it - return RenderingEngine.WebForms; + if (template.Content.IsNullOrWhiteSpace() == false && MasterPageHelper.IsMasterPageSyntax(template.Content)) + { + //there is a design but its definitely a webforms design and we haven't got a MVC view already for it + return RenderingEngine.WebForms; + } } var masterPageHelper = new MasterPageHelper(_masterpagesFileSystem); diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 8087a6e709..0e7dc711b8 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -361,6 +361,7 @@ +