Fixes issue that you could not remove a property group, fixes issue that the inherited flag during mapping wasn't set on a standalone parent property group, updated/created tests to support.
This commit is contained in:
@@ -69,7 +69,7 @@ namespace Umbraco.Tests.Models.Mapping
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ContentTypeDisplay_To_PropertyType()
|
||||
public void PropertyTypeDisplay_To_PropertyType()
|
||||
{
|
||||
// setup the mocks to return the data we want to test against...
|
||||
|
||||
@@ -207,6 +207,33 @@ namespace Umbraco.Tests.Models.Mapping
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ContentTypeDisplay_With_Composition_To_IContentType()
|
||||
{
|
||||
//Arrange
|
||||
|
||||
// setup the mocks to return the data we want to test against...
|
||||
|
||||
_dataTypeService.Setup(x => x.GetDataTypeDefinitionById(It.IsAny<int>()))
|
||||
.Returns(Mock.Of<IDataTypeDefinition>(
|
||||
definition =>
|
||||
definition.Id == 555
|
||||
&& definition.PropertyEditorAlias == "myPropertyType"
|
||||
&& definition.DatabaseType == DataTypeDatabaseType.Nvarchar));
|
||||
|
||||
|
||||
var display = CreateCompositionContentTypeDisplay();
|
||||
|
||||
//Act
|
||||
|
||||
var result = Mapper.Map<IContentType>(display);
|
||||
|
||||
//Assert
|
||||
|
||||
//TODO: Now we need to assert all of the more complicated parts
|
||||
Assert.AreEqual(display.Groups.Count(x => x.Inherited == false), result.PropertyGroups.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IContentType_To_ContentTypeDisplay()
|
||||
{
|
||||
@@ -306,6 +333,15 @@ namespace Umbraco.Tests.Models.Mapping
|
||||
});
|
||||
MockedContentTypes.EnsureAllIds(ctMain, 8888);
|
||||
var ctChild1 = MockedContentTypes.CreateSimpleContentType("child1", "Child 1", ctMain, true);
|
||||
ctChild1.AddPropertyType(new PropertyType(Constants.PropertyEditors.TextboxAlias, DataTypeDatabaseType.Ntext)
|
||||
{
|
||||
Alias = "someProperty",
|
||||
Name = "Some Property",
|
||||
Description = "",
|
||||
Mandatory = false,
|
||||
SortOrder = 1,
|
||||
DataTypeDefinitionId = -88
|
||||
}, "Another tab");
|
||||
MockedContentTypes.EnsureAllIds(ctChild1, 7777);
|
||||
var contentType = MockedContentTypes.CreateSimpleContentType("child2", "Child 2", ctChild1, true, "CustomGroup");
|
||||
//not assigned to tab
|
||||
@@ -349,7 +385,7 @@ namespace Umbraco.Tests.Models.Mapping
|
||||
Assert.AreEqual(allPropertyIdsMapped.Count(), allSourcePropertyIds.Count());
|
||||
Assert.IsTrue(allPropertyIdsMapped.ContainsAll(allSourcePropertyIds));
|
||||
|
||||
Assert.AreEqual(1, result.Groups.Count(x => x.ParentTabContentTypes.Any()));
|
||||
Assert.AreEqual(2, result.Groups.Count(x => x.ParentTabContentTypes.Any()));
|
||||
Assert.IsTrue(result.Groups.SelectMany(x => x.ParentTabContentTypes).ContainsAll(new[] {ctMain.Id, ctChild1.Id}));
|
||||
|
||||
Assert.AreEqual(contentType.AllowedTemplates.Count(), result.AllowedTemplates.Count());
|
||||
@@ -437,6 +473,113 @@ namespace Umbraco.Tests.Models.Mapping
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private ContentTypeDisplay CreateCompositionContentTypeDisplay()
|
||||
{
|
||||
return new ContentTypeDisplay
|
||||
{
|
||||
Alias = "test",
|
||||
AllowAsRoot = true,
|
||||
AllowedTemplates = new List<EntityBasic>
|
||||
{
|
||||
new EntityBasic
|
||||
{
|
||||
Id = 555,
|
||||
Alias = "template1",
|
||||
Name = "Template1"
|
||||
},
|
||||
new EntityBasic
|
||||
{
|
||||
Id = 556,
|
||||
Alias = "template2",
|
||||
Name = "Template2"
|
||||
}
|
||||
},
|
||||
AllowedContentTypes = new[] { 666, 667 },
|
||||
AvailableCompositeContentTypes = new List<EntityBasic>(),
|
||||
DefaultTemplate = new EntityBasic() { Alias = "test" },
|
||||
Description = "hello world",
|
||||
Icon = "tree-icon",
|
||||
Id = 1234,
|
||||
Key = new Guid("8A60656B-3866-46AB-824A-48AE85083070"),
|
||||
Name = "My content type",
|
||||
Path = "-1,1234",
|
||||
ParentId = -1,
|
||||
Thumbnail = "tree-thumb",
|
||||
IsContainer = true,
|
||||
Groups = new List<PropertyGroupDisplay>()
|
||||
{
|
||||
new PropertyGroupDisplay
|
||||
{
|
||||
Id = 987,
|
||||
Name = "Tab 1",
|
||||
ParentGroupId = -1,
|
||||
SortOrder = 0,
|
||||
Inherited = false,
|
||||
Properties = new List<PropertyTypeDisplay>
|
||||
{
|
||||
new PropertyTypeDisplay
|
||||
{
|
||||
Alias = "property1",
|
||||
Description = "this is property 1",
|
||||
Inherited = false,
|
||||
Label = "Property 1",
|
||||
Validation = new PropertyTypeValidation
|
||||
{
|
||||
Mandatory = false,
|
||||
Pattern = ""
|
||||
},
|
||||
Editor = "myPropertyType",
|
||||
Value = "value 1",
|
||||
//View = ??? - isn't this the same as editor?
|
||||
Config = new Dictionary<string, object>
|
||||
{
|
||||
{"item1", "value1"},
|
||||
{"item2", "value2"}
|
||||
},
|
||||
SortOrder = 0,
|
||||
DataTypeId = 555,
|
||||
View = "blah"
|
||||
}
|
||||
}
|
||||
},
|
||||
new PropertyGroupDisplay
|
||||
{
|
||||
Id = 894,
|
||||
Name = "Tab 2",
|
||||
ParentGroupId = -1,
|
||||
SortOrder = 0,
|
||||
Inherited = true,
|
||||
Properties = new List<PropertyTypeDisplay>
|
||||
{
|
||||
new PropertyTypeDisplay
|
||||
{
|
||||
Alias = "parentProperty",
|
||||
Description = "this is a property from the parent",
|
||||
Inherited = true,
|
||||
Label = "Parent property",
|
||||
Validation = new PropertyTypeValidation
|
||||
{
|
||||
Mandatory = false,
|
||||
Pattern = ""
|
||||
},
|
||||
Editor = "myPropertyType",
|
||||
Value = "parent value",
|
||||
//View = ??? - isn't this the same as editor?
|
||||
Config = new Dictionary<string, object>
|
||||
{
|
||||
{"item1", "value1"}
|
||||
},
|
||||
SortOrder = 0,
|
||||
DataTypeId = 555,
|
||||
View = "blah"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
@@ -49,15 +49,17 @@ namespace Umbraco.Web.Models.Mapping
|
||||
//mapped in aftermap
|
||||
.ForMember(dto => dto.AllowedContentTypes, expression => expression.Ignore())
|
||||
.ForMember(dto => dto.AllowedTemplates, expression => expression.Ignore())
|
||||
|
||||
|
||||
|
||||
//ignore, we'll do this in after map
|
||||
.ForMember(dto => dto.PropertyGroups, expression => expression.Ignore())
|
||||
.AfterMap((source, dest) =>
|
||||
{
|
||||
var addedProperties = new List<string>();
|
||||
//get all properties from groups that are not generic properties (-666 id)
|
||||
foreach (var groupDisplay in source.Groups.Where(x => x.Id != -666))
|
||||
|
||||
//get all properties from groups that are not generic properties or inhertied (-666 id)
|
||||
var selfNonGenericGroups = source.Groups.Where(x => x.Inherited == false && x.Id != -666).ToArray();
|
||||
|
||||
foreach (var groupDisplay in selfNonGenericGroups)
|
||||
{
|
||||
//use underlying logic to add the property group which should wire most things up for us
|
||||
dest.AddPropertyGroup(groupDisplay.Name);
|
||||
@@ -70,12 +72,19 @@ namespace Umbraco.Web.Models.Mapping
|
||||
dest.AddPropertyType(Mapper.Map<PropertyType>(propertyTypeDisplay), groupDisplay.Name);
|
||||
addedProperties.Add(propertyTypeDisplay.Alias);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Groups to remove
|
||||
var groupsToRemove = dest.PropertyGroups.Select(x => x.Name).Except(selfNonGenericGroups.Select(x => x.Name)).ToArray();
|
||||
foreach (var toRemove in groupsToRemove)
|
||||
{
|
||||
dest.RemovePropertyGroup(toRemove);
|
||||
}
|
||||
|
||||
//add generic properties
|
||||
var genericProperties = source.Groups.FirstOrDefault(x => x.Id == -666);
|
||||
if(genericProperties != null){
|
||||
if(genericProperties != null)
|
||||
{
|
||||
foreach (var propertyTypeDisplay in genericProperties.Properties.Where(x => x.Inherited == false))
|
||||
{
|
||||
dest.AddPropertyType(Mapper.Map<PropertyType>(propertyTypeDisplay));
|
||||
|
||||
@@ -58,6 +58,10 @@ namespace Umbraco.Web.Models.Mapping
|
||||
{
|
||||
Id = tab.Id, Inherited = false, Name = tab.Name, SortOrder = tab.SortOrder, ContentTypeId = source.Id
|
||||
};
|
||||
|
||||
if (tab.ParentId.HasValue)
|
||||
group.ParentGroupId = tab.ParentId.Value;
|
||||
|
||||
group.Properties = MapProperties(tab.PropertyTypes, source, tab.Id, false);
|
||||
groups.Add(tab.Id, group);
|
||||
}
|
||||
@@ -73,7 +77,7 @@ namespace Umbraco.Web.Models.Mapping
|
||||
|
||||
var group = new PropertyGroupDisplay()
|
||||
{
|
||||
Id = tab.Id, Inherited = false, Name = tab.Name, SortOrder = tab.SortOrder, ContentTypeId = composition.Id,
|
||||
Id = tab.Id, Inherited = true, Name = tab.Name, SortOrder = tab.SortOrder, ContentTypeId = composition.Id,
|
||||
ParentTabContentTypes = new[] {composition.Id},
|
||||
ParentTabContentTypeNames = new[] {composition.Name}
|
||||
};
|
||||
@@ -87,9 +91,7 @@ namespace Umbraco.Web.Models.Mapping
|
||||
|
||||
//process generic properties assigned to this content item (without a group)
|
||||
|
||||
//NOTE: -666 is just a thing that is checked for on the front-end... I'm not a fan of this for the mapping
|
||||
// since this is just for front-end, this could probably be updated to be -666 in the controller which is associated
|
||||
// with giving the front-end it's data
|
||||
//NOTE: -666 is just a thing that is checked during mapping the other direction, it's a 'special' id
|
||||
|
||||
var entityGenericProperties = source.PropertyTypes.Where(x => x.PropertyGroupId == null);
|
||||
genericProperties.AddRange(MapProperties(entityGenericProperties, source, -666, false));
|
||||
|
||||
Reference in New Issue
Block a user