diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Views/UmbracoViewPageTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Views/UmbracoViewPageTests.cs new file mode 100644 index 0000000000..2bc8a53cc1 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Views/UmbracoViewPageTests.cs @@ -0,0 +1,358 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using NUnit.Framework; +using Umbraco.Core.Models.PublishedContent; +using Umbraco.Web.Common.AspNetCore; +using Umbraco.Web.Models; + +namespace Umbraco.Tests.UnitTests.Umbraco.Web.Common.Views +{ + [TestFixture] + public class UmbracoViewPageTests + { + #region RenderModel To ... + [Test] + public void RenderModel_To_RenderModel() + { + var content = new ContentType1(null); + var model = new ContentModel(content); + var view = new RenderModelTestPage(); + var viewData = GetViewDataDictionary(model); + view.ViewData = viewData; + + Assert.AreSame(model, view.Model); + } + + [Test] + public void RenderModel_ContentType1_To_ContentType1() + { + var content = new ContentType1(null); + var view = new ContentType1TestPage(); + var viewData = GetViewDataDictionary(content); + + view.ViewData = viewData; + + Assert.IsInstanceOf(view.Model); + } + + [Test] + public void RenderModel_ContentType2_To_ContentType1() + { + var content = new ContentType2(null); + var view = new ContentType1TestPage(); + + var viewData = GetViewDataDictionary(content); + view.ViewData = viewData; + + Assert.IsInstanceOf(view.Model); + } + + // [Test] + // public void RenderModel_ContentType1_To_ContentType2() + // { + // // everything is strongly typed, so I'm not even allowed to try and set the ViewData with the wrong type + // var content = new ContentType1(null); + // var model = new ContentModel(content); + // var view = new ContentType2TestPage(); + // var viewData = new ViewDataDictionary(model); + // + // view.ViewContext = GetViewContext(); + // + // Assert.Throws(() => view.SetViewDataX(viewData)); + // } + + [Test] + public void RenderModel_ContentType1_To_RenderModelOf_ContentType1() + { + var content = new ContentType1(null); + var model = new ContentModel(content); + var view = new RenderModelOfContentType1TestPage(); + var viewData = GetViewDataDictionary>(model); + + view.ViewData = viewData; + + Assert.IsInstanceOf>(view.Model); + Assert.IsInstanceOf(view.Model.Content); + } + + [Test] + public void RenderModel_ContentType2_To_RenderModelOf_ContentType1() + { + var content = new ContentType2(null); + var model = new ContentModel(content); + var view = new RenderModelOfContentType1TestPage(); + var viewData = GetViewDataDictionary>(model); + view.ViewData = viewData; + + Assert.IsInstanceOf>(view.Model); + Assert.IsInstanceOf(view.Model.Content); + } + + // [Test] + // public void RenderModel_ContentType1_To_RenderModelOf_ContentType2() + // { + // // everything is strongly typed, so I'm not even allowed to try and create the ContentModel with the wrong type + // var content = new ContentType1(null); + // var model = new ContentModel(content); + // var view = new RenderModelOfContentType2TestPage(); + // var viewData = new ViewDataDictionary(model); + // + // view.ViewContext = GetViewContext(); + // + // Assert.Throws(() => view.SetViewDataX(viewData)); + // } + + #endregion + + #region RenderModelOf To ... + + [Test] + public void RenderModelOf_ContentType1_To_RenderModel() + { + var content = new ContentType1(null); + var model = new ContentModel(content); + var view = new RenderModelTestPage(); + var viewData = GetViewDataDictionary(model); + + view.ViewData = viewData; + + Assert.AreSame(model, view.Model); + } + + // [Test] + // public void RenderModelOf_ContentType1_To_ContentType1() + // { + // // Can't create viewdata with ContentType1 from ContentModel because it doesn't actually inherit ContentType1 + // // And can't set viewdata from ContentModel because the page expects ContentType1 and not ContentModel + // // And if I change it the test will be the same as RenderModel_ContentType1_To_ContentType1 + // var content = new ContentType1(null); + // var model = new ContentModel(content); + // var view = new ContentType1TestPage(); + // var viewData = GetViewDataDictionary>(model); + // + // view.ViewData = viewData; + // + // Assert.IsInstanceOf(view.Model); + // } + + // [Test] + // public void RenderModelOf_ContentType2_To_ContentType1() + // { + // // Same issue as above test + // var content = new ContentType2(null); + // var model = new ContentModel(content); + // var view = new ContentType1TestPage(); + // var viewData = new ViewDataDictionary(model); + // + // view.ViewContext = GetViewContext(); + // view.SetViewDataX(viewData); + // + // Assert.IsInstanceOf(view.Model); + // } + + // [Test] + // public void RenderModelOf_ContentType1_To_ContentType2() + // { + // // Same issue as above, and as RenderModel1_ContentType1_To_ContentType2 + // var content = new ContentType1(null); + // var model = new ContentModel(content); + // var view = new ContentType2TestPage(); + // var viewData = new ViewDataDictionary(model); + // + // view.ViewContext = GetViewContext(); + // Assert.Throws(() => view.SetViewDataX(viewData)); + // } + + // [Test] + // public void RenderModelOf_ContentType1_To_RenderModelOf_ContentType1() + // { + // // It's the same as RenderModel_ContentType1_To_RenderModelOf_ContentType1 + // var content = new ContentType1(null); + // var model = new ContentModel(content); + // var view = new RenderModelOfContentType1TestPage(); + // var viewData = GetViewDataDictionary>(model); + // + // view.ViewData = viewData; + // + // Assert.IsInstanceOf>(view.Model); + // Assert.IsInstanceOf(view.Model.Content); + // } + + // [Test] + // public void RenderModelOf_ContentType2_To_RenderModelOf_ContentType1() + // { + // // Same as RenderModel_ContentType2_To_RenderModelOf_ContentType1 after merge + // var content = new ContentType2(null); + // var model = new ContentModel(content); + // var view = new RenderModelOfContentType1TestPage(); + // var viewData = GetViewDataDictionary>(model); + // + // view.ViewData = viewData; + // + // Assert.IsInstanceOf>(view.Model); + // Assert.IsInstanceOf(view.Model.Content); + // } + + // [Test] + // public void RenderModelOf_ContentType1_To_RenderModelOf_ContentType2() + // { + // // Same issue as RenderModel1_ContentType1_To_ContentType2 + // var content = new ContentType1(null); + // var model = new ContentModel(content); + // var view = new RenderModelOfContentType2TestPage(); + // var viewData = new ViewDataDictionary(model); + // + // view.ViewContext = GetViewContext(); + // Assert.Throws(() => view.SetViewDataX(viewData)); + // } + + #endregion + + #region ContentType To ... + + // [Test] + // public void ContentType1_To_RenderModel() + // { + // // ContentType1 cannot be sat as ViewData because ContentModel is expected + // var content = new ContentType1(null); + // var view = new RenderModelTestPage(); + // + // var viewData = GetViewDataDictionary(content); + // + // view.ViewData = viewData; + // + // Assert.IsInstanceOf(view.Model); + // } + + // [Test] + // public void ContentType1_To_RenderModelOf_ContentType1() + // { + // // same as above but with ContentModel instead of ContentModel + // var content = new ContentType1(null); + // var view = new RenderModelOfContentType1TestPage(); + // + // var viewData = GetViewDataDictionary(content); + // view.ViewData = viewData; + // + // Assert.IsInstanceOf>(view.Model); + // Assert.IsInstanceOf(view.Model.Content); + // } + + // [Test] + // public void ContentType2_To_RenderModelOf_ContentType1() + // { + // // Same as above but with ContentModel + // var content = new ContentType2(null); + // var view = new RenderModelOfContentType1TestPage(); + // var viewData = GetViewDataDictionary(content); + // + // view.ViewData = viewData; + // + // Assert.IsInstanceOf>(view.Model); + // Assert.IsInstanceOf(view.Model.Content); + // } + + // [Test] + // public void ContentType1_To_RenderModelOf_ContentType2() + // { + // // Same as above, and as RenderModel1_ContentType1_To_ContentType2 + // var content = new ContentType1(null); + // var view = new RenderModelOfContentType2TestPage(); + // var viewData = new ViewDataDictionary(content); + // + // view.ViewContext = GetViewContext(); + // Assert.Throws(() =>view.SetViewDataX(viewData)); + // } + + // [Test] + // public void ContentType1_To_ContentType1() + // { + // // Same as ContentType1_To_ContentType1 + // var content = new ContentType1(null); + // var view = new ContentType1TestPage(); + // var viewdata = GetViewDataDictionary(content); + // + // view.ViewData = viewdata; + // + // Assert.IsInstanceOf(view.Model); + // } + + // [Test] + // public void ContentType1_To_ContentType2() + // { + // // Same issue as RenderModel1_ContentType1_To_ContentType2 + // var content = new ContentType1(null); + // var view = new ContentType2TestPage(); + // var viewData = new ViewDataDictionary(content); + // + // view.ViewContext = GetViewContext(); + // Assert.Throws(() => view.SetViewDataX(viewData)); + // } + + // [Test] + // public void ContentType2_To_ContentType1() + // { + // // Will be the same as RenderModel_ContentType2_To_ContentType1 after merge + // var content = new ContentType2(null); + // var view = new ContentType1TestPage(); + // var viewData = new ViewDataDictionary(content); + // + // view.ViewContext = GetViewContext(); + // view.SetViewDataX(viewData); + // + // Assert.IsInstanceOf(view.Model); + // } + + #endregion + + #region Test helpers methods + + private ViewDataDictionary GetViewDataDictionary(object model) + { + var sourceViewDataDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()); + return new ViewDataDictionary(sourceViewDataDictionary, model); + } + + + #endregion + + #region Test elements + + public class ContentType1 : PublishedContentWrapped + { + public ContentType1(IPublishedContent content) : base(content) {} + } + + public class ContentType2 : ContentType1 + { + public ContentType2(IPublishedContent content) : base(content) { } + } + + public class TestPage : UmbracoViewPage + { + public override Task ExecuteAsync() + { + throw new NotImplementedException(); + } + } + + public class RenderModelTestPage : TestPage + { } + + public class ContentType1TestPage : TestPage + { } + + public class ContentType2TestPage : TestPage + { } + + public class RenderModelOfContentType1TestPage : TestPage> + { } + + public class RenderModelOfContentType2TestPage : TestPage> + { } + + #endregion + } +} diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 5d00eebfac..fa7cd02c31 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -239,7 +239,6 @@ - diff --git a/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs b/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs deleted file mode 100644 index c7ab297076..0000000000 --- a/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs +++ /dev/null @@ -1,466 +0,0 @@ -using System; -using System.Globalization; -using System.Web.Mvc; -using System.Web.Routing; -using Microsoft.Extensions.Logging.Abstractions; -using Moq; -using NUnit.Framework; -using Umbraco.Core; -using Umbraco.Core.Cache; -using Umbraco.Core.Configuration.Models; -using Umbraco.Core.Models.PublishedContent; -using Umbraco.Core.Services; -using Umbraco.Tests.Common; -using Umbraco.Tests.LegacyXmlPublishedCache; -using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.Testing; -using Umbraco.Web; -using Umbraco.Web.Composing; -using Umbraco.Web.Models; -using Umbraco.Web.Mvc; -using Umbraco.Web.Routing; -using Umbraco.Web.Security; - -namespace Umbraco.Tests.Web.Mvc -{ - [TestFixture] - [UmbracoTest(WithApplication = true)] - public class UmbracoViewPageTests : UmbracoTestBase - { - private XmlPublishedSnapshotService _service; - - [TearDown] - public override void TearDown() - { - if (_service == null) return; - _service.Dispose(); - _service = null; - } - - #region RenderModel To ... - - [Test] - public void RenderModel_To_RenderModel() - { - var content = new ContentType1(null); - var model = new ContentModel(content); - var view = new RenderModelTestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.AreSame(model, view.Model); - } - - [Test] - public void RenderModel_ContentType1_To_ContentType1() - { - var content = new ContentType1(null); - var model = new ContentModel(content); - var view = new ContentType1TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf(view.Model); - } - - [Test] - public void RenderModel_ContentType2_To_ContentType1() - { - var content = new ContentType2(null); - var model = new ContentModel(content); - var view = new ContentType1TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf(view.Model); - } - - [Test] - public void RenderModel_ContentType1_To_ContentType2() - { - var content = new ContentType1(null); - var model = new ContentModel(content); - var view = new ContentType2TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - - Assert.Throws(() => view.SetViewDataX(viewData)); - } - - [Test] - public void RenderModel_ContentType1_To_RenderModelOf_ContentType1() - { - var content = new ContentType1(null); - var model = new ContentModel(content); - var view = new RenderModelOfContentType1TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf>(view.Model); - Assert.IsInstanceOf(view.Model.Content); - } - - [Test] - public void RenderModel_ContentType2_To_RenderModelOf_ContentType1() - { - var content = new ContentType2(null); - var model = new ContentModel(content); - var view = new RenderModelOfContentType1TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf>(view.Model); - Assert.IsInstanceOf(view.Model.Content); - } - - [Test] - public void RenderModel_ContentType1_To_RenderModelOf_ContentType2() - { - var content = new ContentType1(null); - var model = new ContentModel(content); - var view = new RenderModelOfContentType2TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - - Assert.Throws(() => view.SetViewDataX(viewData)); - } - - #endregion - - #region RenderModelOf To ... - - [Test] - public void RenderModelOf_ContentType1_To_RenderModel() - { - var content = new ContentType1(null); - var model = new ContentModel(content); - var view = new RenderModelTestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.AreSame(model, view.Model); - } - - [Test] - public void RenderModelOf_ContentType1_To_ContentType1() - { - var content = new ContentType1(null); - var model = new ContentModel(content); - var view = new ContentType1TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf(view.Model); - } - - [Test] - public void RenderModelOf_ContentType2_To_ContentType1() - { - var content = new ContentType2(null); - var model = new ContentModel(content); - var view = new ContentType1TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf(view.Model); - } - - [Test] - public void RenderModelOf_ContentType1_To_ContentType2() - { - var content = new ContentType1(null); - var model = new ContentModel(content); - var view = new ContentType2TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - Assert.Throws(() => view.SetViewDataX(viewData)); - } - - [Test] - public void RenderModelOf_ContentType1_To_RenderModelOf_ContentType1() - { - var content = new ContentType1(null); - var model = new ContentModel(content); - var view = new RenderModelOfContentType1TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf>(view.Model); - Assert.IsInstanceOf(view.Model.Content); - } - - [Test] - public void RenderModelOf_ContentType2_To_RenderModelOf_ContentType1() - { - var content = new ContentType2(null); - var model = new ContentModel(content); - var view = new RenderModelOfContentType1TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf>(view.Model); - Assert.IsInstanceOf(view.Model.Content); - } - - [Test] - public void RenderModelOf_ContentType1_To_RenderModelOf_ContentType2() - { - var content = new ContentType1(null); - var model = new ContentModel(content); - var view = new RenderModelOfContentType2TestPage(); - var viewData = new ViewDataDictionary(model); - - view.ViewContext = GetViewContext(); - Assert.Throws(() => view.SetViewDataX(viewData)); - } - - #endregion - - #region ContentType To ... - - [Test] - public void ContentType1_To_RenderModel() - { - var content = new ContentType1(null); - var view = new RenderModelTestPage(); - var viewData = new ViewDataDictionary(content); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf(view.Model); - } - - [Test] - public void ContentType1_To_RenderModelOf_ContentType1() - { - var content = new ContentType1(null); - var view = new RenderModelOfContentType1TestPage(); - var viewData = new ViewDataDictionary(content); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf>(view.Model); - Assert.IsInstanceOf(view.Model.Content); - } - - [Test] - public void ContentType2_To_RenderModelOf_ContentType1() - { - var content = new ContentType2(null); - var view = new RenderModelOfContentType1TestPage(); - var viewData = new ViewDataDictionary(content); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf>(view.Model); - Assert.IsInstanceOf(view.Model.Content); - } - - [Test] - public void ContentType1_To_RenderModelOf_ContentType2() - { - var content = new ContentType1(null); - var view = new RenderModelOfContentType2TestPage(); - var viewData = new ViewDataDictionary(content); - - view.ViewContext = GetViewContext(); - Assert.Throws(() =>view.SetViewDataX(viewData)); - } - - [Test] - public void ContentType1_To_ContentType1() - { - var content = new ContentType1(null); - var view = new ContentType1TestPage(); - var viewData = new ViewDataDictionary(content); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf(view.Model); - } - - [Test] - public void ContentType1_To_ContentType2() - { - var content = new ContentType1(null); - var view = new ContentType2TestPage(); - var viewData = new ViewDataDictionary(content); - - view.ViewContext = GetViewContext(); - Assert.Throws(() => view.SetViewDataX(viewData)); - } - - [Test] - public void ContentType2_To_ContentType1() - { - var content = new ContentType2(null); - var view = new ContentType1TestPage(); - var viewData = new ViewDataDictionary(content); - - view.ViewContext = GetViewContext(); - view.SetViewDataX(viewData); - - Assert.IsInstanceOf(view.Model); - } - - #endregion - - #region Test elements - - public class TestPage : UmbracoViewPage - { - public override void Execute() - { - throw new NotImplementedException(); - } - - public void SetViewDataX(ViewDataDictionary viewData) - { - SetViewData(viewData); - } - } - - public class RenderModelTestPage : TestPage - { } - - public class RenderModelOfContentType1TestPage : TestPage> - { } - - public class RenderModelOfContentType2TestPage : TestPage> - { } - - public class ContentType1TestPage : TestPage - { } - - public class ContentType2TestPage : TestPage - { } - - public class ContentType1 : PublishedContentWrapped - { - public ContentType1(IPublishedContent content) : base(content) {} - } - - public class ContentType2 : ContentType1 - { - public ContentType2(IPublishedContent content) : base(content) { } - } - - #endregion - - #region Test helpers - - ServiceContext GetServiceContext() - { - return TestObjects.GetServiceContextMock(); - } - - ViewContext GetViewContext() - { - var umbracoContext = GetUmbracoContext("/dang", 0); - - var webRoutingSettings = new WebRoutingSettings(); - var publishedRouter = BaseWebTest.CreatePublishedRouter(webRoutingSettings); - var frequest = publishedRouter.CreateRequest(umbracoContext, new Uri("http://localhost/dang")); - - frequest.Culture = CultureInfo.InvariantCulture; - umbracoContext.PublishedRequest = frequest; - - var context = new ViewContext(); - context.RouteData = new RouteData(); - context.RouteData.DataTokens.Add(Core.Constants.Web.UmbracoContextDataToken, umbracoContext); - - return context; - } - - protected IUmbracoContext GetUmbracoContext(string url, int templateId, RouteData routeData = null, bool setSingleton = false) - { - var svcCtx = GetServiceContext(); - - var databaseFactory = TestObjects.GetDatabaseFactoryMock(); - - //var appCtx = new ApplicationContext( - // new DatabaseContext(databaseFactory, logger, Mock.Of(), Mock.Of()), - // svcCtx, - // CacheHelper.CreateDisabledCacheHelper(), - // new ProfilingLogger(logger, Mock.Of())) { /*IsReady = true*/ }; - - var cache = NoAppCache.Instance; - //var provider = new ScopeUnitOfWorkProvider(databaseFactory, new RepositoryFactory(Mock.Of())); - var scopeProvider = TestObjects.GetScopeProvider(NullLoggerFactory.Instance); - var factory = Mock.Of(); - var umbracoContextAccessor = Mock.Of(); - _service = new XmlPublishedSnapshotService(svcCtx, factory, scopeProvider, cache, - null, null, - umbracoContextAccessor, null, null, null, - new TestDefaultCultureAccessor(), - Current.LoggerFactory, TestObjects.GetGlobalSettings(), - TestHelper.GetHostingEnvironment(), - TestHelper.GetHostingEnvironmentLifetime(), - ShortStringHelper, - new SiteDomainHelper(), - Factory.GetInstance(), - null, true, false - ); // no events - - var http = GetHttpContextFactory(url, routeData).HttpContext; - - var httpContextAccessor = TestHelper.GetHttpContextAccessor(http); - var globalSettings = TestObjects.GetGlobalSettings(); - - var ctx = new UmbracoContext( - httpContextAccessor, - _service, - Mock.Of(), - globalSettings, - HostingEnvironment, - new TestVariationContextAccessor(), - UriUtility, - new AspNetCookieManager(httpContextAccessor)); - - //if (setSingleton) - //{ - // UmbracoContext.Current = ctx; - //} - - return ctx; - } - - protected FakeHttpContextFactory GetHttpContextFactory(string url, RouteData routeData = null) - { - var factory = routeData != null - ? new FakeHttpContextFactory(url, routeData) - : new FakeHttpContextFactory(url); - - return factory; - } - - #endregion - } -}