Adds tests for settings and changes to strongly typed guid

This commit is contained in:
Shannon
2020-07-21 16:24:48 +10:00
parent a194d1db4a
commit 5bc80e2d84
4 changed files with 75 additions and 28 deletions

View File

@@ -18,10 +18,14 @@ namespace Umbraco.Tests.PropertyEditors
[TestFixture]
public class BlockListPropertyValueConverterTests
{
private readonly Guid Key1 = Guid.NewGuid();
private readonly Guid Key2 = Guid.NewGuid();
private readonly string Alias1 = "Test1";
private readonly string Alias2 = "Test2";
private readonly Guid ContentKey1 = Guid.NewGuid();
private readonly Guid ContentKey2 = Guid.NewGuid();
private const string ContentAlias1 = "Test1";
private const string ContentAlias2 = "Test2";
private readonly Guid SettingKey1 = Guid.NewGuid();
private readonly Guid SettingKey2 = Guid.NewGuid();
private const string SettingAlias1 = "Setting1";
private const string SettingAlias2 = "Setting2";
/// <summary>
/// Setup mocks for IPublishedSnapshotAccessor
@@ -31,15 +35,25 @@ namespace Umbraco.Tests.PropertyEditors
{
var test1ContentType = Mock.Of<IPublishedContentType2>(x =>
x.IsElement == true
&& x.Key == Key1
&& x.Alias == Alias1);
&& x.Key == ContentKey1
&& x.Alias == ContentAlias1);
var test2ContentType = Mock.Of<IPublishedContentType2>(x =>
x.IsElement == true
&& x.Key == Key2
&& x.Alias == Alias2);
&& x.Key == ContentKey2
&& x.Alias == ContentAlias2);
var test3ContentType = Mock.Of<IPublishedContentType2>(x =>
x.IsElement == true
&& x.Key == SettingKey1
&& x.Alias == SettingAlias1);
var test4ContentType = Mock.Of<IPublishedContentType2>(x =>
x.IsElement == true
&& x.Key == SettingKey2
&& x.Alias == SettingAlias2);
var contentCache = new Mock<IPublishedContentCache2>();
contentCache.Setup(x => x.GetContentType(Key1)).Returns(test1ContentType);
contentCache.Setup(x => x.GetContentType(Key2)).Returns(test2ContentType);
contentCache.Setup(x => x.GetContentType(ContentKey1)).Returns(test1ContentType);
contentCache.Setup(x => x.GetContentType(ContentKey2)).Returns(test2ContentType);
contentCache.Setup(x => x.GetContentType(SettingKey1)).Returns(test3ContentType);
contentCache.Setup(x => x.GetContentType(SettingKey2)).Returns(test4ContentType);
var publishedSnapshot = Mock.Of<IPublishedSnapshot>(x => x.Content == contentCache.Object);
var publishedSnapshotAccessor = Mock.Of<IPublishedSnapshotAccessor>(x => x.PublishedSnapshot == publishedSnapshot);
return publishedSnapshotAccessor;
@@ -60,11 +74,13 @@ namespace Umbraco.Tests.PropertyEditors
Blocks = new[] {
new BlockListConfiguration.BlockConfiguration
{
Key = Key1
ContentElementTypeKey = ContentKey1,
SettingsElementTypeKey = SettingKey2
},
new BlockListConfiguration.BlockConfiguration
{
Key = Key2
ContentElementTypeKey = ContentKey2,
SettingsElementTypeKey = SettingKey1
}
}
};
@@ -74,7 +90,7 @@ namespace Umbraco.Tests.PropertyEditors
Blocks = new[] {
new BlockListConfiguration.BlockConfiguration
{
Key = Key1
ContentElementTypeKey = ContentKey1
}
}
};
@@ -227,7 +243,7 @@ data: []}";
},
contentData: [
{
'contentTypeKey': '" + Key1 + @"',
'contentTypeKey': '" + ContentKey1 + @"',
'key': '1304E1DD-0000-4396-84FE-8A399231CB3D'
}
]
@@ -259,7 +275,7 @@ data: []}";
},
contentData: [
{
'contentTypeKey': '" + Key1 + @"',
'contentTypeKey': '" + ContentKey1 + @"',
'udi': 'umb://element/1304E1DDAC87439684FE8A399231CB3D'
}
]
@@ -290,43 +306,63 @@ data: []}";
layout: {
'" + Constants.PropertyEditors.Aliases.BlockList + @"': [
{
'contentUdi': 'umb://element/1304E1DDAC87439684FE8A399231CB3D'
'contentUdi': 'umb://element/1304E1DDAC87439684FE8A399231CB3D',
'settingsUdi': 'umb://element/1F613E26CE274898908A561437AF5100'
},
{
'contentUdi': 'umb://element/0A4A416E547D464FABCC6F345C17809A',
'settingsUdi': null
'settingsUdi': 'umb://element/63027539B0DB45E7B70459762D4E83DD'
}
]
},
contentData: [
contentData: [
{
'contentTypeKey': '" + Key1 + @"',
'contentTypeKey': '" + ContentKey1 + @"',
'udi': 'umb://element/1304E1DDAC87439684FE8A399231CB3D'
},
{
'contentTypeKey': '" + Key2 + @"',
'contentTypeKey': '" + ContentKey2 + @"',
'udi': 'umb://element/E05A034704424AB3A520E048E6197E79'
},
{
'contentTypeKey': '" + Key2 + @"',
'contentTypeKey': '" + ContentKey2 + @"',
'udi': 'umb://element/0A4A416E547D464FABCC6F345C17809A'
}
]
],
settingsData: [
{
'contentTypeKey': '" + SettingKey1 + @"',
'udi': 'umb://element/63027539B0DB45E7B70459762D4E83DD'
},
{
'contentTypeKey': '" + SettingKey2 + @"',
'udi': 'umb://element/1F613E26CE274898908A561437AF5100'
},
{
'contentTypeKey': '" + SettingKey2 + @"',
'udi': 'umb://element/BCF4BA3DA40C496C93EC58FAC85F18B9'
}
],
}";
var converted = editor.ConvertIntermediateToObject(publishedElement, propertyType, PropertyCacheLevel.None, json, false) as BlockListModel;
Assert.IsNotNull(converted);
Assert.AreEqual(3, converted.ContentData.Count());
Assert.AreEqual(3, converted.SettingsData.Count());
Assert.AreEqual(2, converted.Layout.Count());
var item0 = converted.Layout.ElementAt(0);
Assert.AreEqual(Guid.Parse("1304E1DD-AC87-4396-84FE-8A399231CB3D"), item0.Content.Key);
Assert.AreEqual("Test1", item0.Content.ContentType.Alias);
Assert.AreEqual(Guid.Parse("1F613E26CE274898908A561437AF5100"), item0.Settings.Key);
Assert.AreEqual("Setting2", item0.Settings.ContentType.Alias);
var item1 = converted.Layout.ElementAt(1);
Assert.AreEqual(Guid.Parse("0A4A416E-547D-464F-ABCC-6F345C17809A"), item1.Content.Key);
Assert.AreEqual("Test2", item1.Content.ContentType.Alias);
Assert.AreEqual(Guid.Parse("63027539B0DB45E7B70459762D4E83DD"), item1.Settings.Key);
Assert.AreEqual("Setting1", item1.Settings.ContentType.Alias);
}

View File

@@ -710,6 +710,7 @@
},
// private
// TODO: Then this can just be a method in the outer scope
_createSettingsEntry: function(elementTypeKey) {
var settings = {
contentTypeKey: elementTypeKey,
@@ -718,7 +719,9 @@
this.value.settingsData.push(settings);
return settings.udi;
},
// private
// TODO: Then this can just be a method in the outer scope
_getSettingsByUdi: function(udi) {
return this.value.settingsData.find(entry => entry.udi === udi) || null;
},

View File

@@ -27,11 +27,12 @@ namespace Umbraco.Web.PropertyEditors
[JsonProperty("thumbnail")]
public string Thumbnail { get; set; }
// TODO: This is named inconsistently in JS but renaming it needs to be done in quite a lot of places, this should be contentElementTypeKey
[JsonProperty("contentTypeKey")]
public Guid Key { get; set; }
public Guid ContentElementTypeKey { get; set; }
[JsonProperty("settingsElementTypeKey")]
public string SettingsElementTypeKey { get; set; }
public Guid? SettingsElementTypeKey { get; set; }
[JsonProperty("view")]
public string View { get; set; }

View File

@@ -51,7 +51,7 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
{
var configuration = propertyType.DataType.ConfigurationAs<BlockListConfiguration>();
var contentTypes = configuration.Blocks;
var contentTypeMap = contentTypes.ToDictionary(x => x.Key);
var contentElementTypeMap = contentTypes.ToDictionary(x => x.ContentElementTypeKey);
var contentPublishedElements = new Dictionary<Guid, IPublishedElement>();
var settingsPublishedElements = new Dictionary<Guid, IPublishedElement>();
@@ -100,12 +100,19 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
if (!contentData.ContentType.TryGetKey(out var contentTypeKey))
throw new InvalidOperationException("The content type was not of type " + typeof(IPublishedContentType2));
if (!contentTypeMap.TryGetValue(contentTypeKey, out var blockConfig))
if (!contentElementTypeMap.TryGetValue(contentTypeKey, out var blockConfig))
continue;
// this can happen if they have a settings type, save content, remove the settings type, and display the front-end page before saving the content again
if (settingsData != null && string.IsNullOrWhiteSpace(blockConfig.SettingsElementTypeKey))
settingsData = null;
// we also ensure that the content type's match since maybe the settings type has been changed after this has been persisted.
if (settingsData != null)
{
if (!settingsData.ContentType.TryGetKey(out var settingsElementTypeKey))
throw new InvalidOperationException("The settings element type was not of type " + typeof(IPublishedContentType2));
if (!blockConfig.SettingsElementTypeKey.HasValue || settingsElementTypeKey != blockConfig.SettingsElementTypeKey)
settingsData = null;
}
var layoutRef = new BlockListLayoutReference(contentGuidUdi, contentData, settingGuidUdi, settingsData);
layout.Add(layoutRef);