From 9a2aa8fff0c47aa266a358b0697f896a9943536d Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 16 Jul 2018 20:24:49 +1000 Subject: [PATCH] Fixes up tests --- .../Mapping/ContentWebModelMappingTests.cs | 197 ++++++++++-------- .../Models/ContentEditing/ContentItemBasic.cs | 2 +- .../ContentEditing/ContentVariationDisplay.cs | 2 +- ...edContentItem.cs => IContentProperties.cs} | 4 +- .../Models/ContentEditing/ITabbedContent.cs | 11 + .../ContentEditing/TabbedContentItem.cs | 2 +- .../Models/Mapping/ContentMapperProfile.cs | 4 + .../Mapping/TabsAndPropertiesResolver.cs | 2 +- src/Umbraco.Web/Umbraco.Web.csproj | 3 +- 9 files changed, 138 insertions(+), 89 deletions(-) rename src/Umbraco.Web/Models/ContentEditing/{ITabbedContentItem.cs => IContentProperties.cs} (54%) create mode 100644 src/Umbraco.Web/Models/ContentEditing/ITabbedContent.cs diff --git a/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs b/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs index ed06f224d6..7075e33fdd 100644 --- a/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs +++ b/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs @@ -107,102 +107,111 @@ namespace Umbraco.Tests.Models.Mapping AssertContentItem(result, content); } - //[Test] - //public void To_Display_Model() - //{ - // var contentType = MockedContentTypes.CreateSimpleContentType(); - // var content = MockedContent.CreateSimpleContent(contentType); - // FixUsers(content); + [Test] + public void To_Display_Model() + { + var contentType = MockedContentTypes.CreateSimpleContentType(); + var content = MockedContent.CreateSimpleContent(contentType); + FixUsers(content); - // // need ids for tabs - // var id = 1; - // foreach (var g in content.PropertyGroups) - // g.Id = id++; + // need ids for tabs + var id = 1; + foreach (var g in content.PropertyGroups) + g.Id = id++; - // var result = Mapper.Map(content); + var result = Mapper.Map(content); - // AssertBasics(result, content); + AssertBasics(result, content); - // foreach (var p in content.Properties) - // AssertDisplayProperty(result, p); + var invariantContent = result.ContentVariants.First(); + foreach (var p in content.Properties) + { + AssertBasicProperty(invariantContent, p); + AssertDisplayProperty(invariantContent, p); + } - // Assert.AreEqual(content.PropertyGroups.Count(), result.Tabs.Count()); - // Assert.IsTrue(result.Tabs.First().IsActive); - // Assert.IsTrue(result.Tabs.Except(new[] {result.Tabs.First()}).All(x => x.IsActive == false)); - //} + Assert.AreEqual(content.PropertyGroups.Count(), invariantContent.Tabs.Count()); + Assert.IsTrue(invariantContent.Tabs.First().IsActive); + Assert.IsTrue(invariantContent.Tabs.Except(new[] { invariantContent.Tabs.First() }).All(x => x.IsActive == false)); + } - //[Test] - //public void To_Display_Model_No_Tabs() - //{ - // var contentType = MockedContentTypes.CreateSimpleContentType(); - // contentType.PropertyGroups.Clear(); - // var content = new Content("Home", -1, contentType) { Level = 1, SortOrder = 1, CreatorId = 0, WriterId = 0 }; + [Test] + public void To_Display_Model_No_Tabs() + { + var contentType = MockedContentTypes.CreateSimpleContentType(); + contentType.PropertyGroups.Clear(); + var content = new Content("Home", -1, contentType) { Level = 1, SortOrder = 1, CreatorId = 0, WriterId = 0 }; - // var result = Mapper.Map(content); + var result = Mapper.Map(content); - // AssertBasics(result, content); - // foreach (var p in content.Properties) - // { - // AssertDisplayProperty(result, p); - // } - // Assert.AreEqual(content.PropertyGroups.Count(), result.Tabs.Count()); - //} + AssertBasics(result, content); - //[Test] - //public void To_Display_Model_With_Non_Grouped_Properties() - //{ - // var idSeed = 1; - // var contentType = MockedContentTypes.CreateSimpleContentType(); - // //add non-grouped properties - // contentType.AddPropertyType(new PropertyType(Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Ntext, "nonGrouped1") { Name = "Non Grouped 1", Description = "", Mandatory = false, SortOrder = 1, DataTypeId = -88 }); - // contentType.AddPropertyType(new PropertyType(Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Ntext, "nonGrouped2") { Name = "Non Grouped 2", Description = "", Mandatory = false, SortOrder = 1, DataTypeId = -88 }); - // //set ids or it wont work - // contentType.Id = idSeed; - // foreach (var p in contentType.PropertyTypes) - // { - // p.Id = idSeed; - // idSeed++; - // } - // var content = MockedContent.CreateSimpleContent(contentType); - // FixUsers(content); + var invariantContent = result.ContentVariants.First(); + foreach (var p in content.Properties) + { + AssertBasicProperty(invariantContent, p); + AssertDisplayProperty(invariantContent, p); + } + + Assert.AreEqual(content.PropertyGroups.Count(), invariantContent.Tabs.Count()); + } - // foreach (var p in content.Properties) - // { - // p.Id = idSeed; - // idSeed++; - // } - // //need ids for tabs - // var id = 1; - // foreach (var g in content.PropertyGroups) - // { - // g.Id = id; - // id++; - // } - // //ensure that nothing is marked as dirty - // contentType.ResetDirtyProperties(false); - // //ensure that nothing is marked as dirty - // content.ResetDirtyProperties(false); + [Test] + public void To_Display_Model_With_Non_Grouped_Properties() + { + var idSeed = 1; + var contentType = MockedContentTypes.CreateSimpleContentType(); + //add non-grouped properties + contentType.AddPropertyType(new PropertyType(Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Ntext, "nonGrouped1") { Name = "Non Grouped 1", Description = "", Mandatory = false, SortOrder = 1, DataTypeId = -88 }); + contentType.AddPropertyType(new PropertyType(Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Ntext, "nonGrouped2") { Name = "Non Grouped 2", Description = "", Mandatory = false, SortOrder = 1, DataTypeId = -88 }); + //set ids or it wont work + contentType.Id = idSeed; + foreach (var p in contentType.PropertyTypes) + { + p.Id = idSeed; + idSeed++; + } + var content = MockedContent.CreateSimpleContent(contentType); + FixUsers(content); - // var result = Mapper.Map(content); + foreach (var p in content.Properties) + { + p.Id = idSeed; + idSeed++; + } + //need ids for tabs + var id = 1; + foreach (var g in content.PropertyGroups) + { + g.Id = id; + id++; + } + //ensure that nothing is marked as dirty + contentType.ResetDirtyProperties(false); + //ensure that nothing is marked as dirty + content.ResetDirtyProperties(false); - // AssertBasics(result, content); - // foreach (var p in content.Properties) - // { - // AssertDisplayProperty(result, p); - // } - // Assert.AreEqual(content.PropertyGroups.Count(), result.Tabs.Count() - 1); - // Assert.IsTrue(result.Tabs.Any(x => x.Label == Current.Services.TextService.Localize("general/properties"))); - // Assert.AreEqual(2, result.Tabs.Where(x => x.Label == Current.Services.TextService.Localize("general/properties")).SelectMany(x => x.Properties.Where(p => p.Alias.StartsWith("_umb_") == false)).Count()); - //} + var result = Mapper.Map(content); + + AssertBasics(result, content); + + var invariantContent = result.ContentVariants.First(); + foreach (var p in content.Properties) + { + AssertBasicProperty(invariantContent, p); + AssertDisplayProperty(invariantContent, p); + } + + Assert.AreEqual(content.PropertyGroups.Count(), invariantContent.Tabs.Count() - 1); + Assert.IsTrue(invariantContent.Tabs.Any(x => x.Label == Current.Services.TextService.Localize("general/properties"))); + Assert.AreEqual(2, invariantContent.Tabs.Where(x => x.Label == Current.Services.TextService.Localize("general/properties")).SelectMany(x => x.Properties.Where(p => p.Alias.StartsWith("_umb_") == false)).Count()); + } #region Assertions - private void AssertDisplayProperty(ContentItemBasic result, Property p) - where T : ContentPropertyDisplay - where TPersisted : IContentBase + private void AssertDisplayProperty(ITabbedContent result, Property p) + where T : ContentPropertyBasic { - AssertBasicProperty(result, p); - var pDto = result.Properties.SingleOrDefault(x => x.Alias == p.Alias); Assert.IsNotNull(pDto); @@ -213,6 +222,31 @@ namespace Umbraco.Tests.Models.Mapping } + private void AssertBasics(ContentItemDisplay result, IContent content) + { + Assert.AreEqual(content.Id, result.Id); + + var ownerId = content.CreatorId; + if (ownerId != 0) + { + Assert.IsNotNull(result.Owner); + Assert.AreEqual(Constants.Security.SuperUserId, result.Owner.UserId); + Assert.AreEqual("Administrator", result.Owner.Name); + } + else + { + Assert.IsNull(result.Owner); // because, 0 is no user + } + + var invariantContent = result.ContentVariants.First(); + + Assert.AreEqual(content.ParentId, result.ParentId); + Assert.AreEqual(content.UpdateDate, invariantContent.UpdateDate); + Assert.AreEqual(content.CreateDate, invariantContent.CreateDate); + Assert.AreEqual(content.Name, invariantContent.Name); + Assert.AreEqual(content.Properties.Count(), invariantContent.Properties.Count(x => x.Alias.StartsWith("_umb_") == false)); + } + private void AssertBasics(ContentItemBasic result, TPersisted content) where T : ContentPropertyBasic where TPersisted : IContentBase @@ -238,9 +272,8 @@ namespace Umbraco.Tests.Models.Mapping Assert.AreEqual(content.Properties.Count(), result.Properties.Count(x => x.Alias.StartsWith("_umb_") == false)); } - private void AssertBasicProperty(ContentItemBasic result, Property p) + private void AssertBasicProperty(IContentProperties result, Property p) where T : ContentPropertyBasic - where TPersisted : IContentBase { var pDto = result.Properties.SingleOrDefault(x => x.Alias == p.Alias); Assert.IsNotNull(pDto); diff --git a/src/Umbraco.Web/Models/ContentEditing/ContentItemBasic.cs b/src/Umbraco.Web/Models/ContentEditing/ContentItemBasic.cs index 9471e3c4d7..5b4f710a28 100644 --- a/src/Umbraco.Web/Models/ContentEditing/ContentItemBasic.cs +++ b/src/Umbraco.Web/Models/ContentEditing/ContentItemBasic.cs @@ -66,7 +66,7 @@ namespace Umbraco.Web.Models.ContentEditing /// A model representing a basic content item with properties /// [DataContract(Name = "content", Namespace = "")] - public class ContentItemBasic : ContentItemBasic + public class ContentItemBasic : ContentItemBasic, IContentProperties where T : ContentPropertyBasic where TPersisted : IContentBase { diff --git a/src/Umbraco.Web/Models/ContentEditing/ContentVariationDisplay.cs b/src/Umbraco.Web/Models/ContentEditing/ContentVariationDisplay.cs index 247f88d203..e6f32bae35 100644 --- a/src/Umbraco.Web/Models/ContentEditing/ContentVariationDisplay.cs +++ b/src/Umbraco.Web/Models/ContentEditing/ContentVariationDisplay.cs @@ -12,7 +12,7 @@ namespace Umbraco.Web.Models.ContentEditing /// Represents the variant info for a content item /// [DataContract(Name = "contentVariant", Namespace = "")] - public class ContentVariantDisplay : ITabbedContentItem + public class ContentVariantDisplay : ITabbedContent { public ContentVariantDisplay() { diff --git a/src/Umbraco.Web/Models/ContentEditing/ITabbedContentItem.cs b/src/Umbraco.Web/Models/ContentEditing/IContentProperties.cs similarity index 54% rename from src/Umbraco.Web/Models/ContentEditing/ITabbedContentItem.cs rename to src/Umbraco.Web/Models/ContentEditing/IContentProperties.cs index 871b9a2063..409c758536 100644 --- a/src/Umbraco.Web/Models/ContentEditing/ITabbedContentItem.cs +++ b/src/Umbraco.Web/Models/ContentEditing/IContentProperties.cs @@ -2,9 +2,9 @@ namespace Umbraco.Web.Models.ContentEditing { - public interface ITabbedContentItem where T : ContentPropertyBasic + public interface IContentProperties + where T : ContentPropertyBasic { IEnumerable Properties { get; set; } - IEnumerable> Tabs { get; set; } } } diff --git a/src/Umbraco.Web/Models/ContentEditing/ITabbedContent.cs b/src/Umbraco.Web/Models/ContentEditing/ITabbedContent.cs new file mode 100644 index 0000000000..00cc49aecb --- /dev/null +++ b/src/Umbraco.Web/Models/ContentEditing/ITabbedContent.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace Umbraco.Web.Models.ContentEditing +{ + + public interface ITabbedContent : IContentProperties + where T : ContentPropertyBasic + { + IEnumerable> Tabs { get; set; } + } +} diff --git a/src/Umbraco.Web/Models/ContentEditing/TabbedContentItem.cs b/src/Umbraco.Web/Models/ContentEditing/TabbedContentItem.cs index 89057bba05..ccae4906b4 100644 --- a/src/Umbraco.Web/Models/ContentEditing/TabbedContentItem.cs +++ b/src/Umbraco.Web/Models/ContentEditing/TabbedContentItem.cs @@ -7,7 +7,7 @@ using Umbraco.Core.Models; namespace Umbraco.Web.Models.ContentEditing { - public abstract class TabbedContentItem : ContentItemBasic, ITabbedContentItem where T : ContentPropertyBasic + public abstract class TabbedContentItem : ContentItemBasic, ITabbedContent where T : ContentPropertyBasic where TPersisted : IContentBase { protected TabbedContentItem() diff --git a/src/Umbraco.Web/Models/Mapping/ContentMapperProfile.cs b/src/Umbraco.Web/Models/Mapping/ContentMapperProfile.cs index 684ee13581..b50df61eb5 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentMapperProfile.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentMapperProfile.cs @@ -72,6 +72,10 @@ namespace Umbraco.Web.Models.Mapping CreateMap() .ForMember(dest => dest.PublishDate, opt => opt.MapFrom(src => src.PublishDate)) .ForMember(dest => dest.Properties, opt => opt.Ignore()) + .ForMember(dest => dest.Exists, opt => opt.Ignore()) + .ForMember(dest => dest.Segment, opt => opt.Ignore()) + .ForMember(dest => dest.Language, opt => opt.Ignore()) + .ForMember(dest => dest.IsEdited, opt => opt.Ignore()) .ForMember(dest => dest.Tabs, opt => opt.ResolveUsing(tabsAndPropertiesResolver)) .AfterMap((content, display) => { diff --git a/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs b/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs index a92527823c..1b5da1a398 100644 --- a/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs @@ -36,7 +36,7 @@ namespace Umbraco.Web.Models.Mapping /// /// internal static void AddListView( - ITabbedContentItem display, + ITabbedContent display, string contentTypeAlias, string entityType, IDataTypeService dataTypeService, ILocalizedTextService localizedTextService) { diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index f54509ee5d..158137724f 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -221,7 +221,8 @@ - + +