Block level variance (#17120)
* Block level variance - initial commit * Remove TODOs * Only convert RTEs with blocks * Fix JSON paths for block level property validation * Rename Properties to Values * Correct the JSON path of block level validation errors * Make it possible to skip content migration + ensure backwards compat for the new block format * Partial culture variance publishing at property level * UDI to key conversion for block editors - draft, WIP, do NOT merge 😄 (#16970) * Convert block UDIs to GUIDs * Fix merge * Fix merge issues * Rework nested layout item key parsing for backwards compatibility * Clean-up * Reverse block layout item key calculation * Review * Use IOptions to skip content migrations * Remove "published" from data editor feature naming, as it can be used in other contexts too * Parallel migration * Don't use deprecated constructor * Ensure that layout follows structure for partial publishing * Block Grid element level variance + tests (incl. refactor of element level variation tests) * Rollback unintended changes to Program.cs * Fix bad casing * Minor formatting * RTE element level variance + tests * Remove obsoleted constructors * Use Umbraco.RichText instead of Umbraco.TinyMCE as layout alias for blocks in the RTE * Fix bad merge * Temporary fix for new cache in integration tests * Add EditorAlias to block level properties * Remove the unintended PropertyEditorAlias output for block values * Add EditorAlias to Datatype Item model * Update OpenApi.json * Introduce "expose" for blocks * Strict (explicit) handling for Expose * Improve handling of document and element level variance changes * Refactor variance alignment for published rendering * Block UDI to Key conversion should also register as a conversion * Convert newly added RTE unit test to new RTE blocks format * Minor review changes * Run memory intensive tests on Linux only * Add tests proving that AllowEditInvariantFromNonDefault has effect for block level variance too * Fix the Platform annotations * Removed Platform annotations for tests. * Fix merge * Obsolete old PublishCulture extension * More fixing bad merge --------- Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com> Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
This commit is contained in:
@@ -259,7 +259,7 @@ public class RichTextParserTests : PropertyValueConverterTests
|
||||
var id = Guid.NewGuid();
|
||||
|
||||
var tagName = $"umb-rte-block{(inlineBlock ? "-inline" : string.Empty)}";
|
||||
var element = parser.Parse($"<p><{tagName} data-content-udi=\"umb://element/{id:N}\"><!--Umbraco-Block--></{tagName}></p>") as RichTextRootElement;
|
||||
var element = parser.Parse($"<p><{tagName} data-content-key=\"{id:N}\"><!--Umbraco-Block--></{tagName}></p>") as RichTextRootElement;
|
||||
Assert.IsNotNull(element);
|
||||
var paragraph = element.Elements.Single() as RichTextGenericElement;
|
||||
Assert.IsNotNull(paragraph);
|
||||
@@ -296,7 +296,7 @@ public class RichTextParserTests : PropertyValueConverterTests
|
||||
});
|
||||
|
||||
var tagName = $"umb-rte-block{(inlineBlock ? "-inline" : string.Empty)}";
|
||||
var element = parser.Parse($"<p><{tagName} data-content-udi=\"umb://element/{block1ContentId:N}\"><!--Umbraco-Block--></{tagName}><{tagName} data-content-udi=\"umb://element/{block2ContentId:N}\"><!--Umbraco-Block--></{tagName}></p>", richTextBlockModel) as RichTextRootElement;
|
||||
var element = parser.Parse($"<p><{tagName} data-content-key=\"{block1ContentId:N}\"><!--Umbraco-Block--></{tagName}><{tagName} data-content-key=\"{block2ContentId:N}\"><!--Umbraco-Block--></{tagName}></p>", richTextBlockModel) as RichTextRootElement;
|
||||
Assert.IsNotNull(element);
|
||||
var paragraph = element.Elements.Single() as RichTextGenericElement;
|
||||
Assert.IsNotNull(paragraph);
|
||||
@@ -333,7 +333,7 @@ public class RichTextParserTests : PropertyValueConverterTests
|
||||
var id1 = Guid.NewGuid();
|
||||
var id2 = Guid.NewGuid();
|
||||
|
||||
var element = parser.Parse($"<p><umb-rte-block-inline data-content-udi=\"umb://element/{id1:N}\"><!--Umbraco-Block--></umb-rte-block-inline></p><umb-rte-block data-content-udi=\"umb://element/{id2:N}\"><!--Umbraco-Block--></umb-rte-block>") as RichTextRootElement;
|
||||
var element = parser.Parse($"<p><umb-rte-block-inline data-content-key=\"{id1:N}\"><!--Umbraco-Block--></umb-rte-block-inline></p><umb-rte-block data-content-key=\"{id2:N}\"><!--Umbraco-Block--></umb-rte-block>") as RichTextRootElement;
|
||||
Assert.IsNotNull(element);
|
||||
Assert.AreEqual(2, element.Elements.Count());
|
||||
|
||||
@@ -435,7 +435,7 @@ public class RichTextParserTests : PropertyValueConverterTests
|
||||
var id = Guid.NewGuid();
|
||||
|
||||
var tagName = $"umb-rte-block{(inlineBlock ? "-inline" : string.Empty)}";
|
||||
var result = parser.Parse($"<p><{tagName} data-content-udi=\"umb://element/{id:N}\"><!--Umbraco-Block--></{tagName}></p>");
|
||||
var result = parser.Parse($"<p><{tagName} data-content-key=\"{id:N}\"><!--Umbraco-Block--></{tagName}></p>");
|
||||
Assert.AreEqual($"<p><{tagName} data-content-id=\"{id:D}\"></{tagName}></p>", result);
|
||||
}
|
||||
|
||||
@@ -446,7 +446,7 @@ public class RichTextParserTests : PropertyValueConverterTests
|
||||
var id1 = Guid.NewGuid();
|
||||
var id2 = Guid.NewGuid();
|
||||
|
||||
var result = parser.Parse($"<p><umb-rte-block-inline data-content-udi=\"umb://element/{id1:N}\"><!--Umbraco-Block--></umb-rte-block-inline></p><umb-rte-block data-content-udi=\"umb://element/{id2:N}\"><!--Umbraco-Block--></umb-rte-block>");
|
||||
var result = parser.Parse($"<p><umb-rte-block-inline data-content-key=\"{id1:D}\"><!--Umbraco-Block--></umb-rte-block-inline></p><umb-rte-block data-content-key=\"{id2:D}\"><!--Umbraco-Block--></umb-rte-block>");
|
||||
Assert.AreEqual($"<p><umb-rte-block-inline data-content-id=\"{id1:D}\"></umb-rte-block-inline></p><umb-rte-block data-content-id=\"{id2:D}\"></umb-rte-block>", result);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ using Umbraco.Cms.Core.Cache;
|
||||
using Umbraco.Cms.Core.Logging;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Models.Entities;
|
||||
using Umbraco.Cms.Core.PropertyEditors;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Tests.Common.Builders;
|
||||
using Umbraco.Cms.Tests.Common.Builders.Extensions;
|
||||
@@ -26,6 +27,8 @@ public class ContentTests
|
||||
{
|
||||
private readonly IContentTypeService _contentTypeService = Mock.Of<IContentTypeService>();
|
||||
|
||||
private readonly PropertyEditorCollection _propertyEditorCollection = new (new DataEditorCollection(() => []));
|
||||
|
||||
[Test]
|
||||
public void Variant_Culture_Names_Track_Dirty_Changes()
|
||||
{
|
||||
@@ -87,7 +90,7 @@ public class ContentTests
|
||||
|
||||
Thread.Sleep(500); // The "Date" wont be dirty if the test runs too fast since it will be the same date
|
||||
content.SetCultureName("name-fr", langFr);
|
||||
content.PublishCulture(CultureImpact.Explicit(langFr, false)); // we've set the name, now we're publishing it
|
||||
content.PublishCulture(CultureImpact.Explicit(langFr, false), DateTime.Now, _propertyEditorCollection); // we've set the name, now we're publishing it
|
||||
Assert.IsTrue(
|
||||
content.IsPropertyDirty("PublishCultureInfos")); // now it will be changed since the collection has changed
|
||||
var frCultureName = content.PublishCultureInfos[langFr];
|
||||
@@ -100,7 +103,7 @@ public class ContentTests
|
||||
|
||||
Thread.Sleep(500); // The "Date" wont be dirty if the test runs too fast since it will be the same date
|
||||
content.SetCultureName("name-fr", langFr);
|
||||
content.PublishCulture(CultureImpact.Explicit(langFr, false)); // we've set the name, now we're publishing it
|
||||
content.PublishCulture(CultureImpact.Explicit(langFr, false), DateTime.Now, _propertyEditorCollection); // we've set the name, now we're publishing it
|
||||
Assert.IsTrue(frCultureName.IsPropertyDirty("Date"));
|
||||
Assert.IsTrue(content.IsPropertyDirty("PublishCultureInfos")); // it's true now since we've updated a name
|
||||
}
|
||||
@@ -300,7 +303,7 @@ public class ContentTests
|
||||
|
||||
content.SetCultureName("Hello", "en-US");
|
||||
content.SetCultureName("World", "es-ES");
|
||||
content.PublishCulture(CultureImpact.All);
|
||||
content.PublishCulture(CultureImpact.All, DateTime.Now, _propertyEditorCollection);
|
||||
|
||||
// should not try to clone something that's not Published or Unpublished
|
||||
// (and in fact it will not work)
|
||||
@@ -413,7 +416,7 @@ public class ContentTests
|
||||
|
||||
content.SetCultureName("Hello", "en-US");
|
||||
content.SetCultureName("World", "es-ES");
|
||||
content.PublishCulture(CultureImpact.All);
|
||||
content.PublishCulture(CultureImpact.All, DateTime.Now, _propertyEditorCollection);
|
||||
|
||||
var i = 200;
|
||||
foreach (var property in content.Properties)
|
||||
|
||||
@@ -22,6 +22,8 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Models;
|
||||
[TestFixture]
|
||||
public class VariationTests
|
||||
{
|
||||
private readonly PropertyEditorCollection _propertyEditorCollection = new (new DataEditorCollection(() => []));
|
||||
|
||||
[Test]
|
||||
public void ValidateVariationTests()
|
||||
{
|
||||
@@ -315,7 +317,7 @@ public class VariationTests
|
||||
|
||||
// can publish value
|
||||
// and get edited and published values
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.All));
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.All, DateTime.Now, _propertyEditorCollection));
|
||||
Assert.AreEqual("a", content.GetValue("prop"));
|
||||
Assert.AreEqual("a", content.GetValue("prop", published: true));
|
||||
|
||||
@@ -345,9 +347,9 @@ public class VariationTests
|
||||
|
||||
// can publish value
|
||||
// and get edited and published values
|
||||
Assert.IsFalse(content.PublishCulture(CultureImpact.Explicit(langFr, false))); // no name
|
||||
Assert.IsFalse(content.PublishCulture(CultureImpact.Explicit(langFr, false), DateTime.Now, _propertyEditorCollection)); // no name
|
||||
content.SetCultureName("name-fr", langFr);
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.Explicit(langFr, false)));
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.Explicit(langFr, false), DateTime.Now, _propertyEditorCollection));
|
||||
Assert.IsNull(content.GetValue("prop"));
|
||||
Assert.IsNull(content.GetValue("prop", published: true));
|
||||
Assert.AreEqual("c", content.GetValue("prop", langFr));
|
||||
@@ -361,7 +363,7 @@ public class VariationTests
|
||||
Assert.IsNull(content.GetValue("prop", langFr, published: true));
|
||||
|
||||
// can publish all
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.All));
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.All, DateTime.Now, _propertyEditorCollection));
|
||||
Assert.IsNull(content.GetValue("prop"));
|
||||
Assert.IsNull(content.GetValue("prop", published: true));
|
||||
Assert.AreEqual("c", content.GetValue("prop", langFr));
|
||||
@@ -371,14 +373,14 @@ public class VariationTests
|
||||
content.UnpublishCulture(langFr);
|
||||
Assert.AreEqual("c", content.GetValue("prop", langFr));
|
||||
Assert.IsNull(content.GetValue("prop", langFr, published: true));
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.Explicit(langFr, false)));
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.Explicit(langFr, false), DateTime.Now, _propertyEditorCollection));
|
||||
Assert.AreEqual("c", content.GetValue("prop", langFr));
|
||||
Assert.AreEqual("c", content.GetValue("prop", langFr, published: true));
|
||||
|
||||
content.UnpublishCulture(); // clears invariant props if any
|
||||
Assert.IsNull(content.GetValue("prop"));
|
||||
Assert.IsNull(content.GetValue("prop", published: true));
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.All)); // publishes invariant props if any
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.All, DateTime.Now, _propertyEditorCollection)); // publishes invariant props if any
|
||||
Assert.IsNull(content.GetValue("prop"));
|
||||
Assert.IsNull(content.GetValue("prop", published: true));
|
||||
|
||||
@@ -437,19 +439,19 @@ public class VariationTests
|
||||
var langFrImpact = CultureImpact.Explicit(langFr, true);
|
||||
|
||||
Assert.IsTrue(
|
||||
content.PublishCulture(langFrImpact)); // succeeds because names are ok (not validating properties here)
|
||||
content.PublishCulture(langFrImpact, DateTime.Now, _propertyEditorCollection)); // succeeds because names are ok (not validating properties here)
|
||||
Assert.IsFalse(
|
||||
propertyValidationService.IsPropertyDataValid(content, out _, langFrImpact)); // fails because prop1 is mandatory
|
||||
|
||||
content.SetValue("prop1", "a", langFr);
|
||||
Assert.IsTrue(
|
||||
content.PublishCulture(langFrImpact)); // succeeds because names are ok (not validating properties here)
|
||||
content.PublishCulture(langFrImpact, DateTime.Now, _propertyEditorCollection)); // succeeds because names are ok (not validating properties here)
|
||||
|
||||
// Fails because prop2 is mandatory and invariant and the item isn't published.
|
||||
// Invariant is validated against the default language except when there isn't a published version, in that case it's always validated.
|
||||
Assert.IsFalse(propertyValidationService.IsPropertyDataValid(content, out _, langFrImpact));
|
||||
content.SetValue("prop2", "x");
|
||||
Assert.IsTrue(content.PublishCulture(langFrImpact)); // still ok...
|
||||
Assert.IsTrue(content.PublishCulture(langFrImpact, DateTime.Now, _propertyEditorCollection)); // still ok...
|
||||
Assert.IsTrue(propertyValidationService.IsPropertyDataValid(content, out _, langFrImpact)); // now it's ok
|
||||
|
||||
Assert.AreEqual("a", content.GetValue("prop1", langFr, published: true));
|
||||
@@ -485,12 +487,12 @@ public class VariationTests
|
||||
content.SetValue("prop", "a-es", langEs);
|
||||
|
||||
// cannot publish without a name
|
||||
Assert.IsFalse(content.PublishCulture(CultureImpact.Explicit(langFr, false)));
|
||||
Assert.IsFalse(content.PublishCulture(CultureImpact.Explicit(langFr, false), DateTime.Now, _propertyEditorCollection));
|
||||
|
||||
// works with a name
|
||||
// and then FR is available, and published
|
||||
content.SetCultureName("name-fr", langFr);
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.Explicit(langFr, false)));
|
||||
Assert.IsTrue(content.PublishCulture(CultureImpact.Explicit(langFr, false), DateTime.Now, _propertyEditorCollection));
|
||||
|
||||
// now UK is available too
|
||||
content.SetCultureName("name-uk", langUk);
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Models.Blocks;
|
||||
using Umbraco.Cms.Core.PropertyEditors;
|
||||
using Umbraco.Cms.Core.Serialization;
|
||||
@@ -16,12 +15,12 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors;
|
||||
[TestFixture]
|
||||
public class BlockEditorComponentTests
|
||||
{
|
||||
private const string ContentGuid1 = "036ce82586a64dfba2d523a99ed80f58";
|
||||
private const string ContentGuid2 = "48288c21a38a40ef82deb3eda90a58f6";
|
||||
private const string SettingsGuid1 = "ffd35c4e2eea4900abfa5611b67b2492";
|
||||
private const string SubContentGuid1 = "4c44ce6b3a5c4f5f8f15e3dc24819a9e";
|
||||
private const string SubContentGuid2 = "a062c06d6b0b44ac892b35d90309c7f8";
|
||||
private const string SubSettingsGuid1 = "4d998d980ffa4eee8afdc23c4abd6d29";
|
||||
private const string ContentGuid1 = "709b857e-6f00-45c6-bf65-f7da028c361f";
|
||||
private const string ContentGuid2 = "823dc755-28ec-4198-b050-514d91b7994e";
|
||||
private const string SettingsGuid1 = "4d2e18fe-f030-4ea9-aed9-10e7aee265fd";
|
||||
private const string SubContentGuid1 = "b5698cf9-bf26-4c1c-8b1c-db30a1b5c56a";
|
||||
private const string SubContentGuid2 = "68606a64-a03a-4b78-bcb1-39daee0c590d";
|
||||
private const string SubSettingsGuid1 = "5ce1b7da-7c9f-491e-9b95-5510fd28c50c";
|
||||
|
||||
private readonly IJsonSerializer _jsonSerializer = new SystemTextJsonSerializer();
|
||||
|
||||
@@ -30,7 +29,7 @@ public class BlockEditorComponentTests
|
||||
{
|
||||
var component = new BlockListPropertyNotificationHandler(Mock.Of<ILogger<BlockListPropertyNotificationHandler>>());
|
||||
var json = GetBlockListJson(null, string.Empty);
|
||||
Assert.Throws<FormatException>(() => component.ReplaceBlockEditorUdis(json));
|
||||
Assert.Throws<FormatException>(() => component.ReplaceBlockEditorKeys(json));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -46,7 +45,7 @@ public class BlockEditorComponentTests
|
||||
var json = GetBlockListJson(null);
|
||||
|
||||
var component = new BlockListPropertyNotificationHandler(Mock.Of<ILogger<BlockListPropertyNotificationHandler>>());
|
||||
var result = component.ReplaceBlockEditorUdis(json, GuidFactory);
|
||||
var result = component.ReplaceBlockEditorKeys(json, GuidFactory);
|
||||
|
||||
Assert.AreEqual(3, guidMap.Count);
|
||||
var expected = ReplaceGuids(json, guidMap);
|
||||
@@ -76,7 +75,7 @@ public class BlockEditorComponentTests
|
||||
var json = GetBlockListJson(innerJsonEscaped);
|
||||
|
||||
var component = new BlockListPropertyNotificationHandler(Mock.Of<ILogger<BlockListPropertyNotificationHandler>>());
|
||||
var result = component.ReplaceBlockEditorUdis(json, GuidFactory);
|
||||
var result = component.ReplaceBlockEditorKeys(json, GuidFactory);
|
||||
|
||||
// the expected result is that the subFeatures data remains escaped
|
||||
Assert.AreEqual(6, guidMap.Count);
|
||||
@@ -105,7 +104,7 @@ public class BlockEditorComponentTests
|
||||
var json = GetBlockListJson(innerJson);
|
||||
|
||||
var component = new BlockListPropertyNotificationHandler(Mock.Of<ILogger<BlockListPropertyNotificationHandler>>());
|
||||
var result = component.ReplaceBlockEditorUdis(json, GuidFactory);
|
||||
var result = component.ReplaceBlockEditorKeys(json, GuidFactory);
|
||||
|
||||
Assert.AreEqual(6, guidMap.Count);
|
||||
var expected = ReplaceGuids(GetBlockListJson(innerJson), guidMap);
|
||||
@@ -137,7 +136,7 @@ public class BlockEditorComponentTests
|
||||
var json = GetBlockListJson(complexEditorJsonEscaped);
|
||||
|
||||
var component = new BlockListPropertyNotificationHandler(Mock.Of<ILogger<BlockListPropertyNotificationHandler>>());
|
||||
var result = component.ReplaceBlockEditorUdis(json, GuidFactory);
|
||||
var result = component.ReplaceBlockEditorKeys(json, GuidFactory);
|
||||
|
||||
// the expected result is that the subFeatures remains escaped
|
||||
Assert.AreEqual(6, guidMap.Count);
|
||||
@@ -168,7 +167,7 @@ public class BlockEditorComponentTests
|
||||
var json = GetBlockGridJson(innerJsonEscaped);
|
||||
|
||||
var component = new BlockGridPropertyNotificationHandler(Mock.Of<ILogger<BlockGridPropertyNotificationHandler>>());
|
||||
var result = component.ReplaceBlockEditorUdis(json, GuidFactory);
|
||||
var result = component.ReplaceBlockEditorKeys(json, GuidFactory);
|
||||
|
||||
// the expected result is that the subFeatures remains escaped
|
||||
Assert.AreEqual(13, guidMap.Count);
|
||||
@@ -195,7 +194,7 @@ public class BlockEditorComponentTests
|
||||
var json = GetBlockGridJson(innerJson);
|
||||
|
||||
var component = new BlockGridPropertyNotificationHandler(Mock.Of<ILogger<BlockGridPropertyNotificationHandler>>());
|
||||
var result = component.ReplaceBlockEditorUdis(json, GuidFactory);
|
||||
var result = component.ReplaceBlockEditorKeys(json, GuidFactory);
|
||||
|
||||
// the expected result is that the subFeatures remains unescaped
|
||||
Assert.AreEqual(13, guidMap.Count);
|
||||
@@ -228,7 +227,7 @@ public class BlockEditorComponentTests
|
||||
var json = GetBlockGridJson(innerJson);
|
||||
|
||||
var component = new BlockGridPropertyNotificationHandler(Mock.Of<ILogger<BlockGridPropertyNotificationHandler>>());
|
||||
var result = component.ReplaceBlockEditorUdis(json, GuidFactory);
|
||||
var result = component.ReplaceBlockEditorKeys(json, GuidFactory);
|
||||
|
||||
// the expected result is that the subFeatures remains unaltered - the UDIs within should still exist
|
||||
Assert.AreEqual(10, guidMap.Count);
|
||||
@@ -253,39 +252,41 @@ public class BlockEditorComponentTests
|
||||
{
|
||||
""Umbraco.BlockList"": [
|
||||
{
|
||||
""contentUdi"": """ + (contentGuid1.IsNullOrWhiteSpace()
|
||||
? string.Empty
|
||||
: Udi.Create(Constants.UdiEntityType.Element, Guid.Parse(contentGuid1)).ToString()) + @"""
|
||||
""contentKey"": """ + (contentGuid1.IsNullOrWhiteSpace() ? string.Empty : contentGuid1) + @"""
|
||||
},
|
||||
{
|
||||
""contentUdi"": ""umb://element/" + contentGuid2 + @""",
|
||||
""settingsUdi"": ""umb://element/" + settingsGuid1 + @"""
|
||||
""contentKey"": """ + contentGuid2 + @""",
|
||||
""settingsKey"": """ + settingsGuid1 + @"""
|
||||
}
|
||||
]
|
||||
},
|
||||
""contentData"": [
|
||||
{
|
||||
""contentTypeKey"": ""d6ce4a86-91a2-45b3-a99c-8691fc1fb020"",
|
||||
""udi"": """ + (contentGuid1.IsNullOrWhiteSpace()
|
||||
? string.Empty
|
||||
: Udi.Create(Constants.UdiEntityType.Element, Guid.Parse(contentGuid1)).ToString()) + @""",
|
||||
""featureName"": ""Hello"",
|
||||
""featureDetails"": ""World""
|
||||
""key"": """ + (contentGuid1.IsNullOrWhiteSpace() ? string.Empty : contentGuid1) + @""",
|
||||
""values"": [
|
||||
{ ""alias"": ""featureName"", ""value"": ""Hello"" },
|
||||
{ ""alias"": ""featureDetails"", ""value"": ""World"" }
|
||||
]
|
||||
},
|
||||
{
|
||||
""contentTypeKey"": ""d6ce4a86-91a2-45b3-a99c-8691fc1fb020"",
|
||||
""udi"": ""umb://element/" + contentGuid2 + @""",
|
||||
""featureName"": ""Another"",
|
||||
""featureDetails"": ""Feature""" +
|
||||
(subFeatures == null ? string.Empty : @", ""subFeatures"": " + subFeatures) + @"
|
||||
""key"": """ + contentGuid2 + @""",
|
||||
""values"": [
|
||||
{ ""alias"": ""featureName"", ""value"": ""Another"" },
|
||||
{ ""alias"": ""featureDetails"", ""value"": ""Feature"" },
|
||||
{ ""alias"": ""subFeatures"", ""value"": " + subFeatures.OrIfNullOrWhiteSpace(@"""""") + @" }
|
||||
]
|
||||
}
|
||||
],
|
||||
""settingsData"": [
|
||||
{
|
||||
""contentTypeKey"": ""d6ce4a86-91a2-45b3-a99c-8691fc1fb020"",
|
||||
""udi"": ""umb://element/" + settingsGuid1 + @""",
|
||||
""featureName"": ""Setting 1"",
|
||||
""featureDetails"": ""Setting 2""
|
||||
""key"": """ + settingsGuid1 + @""",
|
||||
""values"": [
|
||||
{ ""alias"": ""featureName"", ""value"": ""Setting 1"" },
|
||||
{ ""alias"": ""featureDetails"", ""value"": ""Setting 2"" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}";
|
||||
@@ -350,7 +351,7 @@ public class BlockEditorComponentTests
|
||||
@"{
|
||||
""layout"": {
|
||||
""Umbraco.BlockGrid"": [{
|
||||
""contentUdi"": ""umb://element/d05861169d124582a7c2826e52a51b47"",
|
||||
""contentKey"": ""fb0595b1-26e7-493f-86c7-bf2c42326850"",
|
||||
""areas"": [{
|
||||
""key"": ""b17663f0-c1f4-4bee-97cd-290fbc7b9a2c"",
|
||||
""items"": []
|
||||
@@ -361,13 +362,13 @@ public class BlockEditorComponentTests
|
||||
],
|
||||
""columnSpan"": 12,
|
||||
""rowSpan"": 1,
|
||||
""settingsUdi"": ""umb://element/262d5efd2eeb43ed95e95c094c45ce1c""
|
||||
""settingsKey"": ""0183ae81-2b62-49b5-8ac6-88d66c33068c""
|
||||
}, {
|
||||
""contentUdi"": ""umb://element/5abad9f1b4e24d7aa269fbd1b50033ac"",
|
||||
""contentKey"": ""4852d9ef-ac8d-4d44-87c9-82d282aa0e7f"",
|
||||
""areas"": [{
|
||||
""key"": ""b17663f0-c1f4-4bee-97cd-290fbc7b9a2c"",
|
||||
""items"": [{
|
||||
""contentUdi"": ""umb://element/5fc866c590be4d01a28a979472a1ffee"",
|
||||
""contentKey"": ""96a15ca9-3970-4e0a-9c66-18433bc23274"",
|
||||
""areas"": [],
|
||||
""columnSpan"": 3,
|
||||
""rowSpan"": 1
|
||||
@@ -376,25 +377,25 @@ public class BlockEditorComponentTests
|
||||
}, {
|
||||
""key"": ""2bdcdadd-f609-4acc-b840-01970b9ced1d"",
|
||||
""items"": [{
|
||||
""contentUdi"": ""umb://element/264536b65b0f4641aa43d4bfb515831d"",
|
||||
""contentKey"": ""3093f7f1-c931-4325-ba71-638eb2746c8d"",
|
||||
""areas"": [],
|
||||
""columnSpan"": 3,
|
||||
""rowSpan"": 1,
|
||||
""settingsUdi"": ""umb://element/20d735c7c57b40229ed845375cf22d1f""
|
||||
""settingsKey"": ""bef9eb67-56de-4fec-9fbc-1c7c02f5a5a7""
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
""columnSpan"": 6,
|
||||
""rowSpan"": 1,
|
||||
""settingsUdi"": ""umb://element/4d121eaba49c4e09a7460069d1bee600""
|
||||
""settingsKey"": ""6eed3662-6ad1-4cba-805b-352f28599b0d""
|
||||
}, {
|
||||
""contentUdi"": ""umb://element/76e24aeb6eeb4370892ca521932a96df"",
|
||||
""contentKey"": ""1f778485-933e-40b4-91e2-9926857a5c81"",
|
||||
""areas"": [],
|
||||
""columnSpan"": 6,
|
||||
""rowSpan"": 1
|
||||
}, {
|
||||
""contentUdi"": ""umb://element/90549d94555647fdbe4d111c7178ada4"",
|
||||
""contentKey"": ""2d5c6555-0dd8-4db2-b0c9-2d2eba29026d"",
|
||||
""areas"": [{
|
||||
""key"": ""b17663f0-c1f4-4bee-97cd-290fbc7b9a2c"",
|
||||
""items"": []
|
||||
@@ -405,51 +406,67 @@ public class BlockEditorComponentTests
|
||||
],
|
||||
""columnSpan"": 12,
|
||||
""rowSpan"": 3,
|
||||
""settingsUdi"": ""umb://element/3dfabc96584c4c35ac2e6bf06ffa20de""
|
||||
""settingsKey"": ""48a7b7da-673f-44d5-8bad-7d71d157fb3e""
|
||||
}
|
||||
]
|
||||
},
|
||||
""contentData"": [{
|
||||
""contentTypeKey"": ""36ccf44a-aac8-40a6-8685-73ab03bc9709"",
|
||||
""udi"": ""umb://element/d05861169d124582a7c2826e52a51b47"",
|
||||
""title"": ""Element one - 12 cols""
|
||||
""key"": ""fb0595b1-26e7-493f-86c7-bf2c42326850"",
|
||||
""values"": [
|
||||
{ ""alias"": ""title"", ""value"": ""Element one - 12 cols"" }
|
||||
]
|
||||
}, {
|
||||
""contentTypeKey"": ""36ccf44a-aac8-40a6-8685-73ab03bc9709"",
|
||||
""udi"": ""umb://element/5abad9f1b4e24d7aa269fbd1b50033ac"",
|
||||
""title"": ""Element one - 6 cols, left side""
|
||||
""key"": ""4852d9ef-ac8d-4d44-87c9-82d282aa0e7f"",
|
||||
""values"": [
|
||||
{ ""alias"": ""title"", ""value"": ""Element one - 6 cols, left side"" }
|
||||
]
|
||||
}, {
|
||||
""contentTypeKey"": ""5cc488aa-ba24-41f2-a01e-8f2d1982f865"",
|
||||
""udi"": ""umb://element/76e24aeb6eeb4370892ca521932a96df"",
|
||||
""text"": ""Element two - 6 cols, right side""
|
||||
""key"": ""1f778485-933e-40b4-91e2-9926857a5c81"",
|
||||
""values"": [
|
||||
{ ""alias"": ""title"", ""value"": ""Element one - 6 cols, right side"" }
|
||||
]
|
||||
}, {
|
||||
""contentTypeKey"": ""36ccf44a-aac8-40a6-8685-73ab03bc9709"",
|
||||
""udi"": ""umb://element/90549d94555647fdbe4d111c7178ada4"",
|
||||
""title"": ""One more element one - 12 cols"",
|
||||
""subFeatures"": " + subFeatures.OrIfNullOrWhiteSpace(@"""""") + @"
|
||||
""key"": ""2d5c6555-0dd8-4db2-b0c9-2d2eba29026d"",
|
||||
""values"": [
|
||||
{ ""alias"": ""title"", ""value"": ""One more element one - 12 cols"" },
|
||||
{ ""alias"": ""subFeatures"", ""value"": " + subFeatures.OrIfNullOrWhiteSpace(@"""""") + @" }
|
||||
]
|
||||
}, {
|
||||
""contentTypeKey"": ""5cc488aa-ba24-41f2-a01e-8f2d1982f865"",
|
||||
""udi"": ""umb://element/5fc866c590be4d01a28a979472a1ffee"",
|
||||
""text"": ""Nested element two - left side""
|
||||
""key"": ""96a15ca9-3970-4e0a-9c66-18433bc23274"",
|
||||
""values"": [
|
||||
{ ""alias"": ""title"", ""value"": ""Nested element two - left side"" }
|
||||
]
|
||||
}, {
|
||||
""contentTypeKey"": ""36ccf44a-aac8-40a6-8685-73ab03bc9709"",
|
||||
""udi"": ""umb://element/264536b65b0f4641aa43d4bfb515831d"",
|
||||
""title"": ""Nested element one - right side""
|
||||
""key"": ""3093f7f1-c931-4325-ba71-638eb2746c8d"",
|
||||
""values"": [
|
||||
{ ""alias"": ""title"", ""value"": ""Nested element one - right side"" }
|
||||
]
|
||||
}
|
||||
],
|
||||
""settingsData"": [{
|
||||
""contentTypeKey"": ""ef150524-7145-469e-8d99-166aad69a7ad"",
|
||||
""udi"": ""umb://element/262d5efd2eeb43ed95e95c094c45ce1c"",
|
||||
""enabled"": 1
|
||||
""key"": ""0183ae81-2b62-49b5-8ac6-88d66c33068c"",
|
||||
""values"": [
|
||||
{ ""alias"": ""enabled"", ""value"": 1 }
|
||||
]
|
||||
}, {
|
||||
""contentTypeKey"": ""ef150524-7145-469e-8d99-166aad69a7ad"",
|
||||
""udi"": ""umb://element/4d121eaba49c4e09a7460069d1bee600""
|
||||
""key"": ""6eed3662-6ad1-4cba-805b-352f28599b0d""
|
||||
}, {
|
||||
""contentTypeKey"": ""ef150524-7145-469e-8d99-166aad69a7ad"",
|
||||
""udi"": ""umb://element/20d735c7c57b40229ed845375cf22d1f""
|
||||
""key"": ""bef9eb67-56de-4fec-9fbc-1c7c02f5a5a7""
|
||||
}, {
|
||||
""contentTypeKey"": ""ef150524-7145-469e-8d99-166aad69a7ad"",
|
||||
""udi"": ""umb://element/3dfabc96584c4c35ac2e6bf06ffa20de"",
|
||||
""enabled"": 1
|
||||
""key"": ""48a7b7da-673f-44d5-8bad-7d71d157fb3e"",
|
||||
""values"": [
|
||||
{ ""alias"": ""enabled"", ""value"": 1 }
|
||||
]
|
||||
}
|
||||
]
|
||||
}";
|
||||
@@ -458,7 +475,7 @@ public class BlockEditorComponentTests
|
||||
{
|
||||
foreach ((Guid oldKey, Guid newKey) in guidMap)
|
||||
{
|
||||
json = json.Replace(oldKey.ToString("N"), newKey.ToString("N"));
|
||||
json = json.Replace(oldKey.ToString("D"), newKey.ToString("D"));
|
||||
}
|
||||
|
||||
return json;
|
||||
|
||||
@@ -7,6 +7,7 @@ using Umbraco.Cms.Core.Models.Blocks;
|
||||
using Umbraco.Cms.Core.Models.PublishedContent;
|
||||
using Umbraco.Cms.Core.PropertyEditors;
|
||||
using Umbraco.Cms.Core.PropertyEditors.ValueConverters;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Infrastructure.Serialization;
|
||||
|
||||
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.PropertyEditors;
|
||||
@@ -35,15 +36,15 @@ public class BlockGridPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
var editor = CreateConverter();
|
||||
var config = ConfigForSingle(SettingKey1);
|
||||
var propertyType = GetPropertyType(config);
|
||||
var publishedElement = Mock.Of<IPublishedElement>();
|
||||
var publishedElement = GetPublishedElement();
|
||||
|
||||
var json = @"
|
||||
{
|
||||
""layout"": {
|
||||
""" + Constants.PropertyEditors.Aliases.BlockGrid + @""": [
|
||||
{
|
||||
""contentUdi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D"",
|
||||
""settingsUdi"": ""umb://element/2D3529EDB47B4B109F6D4B802DD5DFE2"",
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D"",
|
||||
""settingsKey"": ""2D3529ED-B47B-4B10-9F6D-4B802DD5DFE2"",
|
||||
""rowSpan"": 1,
|
||||
""columnSpan"": 12,
|
||||
""areas"": []
|
||||
@@ -53,13 +54,18 @@ public class BlockGridPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
""contentData"": [
|
||||
{
|
||||
""contentTypeKey"": """ + ContentKey1 + @""",
|
||||
""udi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D""
|
||||
""key"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
],
|
||||
""settingsData"": [
|
||||
{
|
||||
""contentTypeKey"": """ + SettingKey1 + @""",
|
||||
""udi"": ""umb://element/2D3529EDB47B4B109F6D4B802DD5DFE2""
|
||||
""key"": ""2D3529ED-B47B-4B10-9F6D-4B802DD5DFE2""
|
||||
}
|
||||
],
|
||||
""expose"": [
|
||||
{
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
]
|
||||
}";
|
||||
@@ -70,10 +76,10 @@ public class BlockGridPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
Assert.IsNotNull(converted);
|
||||
Assert.AreEqual(1, converted.Count);
|
||||
Assert.AreEqual(Guid.Parse("1304E1DD-AC87-4396-84FE-8A399231CB3D"), converted[0].Content.Key);
|
||||
Assert.AreEqual(UdiParser.Parse("umb://element/1304E1DDAC87439684FE8A399231CB3D"), converted[0].ContentUdi);
|
||||
Assert.AreEqual(Guid.Parse("1304E1DD-AC87-4396-84FE-8A399231CB3D"), converted[0].ContentKey);
|
||||
Assert.AreEqual(ContentAlias1, converted[0].Content.ContentType.Alias);
|
||||
Assert.AreEqual(Guid.Parse("2D3529ED-B47B-4B10-9F6D-4B802DD5DFE2"), converted[0].Settings.Key);
|
||||
Assert.AreEqual(UdiParser.Parse("umb://element/2D3529EDB47B4B109F6D4B802DD5DFE2"), converted[0].SettingsUdi);
|
||||
Assert.AreEqual(Guid.Parse("2D3529ED-B47B-4B10-9F6D-4B802DD5DFE2"), converted[0].Settings!.Key);
|
||||
Assert.AreEqual(Guid.Parse("2D3529ED-B47B-4B10-9F6D-4B802DD5DFE2"), converted[0].SettingsKey);
|
||||
Assert.AreEqual(SettingAlias1, converted[0].Settings.ContentType.Alias);
|
||||
}
|
||||
|
||||
@@ -83,14 +89,14 @@ public class BlockGridPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
var editor = CreateConverter();
|
||||
var config = ConfigForSingle();
|
||||
var propertyType = GetPropertyType(config);
|
||||
var publishedElement = Mock.Of<IPublishedElement>();
|
||||
var publishedElement = GetPublishedElement();
|
||||
|
||||
var json = @"
|
||||
{
|
||||
""layout"": {
|
||||
""" + Constants.PropertyEditors.Aliases.BlockGrid + @""": [
|
||||
{
|
||||
""contentUdi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D"",
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D"",
|
||||
""rowSpan"": 1,
|
||||
""columnSpan"": 12,
|
||||
""areas"": []
|
||||
@@ -100,7 +106,12 @@ public class BlockGridPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
""contentData"": [
|
||||
{
|
||||
""contentTypeKey"": """ + ContentKey1 + @""",
|
||||
""udi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D""
|
||||
""key"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
],
|
||||
""expose"": [
|
||||
{
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
]
|
||||
}";
|
||||
@@ -112,7 +123,7 @@ public class BlockGridPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
Assert.AreEqual(1, converted.Count);
|
||||
var item0 = converted[0].Content;
|
||||
Assert.AreEqual(Guid.Parse("1304E1DD-AC87-4396-84FE-8A399231CB3D"), item0.Key);
|
||||
Assert.AreEqual(UdiParser.Parse("umb://element/1304E1DDAC87439684FE8A399231CB3D"), converted[0].ContentUdi);
|
||||
Assert.AreEqual(Guid.Parse("1304E1DD-AC87-4396-84FE-8A399231CB3D"), converted[0].ContentKey);
|
||||
Assert.AreEqual("Test1", item0.ContentType.Alias);
|
||||
Assert.IsNull(converted[0].Settings);
|
||||
}
|
||||
@@ -123,14 +134,14 @@ public class BlockGridPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
var editor = CreateConverter();
|
||||
var config = ConfigForSingle();
|
||||
var propertyType = GetPropertyType(config);
|
||||
var publishedElement = Mock.Of<IPublishedElement>();
|
||||
var publishedElement = GetPublishedElement();
|
||||
|
||||
var json = @"
|
||||
{
|
||||
""layout"": {
|
||||
""" + Constants.PropertyEditors.Aliases.BlockGrid + @""": [
|
||||
{
|
||||
""contentUdi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D"",
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D"",
|
||||
""rowSpan"": 1,
|
||||
""columnSpan"": 12,
|
||||
""areas"": []
|
||||
@@ -138,19 +149,24 @@ public class BlockGridPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
],
|
||||
""" + Constants.PropertyEditors.Aliases.BlockList + @""": [
|
||||
{
|
||||
""contentUdi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D""
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
],
|
||||
""Some.Custom.BlockEditor"": [
|
||||
{
|
||||
""contentUdi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D""
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
]
|
||||
},
|
||||
""contentData"": [
|
||||
{
|
||||
""contentTypeKey"": """ + ContentKey1 + @""",
|
||||
""udi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D""
|
||||
""key"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
],
|
||||
""expose"": [
|
||||
{
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
]
|
||||
}";
|
||||
@@ -162,7 +178,7 @@ public class BlockGridPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
Assert.AreEqual(1, converted.Count);
|
||||
var item0 = converted[0].Content;
|
||||
Assert.AreEqual(Guid.Parse("1304E1DD-AC87-4396-84FE-8A399231CB3D"), item0.Key);
|
||||
Assert.AreEqual(UdiParser.Parse("umb://element/1304E1DDAC87439684FE8A399231CB3D"), converted[0].ContentUdi);
|
||||
Assert.AreEqual(Guid.Parse("1304E1DD-AC87-4396-84FE-8A399231CB3D"), converted[0].ContentKey);
|
||||
Assert.AreEqual("Test1", item0.ContentType.Alias);
|
||||
Assert.IsNull(converted[0].Settings);
|
||||
}
|
||||
@@ -171,12 +187,15 @@ public class BlockGridPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
{
|
||||
var publishedSnapshotAccessor = GetPublishedSnapshotAccessor();
|
||||
var publishedModelFactory = new NoopPublishedModelFactory();
|
||||
var blockVarianceHandler = new BlockEditorVarianceHandler(Mock.Of<ILanguageService>());
|
||||
var editor = new BlockGridPropertyValueConverter(
|
||||
Mock.Of<IProfilingLogger>(),
|
||||
new BlockEditorConverter(publishedSnapshotAccessor, publishedModelFactory),
|
||||
new BlockEditorConverter(publishedSnapshotAccessor, publishedModelFactory, Mock.Of<IVariationContextAccessor>(), blockVarianceHandler),
|
||||
new SystemTextJsonSerializer(),
|
||||
new ApiElementBuilder(Mock.Of<IOutputExpansionStrategyAccessor>()),
|
||||
new BlockGridPropertyValueConstructorCache());
|
||||
new BlockGridPropertyValueConstructorCache(),
|
||||
Mock.Of<IVariationContextAccessor>(),
|
||||
blockVarianceHandler);
|
||||
return editor;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,13 +24,16 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
{
|
||||
var publishedSnapshotAccessor = GetPublishedSnapshotAccessor();
|
||||
var publishedModelFactory = new NoopPublishedModelFactory();
|
||||
var blockVarianceHandler = new BlockEditorVarianceHandler(Mock.Of<ILanguageService>());
|
||||
var editor = new BlockListPropertyValueConverter(
|
||||
Mock.Of<IProfilingLogger>(),
|
||||
new BlockEditorConverter(publishedSnapshotAccessor, publishedModelFactory),
|
||||
new BlockEditorConverter(publishedSnapshotAccessor, publishedModelFactory, Mock.Of<IVariationContextAccessor>(), blockVarianceHandler),
|
||||
Mock.Of<IContentTypeService>(),
|
||||
new ApiElementBuilder(Mock.Of<IOutputExpansionStrategyAccessor>()),
|
||||
new SystemTextJsonSerializer(),
|
||||
new BlockListPropertyValueConstructorCache());
|
||||
new BlockListPropertyValueConstructorCache(),
|
||||
Mock.Of<IVariationContextAccessor>(),
|
||||
blockVarianceHandler);
|
||||
return editor;
|
||||
}
|
||||
|
||||
@@ -123,7 +126,7 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
var editor = CreateConverter();
|
||||
var config = ConfigForMany();
|
||||
var propertyType = GetPropertyType(config);
|
||||
var publishedElement = Mock.Of<IPublishedElement>();
|
||||
var publishedElement = GetPublishedElement();
|
||||
|
||||
string json = null;
|
||||
var converted =
|
||||
@@ -146,7 +149,7 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
var editor = CreateConverter();
|
||||
var config = ConfigForMany();
|
||||
var propertyType = GetPropertyType(config);
|
||||
var publishedElement = Mock.Of<IPublishedElement>();
|
||||
var publishedElement = GetPublishedElement();
|
||||
|
||||
var json = "{}";
|
||||
var converted =
|
||||
@@ -170,11 +173,16 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
""layout"": {
|
||||
""" + Constants.PropertyEditors.Aliases.BlockList + @""": [
|
||||
{
|
||||
""contentUdi"": ""umb://element/e7dba547615b4e9ab4ab2a7674845bc9""
|
||||
""contentKey"": ""e7dba547-615b-4e9a-b4ab-2a7674845bc9""
|
||||
}
|
||||
]
|
||||
},
|
||||
""contentData"": []
|
||||
""contentData"": [],
|
||||
""expose"": [
|
||||
{
|
||||
""contentKey"": ""e7dba547-615b-4e9a-b4ab-2a7674845bc9""
|
||||
}
|
||||
]
|
||||
}";
|
||||
|
||||
converted = editor.ConvertIntermediateToObject(publishedElement, propertyType, PropertyCacheLevel.None, json, false) as BlockListModel;
|
||||
@@ -188,13 +196,18 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
""layout"": {
|
||||
""" + Constants.PropertyEditors.Aliases.BlockList + @""": [
|
||||
{
|
||||
""contentUdi"": ""umb://element/e7dba547615b4e9ab4ab2a7674845bc9""
|
||||
""contentKey"": ""e7dba547-615b-4e9a-b4ab-2a7674845bc9""
|
||||
}
|
||||
]
|
||||
},
|
||||
""contentData"": [
|
||||
{
|
||||
""udi"": ""umb://element/e7dba547615b4e9ab4ab2a7674845bc9""
|
||||
""key"": ""e7dba547-615b-4e9a-b4ab-2a7674845bc9""
|
||||
}
|
||||
],
|
||||
""expose"": [
|
||||
{
|
||||
""contentKey"": ""e7dba547-615b-4e9a-b4ab-2a7674845bc9""
|
||||
}
|
||||
]
|
||||
}";
|
||||
@@ -210,7 +223,7 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
""layout"": {
|
||||
""" + Constants.PropertyEditors.Aliases.BlockList + @""": [
|
||||
{
|
||||
""contentUdi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D""
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -219,6 +232,11 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
""contentTypeKey"": """ + ContentKey1 + @""",
|
||||
""key"": ""1304E1DD-0000-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
],
|
||||
""expose"": [
|
||||
{
|
||||
""contentKey"": ""1304E1DD-0000-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
]
|
||||
}";
|
||||
|
||||
@@ -234,21 +252,26 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
var editor = CreateConverter();
|
||||
var config = ConfigForMany();
|
||||
var propertyType = GetPropertyType(config);
|
||||
var publishedElement = Mock.Of<IPublishedElement>();
|
||||
var publishedElement = GetPublishedElement();
|
||||
|
||||
var json = @"
|
||||
{
|
||||
""layout"": {
|
||||
""" + Constants.PropertyEditors.Aliases.BlockList + @""": [
|
||||
{
|
||||
""contentUdi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D""
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
]
|
||||
},
|
||||
""contentData"": [
|
||||
{
|
||||
""contentTypeKey"": """ + ContentKey1 + @""",
|
||||
""udi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D""
|
||||
""key"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
],
|
||||
""expose"": [
|
||||
{
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
}
|
||||
]
|
||||
}";
|
||||
@@ -262,7 +285,7 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
Assert.AreEqual(Guid.Parse("1304E1DD-AC87-4396-84FE-8A399231CB3D"), item0.Key);
|
||||
Assert.AreEqual("Test1", item0.ContentType.Alias);
|
||||
Assert.IsNull(converted[0].Settings);
|
||||
Assert.AreEqual(UdiParser.Parse("umb://element/1304E1DDAC87439684FE8A399231CB3D"), converted[0].ContentUdi);
|
||||
Assert.AreEqual(Guid.Parse("1304E1DD-AC87-4396-84FE-8A399231CB3D"), converted[0].ContentKey);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -271,51 +294,61 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
var editor = CreateConverter();
|
||||
var config = ConfigForMany();
|
||||
var propertyType = GetPropertyType(config);
|
||||
var publishedElement = Mock.Of<IPublishedElement>();
|
||||
var publishedElement = GetPublishedElement();
|
||||
|
||||
var json = @"
|
||||
{
|
||||
""layout"": {
|
||||
""" + Constants.PropertyEditors.Aliases.BlockList + @""": [
|
||||
{
|
||||
""contentUdi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D"",
|
||||
""settingsUdi"": ""umb://element/1F613E26CE274898908A561437AF5100""
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D"",
|
||||
""settingsKey"": ""1F613E26-CE27-4898-908A-561437AF5100""
|
||||
},
|
||||
{
|
||||
""contentUdi"": ""umb://element/0A4A416E547D464FABCC6F345C17809A"",
|
||||
""settingsUdi"": ""umb://element/63027539B0DB45E7B70459762D4E83DD""
|
||||
""contentKey"": ""0A4A416E-547D-464F-ABCC-6F345C17809A"",
|
||||
""settingsKey"": ""63027539-B0DB-45E7-B704-59762D4E83DD""
|
||||
}
|
||||
]
|
||||
},
|
||||
""contentData"": [
|
||||
{
|
||||
""contentTypeKey"": """ + ContentKey1 + @""",
|
||||
""udi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D""
|
||||
""key"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
},
|
||||
{
|
||||
""contentTypeKey"": """ + ContentKey2 + @""",
|
||||
""udi"": ""umb://element/E05A034704424AB3A520E048E6197E79""
|
||||
""key"": ""E05A0347-0442-4AB3-A520-E048E6197E79""
|
||||
},
|
||||
{
|
||||
""contentTypeKey"": """ + ContentKey2 + @""",
|
||||
""udi"": ""umb://element/0A4A416E547D464FABCC6F345C17809A""
|
||||
""key"": ""0A4A416E-547D-464F-ABCC-6F345C17809A""
|
||||
}
|
||||
],
|
||||
""settingsData"": [
|
||||
{
|
||||
""contentTypeKey"": """ + SettingKey1 + @""",
|
||||
""udi"": ""umb://element/63027539B0DB45E7B70459762D4E83DD""
|
||||
""key"": ""63027539-B0DB-45E7-B704-59762D4E83DD""
|
||||
},
|
||||
{
|
||||
""contentTypeKey"": """ + SettingKey2 + @""",
|
||||
""udi"": ""umb://element/1F613E26CE274898908A561437AF5100""
|
||||
""key"": ""1F613E26-CE27-4898-908A-561437AF5100""
|
||||
},
|
||||
{
|
||||
""contentTypeKey"": """ + SettingKey2 + @""",
|
||||
""udi"": ""umb://element/BCF4BA3DA40C496C93EC58FAC85F18B9""
|
||||
""key"": ""BCF4BA3D-A40C-496C-93EC-58FAC85F18B9""
|
||||
}
|
||||
]
|
||||
}";
|
||||
],
|
||||
""expose"": [
|
||||
{
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
},
|
||||
{
|
||||
""contentKey"": ""E05A0347-0442-4AB3-A520-E048E6197E79""
|
||||
},
|
||||
{
|
||||
""contentKey"": ""0A4A416E-547D-464F-ABCC-6F345C17809A""
|
||||
}
|
||||
]}";
|
||||
|
||||
var converted =
|
||||
editor.ConvertIntermediateToObject(publishedElement, propertyType, PropertyCacheLevel.None, json, false) as
|
||||
@@ -327,13 +360,13 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
var item0 = converted[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(Guid.Parse("1F613E26-CE27-4898-908A-561437AF5100"), item0.Settings!.Key);
|
||||
Assert.AreEqual("Setting2", item0.Settings.ContentType.Alias);
|
||||
|
||||
var item1 = converted[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(Guid.Parse("63027539-B0DB-45E7-B704-59762D4E83DD"), item1.Settings!.Key);
|
||||
Assert.AreEqual("Setting1", item1.Settings.ContentType.Alias);
|
||||
}
|
||||
|
||||
@@ -357,48 +390,59 @@ public class BlockListPropertyValueConverterTests : BlockPropertyValueConverterT
|
||||
};
|
||||
|
||||
var propertyType = GetPropertyType(config);
|
||||
var publishedElement = Mock.Of<IPublishedElement>();
|
||||
var publishedElement = GetPublishedElement();
|
||||
|
||||
var json = @"
|
||||
{
|
||||
""layout"": {
|
||||
""" + Constants.PropertyEditors.Aliases.BlockList + @""": [
|
||||
{
|
||||
""contentUdi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D"",
|
||||
""settingsUdi"": ""umb://element/1F613E26CE274898908A561437AF5100""
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D"",
|
||||
""settingsKey"": ""1F613E26-CE27-4898-908A-561437AF5100""
|
||||
},
|
||||
{
|
||||
""contentUdi"": ""umb://element/0A4A416E547D464FABCC6F345C17809A"",
|
||||
""settingsUdi"": ""umb://element/63027539B0DB45E7B70459762D4E83DD""
|
||||
""contentKey"": ""0A4A416E-547D-464F-ABCC-6F345C17809A"",
|
||||
""settingsKey"": ""63027539-B0DB-45E7-B704-59762D4E83DD""
|
||||
}
|
||||
]
|
||||
},
|
||||
""contentData"": [
|
||||
{
|
||||
""contentTypeKey"": """ + ContentKey1 + @""",
|
||||
""udi"": ""umb://element/1304E1DDAC87439684FE8A399231CB3D""
|
||||
""key"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
},
|
||||
{
|
||||
""contentTypeKey"": """ + ContentKey2 + @""",
|
||||
""udi"": ""umb://element/E05A034704424AB3A520E048E6197E79""
|
||||
""key"": ""E05A0347-0442-4AB3-A520-E048E6197E79""
|
||||
},
|
||||
{
|
||||
""contentTypeKey"": """ + ContentKey2 + @""",
|
||||
""udi"": ""umb://element/0A4A416E547D464FABCC6F345C17809A""
|
||||
""key"": ""0A4A416E-547D-464F-ABCC-6F345C17809A""
|
||||
}
|
||||
],
|
||||
""settingsData"": [
|
||||
{
|
||||
""contentTypeKey"": """ + SettingKey1 + @""",
|
||||
""udi"": ""umb://element/63027539B0DB45E7B70459762D4E83DD""
|
||||
""key"": ""63027539-B0DB-45E7-B704-59762D4E83DD""
|
||||
},
|
||||
{
|
||||
""contentTypeKey"": """ + SettingKey2 + @""",
|
||||
""udi"": ""umb://element/1F613E26CE274898908A561437AF5100""
|
||||
""key"": ""1F613E26-CE27-4898-908A-561437AF5100""
|
||||
},
|
||||
{
|
||||
""contentTypeKey"": """ + SettingKey2 + @""",
|
||||
""udi"": ""umb://element/BCF4BA3DA40C496C93EC58FAC85F18B9""
|
||||
""key"": ""BCF4BA3D-A40C-496C-93EC-58FAC85F18B9""
|
||||
}
|
||||
],
|
||||
""expose"": [
|
||||
{
|
||||
""contentKey"": ""1304E1DD-AC87-4396-84FE-8A399231CB3D""
|
||||
},
|
||||
{
|
||||
""contentKey"": ""E05A0347-0442-4AB3-A520-E048E6197E79""
|
||||
},
|
||||
{
|
||||
""contentKey"": ""0A4A416E-547D-464F-ABCC-6F345C17809A""
|
||||
}
|
||||
]
|
||||
}";
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Moq;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Models.PublishedContent;
|
||||
using Umbraco.Cms.Core.PublishedCache;
|
||||
|
||||
@@ -61,4 +62,7 @@ public abstract class BlockPropertyValueConverterTestsBase<TPropertyEditorConfig
|
||||
&& x.DataType == dataType);
|
||||
return propertyType;
|
||||
}
|
||||
|
||||
protected IPublishedElement GetPublishedElement()
|
||||
=> Mock.Of<IPublishedElement>(m => m.ContentType == Mock.Of<IPublishedContentType>());
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using Umbraco.Cms.Core.Cache.PropertyEditors;
|
||||
using Umbraco.Cms.Core.IO;
|
||||
using Umbraco.Cms.Core.Models.Blocks;
|
||||
using Umbraco.Cms.Core.PropertyEditors;
|
||||
using Umbraco.Cms.Core.PropertyEditors.ValueConverters;
|
||||
using Umbraco.Cms.Core.Serialization;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Core.Strings;
|
||||
@@ -35,6 +36,7 @@ public class DataValueEditorReuseTests
|
||||
_propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty<IDataEditor>));
|
||||
_dataValueReferenceFactories = new DataValueReferenceFactoryCollection(Enumerable.Empty<IDataValueReferenceFactory>);
|
||||
|
||||
var blockVarianceHandler = new BlockEditorVarianceHandler(Mock.Of<ILanguageService>());
|
||||
_dataValueEditorFactoryMock
|
||||
.Setup(m =>
|
||||
m.Create<BlockListPropertyEditorBase.BlockListEditorPropertyValueEditor>(It.IsAny<DataEditorAttribute>(), It.IsAny<BlockEditorDataConverter<BlockListValue, BlockListLayoutItem>>()))
|
||||
@@ -50,7 +52,8 @@ public class DataValueEditorReuseTests
|
||||
Mock.Of<IShortStringHelper>(),
|
||||
Mock.Of<IJsonSerializer>(),
|
||||
Mock.Of<IIOHelper>(),
|
||||
Mock.Of<IPropertyValidationService>()));
|
||||
Mock.Of<IPropertyValidationService>(),
|
||||
blockVarianceHandler));
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -27,25 +27,29 @@ public class RichTextPropertyEditorHelperTests
|
||||
{
|
||||
var input = JsonNode.Parse(""""
|
||||
{
|
||||
"markup": "<p>this is some markup</p><umb-rte-block data-content-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf02\"><!--Umbraco-Block--></umb-rte-block>",
|
||||
"markup": "<p>this is some markup</p><umb-rte-block data-content-key=\"36cc710a-d8a6-45d0-a07f-7bbd8742cf02\"><!--Umbraco-Block--></umb-rte-block>",
|
||||
"blocks": {
|
||||
"layout": {
|
||||
"Umbraco.TinyMCE": [{
|
||||
"contentUdi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf02",
|
||||
"settingsUdi": "umb://element/d2eeef66411142f4a1647a523eaffbc2"
|
||||
"contentKey": "36cc710a-d8a6-45d0-a07f-7bbd8742cf02",
|
||||
"settingsKey": "d2eeef66-4111-42f4-a164-7a523eaffbc2"
|
||||
}
|
||||
]
|
||||
},
|
||||
"contentData": [{
|
||||
"contentTypeKey": "b2f0806c-d231-4c78-88b2-3c97d26e1123",
|
||||
"udi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf02",
|
||||
"contentPropertyAlias": "A content property value"
|
||||
"key": "36cc710a-d8a6-45d0-a07f-7bbd8742cf02",
|
||||
"values": [
|
||||
{ "alias": "contentPropertyAlias", "value": "A content property value" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"settingsData": [{
|
||||
"contentTypeKey": "e7a9447f-e14d-44dd-9ae8-e68c3c3da598",
|
||||
"udi": "umb://element/d2eeef66411142f4a1647a523eaffbc2",
|
||||
"settingsPropertyAlias": "A settings property value"
|
||||
"key": "d2eeef66-4111-42f4-a164-7a523eaffbc2",
|
||||
"values": [
|
||||
{ "alias": "settingsPropertyAlias", "value": "A settings property value" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -55,7 +59,7 @@ public class RichTextPropertyEditorHelperTests
|
||||
var result = RichTextPropertyEditorHelper.TryParseRichTextEditorValue(input, JsonSerializer(), Logger(), out RichTextEditorValue? value);
|
||||
Assert.IsTrue(result);
|
||||
Assert.IsNotNull(value);
|
||||
Assert.AreEqual("<p>this is some markup</p><umb-rte-block data-content-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf02\"><!--Umbraco-Block--></umb-rte-block>", value.Markup);
|
||||
Assert.AreEqual("<p>this is some markup</p><umb-rte-block data-content-key=\"36cc710a-d8a6-45d0-a07f-7bbd8742cf02\"><!--Umbraco-Block--></umb-rte-block>", value.Markup);
|
||||
|
||||
Assert.IsNotNull(value.Blocks);
|
||||
|
||||
@@ -64,16 +68,30 @@ public class RichTextPropertyEditorHelperTests
|
||||
var contentTypeGuid = Guid.Parse("b2f0806c-d231-4c78-88b2-3c97d26e1123");
|
||||
var itemGuid = Guid.Parse("36cc710a-d8a6-45d0-a07f-7bbd8742cf02");
|
||||
Assert.AreEqual(contentTypeGuid, item.ContentTypeKey);
|
||||
Assert.AreEqual(new GuidUdi(Constants.UdiEntityType.Element, itemGuid), item.Udi);
|
||||
Assert.AreEqual(itemGuid, item.Key);
|
||||
Assert.AreEqual(itemGuid, item.Key);
|
||||
var contentProperties = value.Blocks.ContentData.First().Values;
|
||||
Assert.AreEqual(1, contentProperties.Count);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual("contentPropertyAlias", contentProperties.First().Alias);
|
||||
Assert.AreEqual("A content property value", contentProperties.First().Value);
|
||||
});
|
||||
|
||||
Assert.AreEqual(1, value.Blocks.SettingsData.Count);
|
||||
item = value.Blocks.SettingsData.Single();
|
||||
contentTypeGuid = Guid.Parse("e7a9447f-e14d-44dd-9ae8-e68c3c3da598");
|
||||
itemGuid = Guid.Parse("d2eeef66-4111-42f4-a164-7a523eaffbc2");
|
||||
Assert.AreEqual(contentTypeGuid, item.ContentTypeKey);
|
||||
Assert.AreEqual(new GuidUdi(Constants.UdiEntityType.Element, itemGuid), item.Udi);
|
||||
Assert.AreEqual(itemGuid, item.Key);
|
||||
Assert.AreEqual(itemGuid, item.Key);
|
||||
var settingsProperties = value.Blocks.SettingsData.First().Values;
|
||||
Assert.AreEqual(1, settingsProperties.Count);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual("settingsPropertyAlias", settingsProperties.First().Alias);
|
||||
Assert.AreEqual("A settings property value", settingsProperties.First().Value);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -81,25 +99,29 @@ public class RichTextPropertyEditorHelperTests
|
||||
{
|
||||
const string input = """
|
||||
{
|
||||
"markup": "<p>this is some markup</p><umb-rte-block data-content-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf02\"><!--Umbraco-Block--></umb-rte-block>",
|
||||
"markup": "<p>this is some markup</p><umb-rte-block data-content-key=\"36cc710a-d8a6-45d0-a07f-7bbd8742cf02\"><!--Umbraco-Block--></umb-rte-block>",
|
||||
"blocks": {
|
||||
"layout": {
|
||||
"Umbraco.TinyMCE": [{
|
||||
"contentUdi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf02",
|
||||
"settingsUdi": "umb://element/d2eeef66411142f4a1647a523eaffbc2"
|
||||
"contentKey": "36cc710a-d8a6-45d0-a07f-7bbd8742cf02",
|
||||
"settingsKey": "d2eeef66-4111-42f4-a164-7a523eaffbc2"
|
||||
}
|
||||
]
|
||||
},
|
||||
"contentData": [{
|
||||
"contentTypeKey": "b2f0806c-d231-4c78-88b2-3c97d26e1123",
|
||||
"udi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf02",
|
||||
"contentPropertyAlias": "A content property value"
|
||||
"key": "36cc710a-d8a6-45d0-a07f-7bbd8742cf02",
|
||||
"values": [
|
||||
{ "alias": "contentPropertyAlias", "value": "A content property value" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"settingsData": [{
|
||||
"contentTypeKey": "e7a9447f-e14d-44dd-9ae8-e68c3c3da598",
|
||||
"udi": "umb://element/d2eeef66411142f4a1647a523eaffbc2",
|
||||
"settingsPropertyAlias": "A settings property value"
|
||||
"key": "d2eeef66-4111-42f4-a164-7a523eaffbc2",
|
||||
"values": [
|
||||
{ "alias": "settingsPropertyAlias", "value": "A settings property value" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -109,7 +131,7 @@ public class RichTextPropertyEditorHelperTests
|
||||
var result = RichTextPropertyEditorHelper.TryParseRichTextEditorValue(input, JsonSerializer(), Logger(), out RichTextEditorValue? value);
|
||||
Assert.IsTrue(result);
|
||||
Assert.IsNotNull(value);
|
||||
Assert.AreEqual("<p>this is some markup</p><umb-rte-block data-content-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf02\"><!--Umbraco-Block--></umb-rte-block>", value.Markup);
|
||||
Assert.AreEqual("<p>this is some markup</p><umb-rte-block data-content-key=\"36cc710a-d8a6-45d0-a07f-7bbd8742cf02\"><!--Umbraco-Block--></umb-rte-block>", value.Markup);
|
||||
|
||||
Assert.IsNotNull(value.Blocks);
|
||||
|
||||
@@ -118,16 +140,30 @@ public class RichTextPropertyEditorHelperTests
|
||||
var contentTypeGuid = Guid.Parse("b2f0806c-d231-4c78-88b2-3c97d26e1123");
|
||||
var itemGuid = Guid.Parse("36cc710a-d8a6-45d0-a07f-7bbd8742cf02");
|
||||
Assert.AreEqual(contentTypeGuid, item.ContentTypeKey);
|
||||
Assert.AreEqual(new GuidUdi(Constants.UdiEntityType.Element, itemGuid), item.Udi);
|
||||
Assert.AreEqual(itemGuid, item.Key);
|
||||
Assert.AreEqual(itemGuid, item.Key);
|
||||
var contentProperties = value.Blocks.ContentData.First().Values;
|
||||
Assert.AreEqual(1, contentProperties.Count);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual("contentPropertyAlias", contentProperties.First().Alias);
|
||||
Assert.AreEqual("A content property value", contentProperties.First().Value);
|
||||
});
|
||||
|
||||
Assert.AreEqual(1, value.Blocks.SettingsData.Count);
|
||||
item = value.Blocks.SettingsData.Single();
|
||||
contentTypeGuid = Guid.Parse("e7a9447f-e14d-44dd-9ae8-e68c3c3da598");
|
||||
itemGuid = Guid.Parse("d2eeef66-4111-42f4-a164-7a523eaffbc2");
|
||||
Assert.AreEqual(contentTypeGuid, item.ContentTypeKey);
|
||||
Assert.AreEqual(new GuidUdi(Constants.UdiEntityType.Element, itemGuid), item.Udi);
|
||||
Assert.AreEqual(itemGuid, item.Key);
|
||||
Assert.AreEqual(itemGuid, item.Key);
|
||||
var settingsProperties = value.Blocks.SettingsData.First().Values;
|
||||
Assert.AreEqual(1, settingsProperties.Count);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual("settingsPropertyAlias", settingsProperties.First().Alias);
|
||||
Assert.AreEqual("A settings property value", settingsProperties.First().Value);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -135,18 +171,20 @@ public class RichTextPropertyEditorHelperTests
|
||||
{
|
||||
const string input = """
|
||||
{
|
||||
"markup": "<p>this is some markup</p><umb-rte-block data-content-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf02\"></umb-rte-block>",
|
||||
"markup": "<p>this is some markup</p><umb-rte-block data-content-key=\"36cc710a-d8a6-45d0-a07f-7bbd8742cf02\"></umb-rte-block>",
|
||||
"blocks": {
|
||||
"layout": {
|
||||
"Umbraco.TinyMCE": [{
|
||||
"contentUdi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf02"
|
||||
"contentKey": "36cc710a-d8a6-45d0-a07f-7bbd8742cf02"
|
||||
}
|
||||
]
|
||||
},
|
||||
"contentData": [{
|
||||
"contentTypeKey": "b2f0806c-d231-4c78-88b2-3c97d26e1123",
|
||||
"udi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf02",
|
||||
"contentPropertyAlias": "A content property value"
|
||||
"key": "36cc710a-d8a6-45d0-a07f-7bbd8742cf02",
|
||||
"values": [
|
||||
{ "alias": "contentPropertyAlias", "value": "A content property value" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"settingsData": []
|
||||
@@ -157,7 +195,7 @@ public class RichTextPropertyEditorHelperTests
|
||||
var result = RichTextPropertyEditorHelper.TryParseRichTextEditorValue(input, JsonSerializer(), Logger(), out RichTextEditorValue? value);
|
||||
Assert.IsTrue(result);
|
||||
Assert.IsNotNull(value);
|
||||
Assert.AreEqual("<p>this is some markup</p><umb-rte-block data-content-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf02\"></umb-rte-block>", value.Markup);
|
||||
Assert.AreEqual("<p>this is some markup</p><umb-rte-block data-content-key=\"36cc710a-d8a6-45d0-a07f-7bbd8742cf02\"></umb-rte-block>", value.Markup);
|
||||
|
||||
Assert.IsNotNull(value.Blocks);
|
||||
|
||||
@@ -166,8 +204,15 @@ public class RichTextPropertyEditorHelperTests
|
||||
var contentTypeGuid = Guid.Parse("b2f0806c-d231-4c78-88b2-3c97d26e1123");
|
||||
var itemGuid = Guid.Parse("36cc710a-d8a6-45d0-a07f-7bbd8742cf02");
|
||||
Assert.AreEqual(contentTypeGuid, item.ContentTypeKey);
|
||||
Assert.AreEqual(new GuidUdi(Constants.UdiEntityType.Element, itemGuid), item.Udi);
|
||||
Assert.AreEqual(itemGuid, item.Key);
|
||||
Assert.AreEqual(itemGuid, item.Key);
|
||||
var contentProperties = value.Blocks.ContentData.First().Values;
|
||||
Assert.AreEqual(1, contentProperties.Count);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual("contentPropertyAlias", contentProperties.First().Alias);
|
||||
Assert.AreEqual("A content property value", contentProperties.First().Value);
|
||||
});
|
||||
|
||||
Assert.AreEqual(0, value.Blocks.SettingsData.Count);
|
||||
}
|
||||
@@ -177,23 +222,23 @@ public class RichTextPropertyEditorHelperTests
|
||||
{
|
||||
const string input = """
|
||||
{
|
||||
"markup": "<p>this is <umb-rte-block-inline data-content-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf03\"></umb-rte-block-inline> some markup</p><umb-rte-block data-content-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf02\"></umb-rte-block>",
|
||||
"markup": "<p>this is <umb-rte-block-inline data-content-key=\"36cc710a-d8a6-45d0-a07f-7bbd8742cf03\"></umb-rte-block-inline> some markup</p><umb-rte-block data-content-key=\"36cc710a-d8a6-45d0-a07f-7bbd8742cf02\"></umb-rte-block>",
|
||||
"blocks": {
|
||||
"layout": {
|
||||
"Umbraco.TinyMCE": [{
|
||||
"contentUdi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf02"
|
||||
"contentKey": "36cc710a-d8a6-45d0-a07f-7bbd8742cf02"
|
||||
}, {
|
||||
"contentUdi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf03"
|
||||
"contentKey": "36cc710a-d8a6-45d0-a07f-7bbd8742cf03"
|
||||
}
|
||||
]
|
||||
},
|
||||
"contentData": [{
|
||||
"contentTypeKey": "b2f0806c-d231-4c78-88b2-3c97d26e1123",
|
||||
"udi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf02",
|
||||
"key": "36cc710a-d8a6-45d0-a07f-7bbd8742cf02",
|
||||
"contentPropertyAlias": "A content property value"
|
||||
}, {
|
||||
"contentTypeKey": "b2f0806c-d231-4c78-88b2-3c97d26e1124",
|
||||
"udi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf03",
|
||||
"key": "36cc710a-d8a6-45d0-a07f-7bbd8742cf03",
|
||||
"contentPropertyAlias": "A content property value"
|
||||
}
|
||||
],
|
||||
@@ -205,7 +250,7 @@ public class RichTextPropertyEditorHelperTests
|
||||
var result = RichTextPropertyEditorHelper.TryParseRichTextEditorValue(input, JsonSerializer(), Logger(), out RichTextEditorValue? value);
|
||||
Assert.IsTrue(result);
|
||||
Assert.IsNotNull(value);
|
||||
Assert.AreEqual("<p>this is <umb-rte-block-inline data-content-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf03\"></umb-rte-block-inline> some markup</p><umb-rte-block data-content-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf02\"></umb-rte-block>", value.Markup);
|
||||
Assert.AreEqual("<p>this is <umb-rte-block-inline data-content-key=\"36cc710a-d8a6-45d0-a07f-7bbd8742cf03\"></umb-rte-block-inline> some markup</p><umb-rte-block data-content-key=\"36cc710a-d8a6-45d0-a07f-7bbd8742cf02\"></umb-rte-block>", value.Markup);
|
||||
|
||||
Assert.IsNotNull(value.Blocks);
|
||||
|
||||
@@ -216,7 +261,6 @@ public class RichTextPropertyEditorHelperTests
|
||||
for (var i = 0; i < value.Blocks.ContentData.Count; i++) {
|
||||
var item = value.Blocks.ContentData[i];
|
||||
Assert.AreEqual(contentTypeGuids[i], item.ContentTypeKey);
|
||||
Assert.AreEqual(new GuidUdi(Constants.UdiEntityType.Element, itemGuids[i]), item.Udi);
|
||||
Assert.AreEqual(itemGuids[i], item.Key);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Models.Blocks;
|
||||
using Umbraco.Cms.Core.Models.PublishedContent;
|
||||
using Umbraco.Cms.Core.PropertyEditors.ValueConverters;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
|
||||
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.PropertyEditors;
|
||||
|
||||
// TODO KJA: more tests for BlockEditorVarianceHandler
|
||||
[TestFixture]
|
||||
public class BlockEditorVarianceHandlerTests
|
||||
{
|
||||
[Test]
|
||||
public async Task Assigns_Default_Culture_When_Culture_Variance_Is_Enabled()
|
||||
{
|
||||
var propertyValue = new BlockPropertyValue { Culture = null };
|
||||
var subject = BlockEditorVarianceHandler("da-DK");
|
||||
var result = await subject.AlignedPropertyVarianceAsync(
|
||||
propertyValue,
|
||||
PublishedPropertyType(ContentVariation.Culture),
|
||||
PublishedElement(ContentVariation.Culture));
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual("da-DK", result.Culture);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Removes_Default_Culture_When_Culture_Variance_Is_Disabled()
|
||||
{
|
||||
var propertyValue = new BlockPropertyValue { Culture = "da-DK" };
|
||||
var subject = BlockEditorVarianceHandler("da-DK");
|
||||
var result = await subject.AlignedPropertyVarianceAsync(
|
||||
propertyValue,
|
||||
PublishedPropertyType(ContentVariation.Nothing),
|
||||
PublishedElement(ContentVariation.Nothing));
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(null, result.Culture);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Ignores_NonDefault_Culture_When_Culture_Variance_Is_Disabled()
|
||||
{
|
||||
var propertyValue = new BlockPropertyValue { Culture = "en-US" };
|
||||
var subject = BlockEditorVarianceHandler("da-DK");
|
||||
var result = await subject.AlignedPropertyVarianceAsync(
|
||||
propertyValue,
|
||||
PublishedPropertyType(ContentVariation.Nothing),
|
||||
PublishedElement(ContentVariation.Nothing));
|
||||
Assert.IsNull(result);
|
||||
}
|
||||
|
||||
private static IPublishedPropertyType PublishedPropertyType(ContentVariation variation)
|
||||
{
|
||||
var propertyTypeMock = new Mock<IPublishedPropertyType>();
|
||||
propertyTypeMock.SetupGet(m => m.Variations).Returns(variation);
|
||||
return propertyTypeMock.Object;
|
||||
}
|
||||
|
||||
private static IPublishedElement PublishedElement(ContentVariation variation)
|
||||
{
|
||||
var contentTypeMock = new Mock<IPublishedContentType>();
|
||||
contentTypeMock.SetupGet(m => m.Variations).Returns(variation);
|
||||
var elementMock = new Mock<IPublishedElement>();
|
||||
elementMock.SetupGet(m => m.ContentType).Returns(contentTypeMock.Object);
|
||||
return elementMock.Object;
|
||||
}
|
||||
|
||||
private static BlockEditorVarianceHandler BlockEditorVarianceHandler(string defaultLanguageIsoCode)
|
||||
{
|
||||
var languageServiceMock = new Mock<ILanguageService>();
|
||||
languageServiceMock.Setup(m => m.GetDefaultIsoCodeAsync()).ReturnsAsync(defaultLanguageIsoCode);
|
||||
return new BlockEditorVarianceHandler(languageServiceMock.Object);
|
||||
}
|
||||
}
|
||||
@@ -11,14 +11,14 @@ public class JsonBlockValueConverterTests
|
||||
[Test]
|
||||
public void Can_Serialize_BlockGrid_With_Blocks()
|
||||
{
|
||||
var contentElementUdi1 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var settingsElementUdi1 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var contentElementUdi2 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var settingsElementUdi2 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var contentElementUdi3 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var settingsElementUdi3 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var contentElementUdi4 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var settingsElementUdi4 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var contentElementKey1 = Guid.NewGuid();
|
||||
var settingsElementKey1 = Guid.NewGuid();
|
||||
var contentElementKey2 = Guid.NewGuid();
|
||||
var settingsElementKey2 = Guid.NewGuid();
|
||||
var contentElementKey3 = Guid.NewGuid();
|
||||
var settingsElementKey3 = Guid.NewGuid();
|
||||
var contentElementKey4 = Guid.NewGuid();
|
||||
var settingsElementKey4 = Guid.NewGuid();
|
||||
|
||||
var elementType1Key = Guid.NewGuid();
|
||||
var elementType2Key = Guid.NewGuid();
|
||||
@@ -27,7 +27,7 @@ public class JsonBlockValueConverterTests
|
||||
|
||||
var blockGridValue = new BlockGridValue(
|
||||
[
|
||||
new BlockGridLayoutItem(contentElementUdi1, settingsElementUdi1)
|
||||
new BlockGridLayoutItem(contentElementKey1, settingsElementKey1)
|
||||
{
|
||||
ColumnSpan = 123,
|
||||
RowSpan = 456,
|
||||
@@ -37,7 +37,7 @@ public class JsonBlockValueConverterTests
|
||||
{
|
||||
Items =
|
||||
[
|
||||
new BlockGridLayoutItem(contentElementUdi3, settingsElementUdi3)
|
||||
new BlockGridLayoutItem(contentElementKey3, settingsElementKey3)
|
||||
{
|
||||
ColumnSpan = 12,
|
||||
RowSpan = 34,
|
||||
@@ -47,7 +47,7 @@ public class JsonBlockValueConverterTests
|
||||
{
|
||||
Items =
|
||||
[
|
||||
new BlockGridLayoutItem(contentElementUdi4, settingsElementUdi4)
|
||||
new BlockGridLayoutItem(contentElementKey4, settingsElementKey4)
|
||||
{
|
||||
ColumnSpan = 56,
|
||||
RowSpan = 78,
|
||||
@@ -60,7 +60,7 @@ public class JsonBlockValueConverterTests
|
||||
},
|
||||
],
|
||||
},
|
||||
new BlockGridLayoutItem(contentElementUdi2, settingsElementUdi2)
|
||||
new BlockGridLayoutItem(contentElementKey2, settingsElementKey2)
|
||||
{
|
||||
ColumnSpan = 789,
|
||||
RowSpan = 123,
|
||||
@@ -69,17 +69,17 @@ public class JsonBlockValueConverterTests
|
||||
{
|
||||
ContentData =
|
||||
[
|
||||
new(contentElementUdi1, elementType1Key, "elementType1"),
|
||||
new(contentElementUdi2, elementType2Key, "elementType2"),
|
||||
new(contentElementUdi3, elementType3Key, "elementType3"),
|
||||
new(contentElementUdi4, elementType4Key, "elementType4"),
|
||||
new(contentElementKey1, elementType1Key, "elementType1"),
|
||||
new(contentElementKey2, elementType2Key, "elementType2"),
|
||||
new(contentElementKey3, elementType3Key, "elementType3"),
|
||||
new(contentElementKey4, elementType4Key, "elementType4"),
|
||||
],
|
||||
SettingsData =
|
||||
[
|
||||
new(settingsElementUdi1, elementType3Key, "elementType3"),
|
||||
new(settingsElementUdi2, elementType4Key, "elementType4"),
|
||||
new(settingsElementUdi3, elementType1Key, "elementType1"),
|
||||
new(settingsElementUdi4, elementType2Key, "elementType2")
|
||||
new(settingsElementKey1, elementType3Key, "elementType3"),
|
||||
new(settingsElementKey2, elementType4Key, "elementType4"),
|
||||
new(settingsElementKey3, elementType1Key, "elementType1"),
|
||||
new(settingsElementKey4, elementType2Key, "elementType2")
|
||||
]
|
||||
};
|
||||
|
||||
@@ -97,13 +97,13 @@ public class JsonBlockValueConverterTests
|
||||
{
|
||||
Assert.AreEqual(123, layoutItems[0].ColumnSpan);
|
||||
Assert.AreEqual(456, layoutItems[0].RowSpan);
|
||||
Assert.AreEqual(contentElementUdi1, layoutItems[0].ContentUdi);
|
||||
Assert.AreEqual(settingsElementUdi1, layoutItems[0].SettingsUdi);
|
||||
Assert.AreEqual(contentElementKey1, layoutItems[0].ContentKey);
|
||||
Assert.AreEqual(settingsElementKey1, layoutItems[0].SettingsKey);
|
||||
|
||||
Assert.AreEqual(789, layoutItems[1].ColumnSpan);
|
||||
Assert.AreEqual(123, layoutItems[1].RowSpan);
|
||||
Assert.AreEqual(contentElementUdi2, layoutItems[1].ContentUdi);
|
||||
Assert.AreEqual(settingsElementUdi2, layoutItems[1].SettingsUdi);
|
||||
Assert.AreEqual(contentElementKey2, layoutItems[1].ContentKey);
|
||||
Assert.AreEqual(settingsElementKey2, layoutItems[1].SettingsKey);
|
||||
});
|
||||
|
||||
Assert.AreEqual(1, layoutItems[0].Areas.Length);
|
||||
@@ -113,8 +113,8 @@ public class JsonBlockValueConverterTests
|
||||
{
|
||||
Assert.AreEqual(12, layoutItems[0].Areas[0].Items[0].ColumnSpan);
|
||||
Assert.AreEqual(34, layoutItems[0].Areas[0].Items[0].RowSpan);
|
||||
Assert.AreEqual(contentElementUdi3, layoutItems[0].Areas[0].Items[0].ContentUdi);
|
||||
Assert.AreEqual(settingsElementUdi3, layoutItems[0].Areas[0].Items[0].SettingsUdi);
|
||||
Assert.AreEqual(contentElementKey3, layoutItems[0].Areas[0].Items[0].ContentKey);
|
||||
Assert.AreEqual(settingsElementKey3, layoutItems[0].Areas[0].Items[0].SettingsKey);
|
||||
});
|
||||
|
||||
Assert.AreEqual(1, layoutItems[0].Areas[0].Items[0].Areas.Length);
|
||||
@@ -124,26 +124,26 @@ public class JsonBlockValueConverterTests
|
||||
{
|
||||
Assert.AreEqual(56, layoutItems[0].Areas[0].Items[0].Areas[0].Items[0].ColumnSpan);
|
||||
Assert.AreEqual(78, layoutItems[0].Areas[0].Items[0].Areas[0].Items[0].RowSpan);
|
||||
Assert.AreEqual(contentElementUdi4, layoutItems[0].Areas[0].Items[0].Areas[0].Items[0].ContentUdi);
|
||||
Assert.AreEqual(settingsElementUdi4, layoutItems[0].Areas[0].Items[0].Areas[0].Items[0].SettingsUdi);
|
||||
Assert.AreEqual(contentElementKey4, layoutItems[0].Areas[0].Items[0].Areas[0].Items[0].ContentKey);
|
||||
Assert.AreEqual(settingsElementKey4, layoutItems[0].Areas[0].Items[0].Areas[0].Items[0].SettingsKey);
|
||||
});
|
||||
|
||||
Assert.AreEqual(4, deserialized.ContentData.Count);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(contentElementUdi1, deserialized.ContentData[0].Udi);
|
||||
Assert.AreEqual(contentElementKey1, deserialized.ContentData[0].Key);
|
||||
Assert.AreEqual(elementType1Key, deserialized.ContentData[0].ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.ContentData[0].ContentTypeAlias); // explicitly annotated to be ignored by the serializer
|
||||
|
||||
Assert.AreEqual(contentElementUdi2, deserialized.ContentData[1].Udi);
|
||||
Assert.AreEqual(contentElementKey2, deserialized.ContentData[1].Key);
|
||||
Assert.AreEqual(elementType2Key, deserialized.ContentData[1].ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.ContentData[1].ContentTypeAlias);
|
||||
|
||||
Assert.AreEqual(contentElementUdi3, deserialized.ContentData[2].Udi);
|
||||
Assert.AreEqual(contentElementKey3, deserialized.ContentData[2].Key);
|
||||
Assert.AreEqual(elementType3Key, deserialized.ContentData[2].ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.ContentData[2].ContentTypeAlias);
|
||||
|
||||
Assert.AreEqual(contentElementUdi3, deserialized.ContentData[2].Udi);
|
||||
Assert.AreEqual(contentElementKey3, deserialized.ContentData[2].Key);
|
||||
Assert.AreEqual(elementType3Key, deserialized.ContentData[2].ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.ContentData[2].ContentTypeAlias);
|
||||
});
|
||||
@@ -151,19 +151,19 @@ public class JsonBlockValueConverterTests
|
||||
Assert.AreEqual(4, deserialized.SettingsData.Count);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(settingsElementUdi1, deserialized.SettingsData[0].Udi);
|
||||
Assert.AreEqual(settingsElementKey1, deserialized.SettingsData[0].Key);
|
||||
Assert.AreEqual(elementType3Key, deserialized.SettingsData[0].ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.SettingsData[0].ContentTypeAlias);
|
||||
|
||||
Assert.AreEqual(settingsElementUdi2, deserialized.SettingsData[1].Udi);
|
||||
Assert.AreEqual(settingsElementKey2, deserialized.SettingsData[1].Key);
|
||||
Assert.AreEqual(elementType4Key, deserialized.SettingsData[1].ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.SettingsData[1].ContentTypeAlias);
|
||||
|
||||
Assert.AreEqual(settingsElementUdi3, deserialized.SettingsData[2].Udi);
|
||||
Assert.AreEqual(settingsElementKey3, deserialized.SettingsData[2].Key);
|
||||
Assert.AreEqual(elementType1Key, deserialized.SettingsData[2].ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.SettingsData[2].ContentTypeAlias);
|
||||
|
||||
Assert.AreEqual(settingsElementUdi4, deserialized.SettingsData[3].Udi);
|
||||
Assert.AreEqual(settingsElementKey4, deserialized.SettingsData[3].Key);
|
||||
Assert.AreEqual(elementType2Key, deserialized.SettingsData[3].ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.SettingsData[3].ContentTypeAlias);
|
||||
});
|
||||
@@ -189,10 +189,10 @@ public class JsonBlockValueConverterTests
|
||||
[Test]
|
||||
public void Can_Serialize_BlockList_With_Blocks()
|
||||
{
|
||||
var contentElementUdi1 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var settingsElementUdi1 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var contentElementUdi2 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var settingsElementUdi2 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var contentElementKey1 = Guid.NewGuid();
|
||||
var settingsElementKey1 = Guid.NewGuid();
|
||||
var contentElementKey2 = Guid.NewGuid();
|
||||
var settingsElementKey2 = Guid.NewGuid();
|
||||
|
||||
var elementType1Key = Guid.NewGuid();
|
||||
var elementType2Key = Guid.NewGuid();
|
||||
@@ -201,19 +201,19 @@ public class JsonBlockValueConverterTests
|
||||
|
||||
var blockListValue = new BlockListValue(
|
||||
[
|
||||
new BlockListLayoutItem(contentElementUdi1, settingsElementUdi1),
|
||||
new BlockListLayoutItem(contentElementUdi2, settingsElementUdi2),
|
||||
new BlockListLayoutItem(contentElementKey1, settingsElementKey1),
|
||||
new BlockListLayoutItem(contentElementKey2, settingsElementKey2),
|
||||
])
|
||||
{
|
||||
ContentData =
|
||||
[
|
||||
new(contentElementUdi1, elementType1Key, "elementType1"),
|
||||
new(contentElementUdi2, elementType2Key, "elementType2")
|
||||
new(contentElementKey1, elementType1Key, "elementType1"),
|
||||
new(contentElementKey2, elementType2Key, "elementType2")
|
||||
],
|
||||
SettingsData =
|
||||
[
|
||||
new(settingsElementUdi1, elementType3Key, "elementType3"),
|
||||
new(settingsElementUdi2, elementType4Key, "elementType4")
|
||||
new(settingsElementKey1, elementType3Key, "elementType3"),
|
||||
new(settingsElementKey2, elementType4Key, "elementType4")
|
||||
]
|
||||
};
|
||||
|
||||
@@ -229,21 +229,21 @@ public class JsonBlockValueConverterTests
|
||||
Assert.AreEqual(2, layoutItems.Count());
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(contentElementUdi1, layoutItems.First().ContentUdi);
|
||||
Assert.AreEqual(settingsElementUdi1, layoutItems.First().SettingsUdi);
|
||||
Assert.AreEqual(contentElementKey1, layoutItems.First().ContentKey);
|
||||
Assert.AreEqual(settingsElementKey1, layoutItems.First().SettingsKey);
|
||||
|
||||
Assert.AreEqual(contentElementUdi2, layoutItems.Last().ContentUdi);
|
||||
Assert.AreEqual(settingsElementUdi2, layoutItems.Last().SettingsUdi);
|
||||
Assert.AreEqual(contentElementKey2, layoutItems.Last().ContentKey);
|
||||
Assert.AreEqual(settingsElementKey2, layoutItems.Last().SettingsKey);
|
||||
});
|
||||
|
||||
Assert.AreEqual(2, deserialized.ContentData.Count);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(contentElementUdi1, deserialized.ContentData.First().Udi);
|
||||
Assert.AreEqual(contentElementKey1, deserialized.ContentData.First().Key);
|
||||
Assert.AreEqual(elementType1Key, deserialized.ContentData.First().ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.ContentData.First().ContentTypeAlias); // explicitly annotated to be ignored by the serializer
|
||||
|
||||
Assert.AreEqual(contentElementUdi2, deserialized.ContentData.Last().Udi);
|
||||
Assert.AreEqual(contentElementKey2, deserialized.ContentData.Last().Key);
|
||||
Assert.AreEqual(elementType2Key, deserialized.ContentData.Last().ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.ContentData.Last().ContentTypeAlias);
|
||||
});
|
||||
@@ -251,11 +251,11 @@ public class JsonBlockValueConverterTests
|
||||
Assert.AreEqual(2, deserialized.SettingsData.Count);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(settingsElementUdi1, deserialized.SettingsData.First().Udi);
|
||||
Assert.AreEqual(settingsElementKey1, deserialized.SettingsData.First().Key);
|
||||
Assert.AreEqual(elementType3Key, deserialized.SettingsData.First().ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.SettingsData.First().ContentTypeAlias);
|
||||
|
||||
Assert.AreEqual(settingsElementUdi2, deserialized.SettingsData.Last().Udi);
|
||||
Assert.AreEqual(settingsElementKey2, deserialized.SettingsData.Last().Key);
|
||||
Assert.AreEqual(elementType4Key, deserialized.SettingsData.Last().ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserialized.SettingsData.Last().ContentTypeAlias);
|
||||
});
|
||||
@@ -281,10 +281,10 @@ public class JsonBlockValueConverterTests
|
||||
[Test]
|
||||
public void Can_Serialize_Richtext_With_Blocks()
|
||||
{
|
||||
var contentElementUdi1 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var settingsElementUdi1 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var contentElementUdi2 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var settingsElementUdi2 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var contentElementKey1 = Guid.NewGuid();
|
||||
var settingsElementKey1 = Guid.NewGuid();
|
||||
var contentElementKey2 = Guid.NewGuid();
|
||||
var settingsElementKey2 = Guid.NewGuid();
|
||||
|
||||
var elementType1Key = Guid.NewGuid();
|
||||
var elementType2Key = Guid.NewGuid();
|
||||
@@ -293,19 +293,19 @@ public class JsonBlockValueConverterTests
|
||||
|
||||
var richTextBlockValue = new RichTextBlockValue(
|
||||
[
|
||||
new RichTextBlockLayoutItem(contentElementUdi1, settingsElementUdi1),
|
||||
new RichTextBlockLayoutItem(contentElementUdi2, settingsElementUdi2),
|
||||
new RichTextBlockLayoutItem(contentElementKey1, settingsElementKey1),
|
||||
new RichTextBlockLayoutItem(contentElementKey2, settingsElementKey2),
|
||||
])
|
||||
{
|
||||
ContentData =
|
||||
[
|
||||
new(contentElementUdi1, elementType1Key, "elementType1"),
|
||||
new(contentElementUdi2, elementType2Key, "elementType2")
|
||||
new(contentElementKey1, elementType1Key, "elementType1"),
|
||||
new(contentElementKey2, elementType2Key, "elementType2")
|
||||
],
|
||||
SettingsData =
|
||||
[
|
||||
new(settingsElementUdi1, elementType3Key, "elementType3"),
|
||||
new(settingsElementUdi2, elementType4Key, "elementType4")
|
||||
new(settingsElementKey1, elementType3Key, "elementType3"),
|
||||
new(settingsElementKey2, elementType4Key, "elementType4")
|
||||
]
|
||||
};
|
||||
|
||||
@@ -325,26 +325,26 @@ public class JsonBlockValueConverterTests
|
||||
var deserializedBlocks = deserialized.Blocks;
|
||||
Assert.IsNotNull(deserializedBlocks);
|
||||
Assert.AreEqual(1, deserializedBlocks.Layout.Count);
|
||||
Assert.IsTrue(deserializedBlocks.Layout.ContainsKey(Constants.PropertyEditors.Aliases.TinyMce));
|
||||
var layoutItems = deserializedBlocks.Layout[Constants.PropertyEditors.Aliases.TinyMce].OfType<RichTextBlockLayoutItem>().ToArray();
|
||||
Assert.IsTrue(deserializedBlocks.Layout.ContainsKey(Constants.PropertyEditors.Aliases.RichText));
|
||||
var layoutItems = deserializedBlocks.Layout[Constants.PropertyEditors.Aliases.RichText].OfType<RichTextBlockLayoutItem>().ToArray();
|
||||
Assert.AreEqual(2, layoutItems.Count());
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(contentElementUdi1, layoutItems.First().ContentUdi);
|
||||
Assert.AreEqual(settingsElementUdi1, layoutItems.First().SettingsUdi);
|
||||
Assert.AreEqual(contentElementKey1, layoutItems.First().ContentKey);
|
||||
Assert.AreEqual(settingsElementKey1, layoutItems.First().SettingsKey);
|
||||
|
||||
Assert.AreEqual(contentElementUdi2, layoutItems.Last().ContentUdi);
|
||||
Assert.AreEqual(settingsElementUdi2, layoutItems.Last().SettingsUdi);
|
||||
Assert.AreEqual(contentElementKey2, layoutItems.Last().ContentKey);
|
||||
Assert.AreEqual(settingsElementKey2, layoutItems.Last().SettingsKey);
|
||||
});
|
||||
|
||||
Assert.AreEqual(2, deserializedBlocks.ContentData.Count);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(contentElementUdi1, deserializedBlocks.ContentData.First().Udi);
|
||||
Assert.AreEqual(contentElementKey1, deserializedBlocks.ContentData.First().Key);
|
||||
Assert.AreEqual(elementType1Key, deserializedBlocks.ContentData.First().ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserializedBlocks.ContentData.First().ContentTypeAlias); // explicitly annotated to be ignored by the serializer
|
||||
|
||||
Assert.AreEqual(contentElementUdi2, deserializedBlocks.ContentData.Last().Udi);
|
||||
Assert.AreEqual(contentElementKey2, deserializedBlocks.ContentData.Last().Key);
|
||||
Assert.AreEqual(elementType2Key, deserializedBlocks.ContentData.Last().ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserializedBlocks.ContentData.Last().ContentTypeAlias);
|
||||
});
|
||||
@@ -352,11 +352,11 @@ public class JsonBlockValueConverterTests
|
||||
Assert.AreEqual(2, deserializedBlocks.SettingsData.Count);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(settingsElementUdi1, deserializedBlocks.SettingsData.First().Udi);
|
||||
Assert.AreEqual(settingsElementKey1, deserializedBlocks.SettingsData.First().Key);
|
||||
Assert.AreEqual(elementType3Key, deserializedBlocks.SettingsData.First().ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserializedBlocks.SettingsData.First().ContentTypeAlias);
|
||||
|
||||
Assert.AreEqual(settingsElementUdi2, deserializedBlocks.SettingsData.Last().Udi);
|
||||
Assert.AreEqual(settingsElementKey2, deserializedBlocks.SettingsData.Last().Key);
|
||||
Assert.AreEqual(elementType4Key, deserializedBlocks.SettingsData.Last().ContentTypeKey);
|
||||
Assert.AreEqual(string.Empty, deserializedBlocks.SettingsData.Last().ContentTypeAlias);
|
||||
});
|
||||
@@ -389,39 +389,39 @@ public class JsonBlockValueConverterTests
|
||||
[Test]
|
||||
public void Ignores_Other_Layouts()
|
||||
{
|
||||
var contentElementUdi1 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var settingsElementUdi1 = Udi.Create(Constants.UdiEntityType.Element, Guid.NewGuid());
|
||||
var contentElementKey1 = Guid.NewGuid();
|
||||
var settingsElementKey1 = Guid.NewGuid();
|
||||
|
||||
var elementType1Key = Guid.NewGuid();
|
||||
var elementType2Key = Guid.NewGuid();
|
||||
|
||||
var blockListValue = new BlockListValue(
|
||||
[
|
||||
new BlockListLayoutItem(contentElementUdi1, settingsElementUdi1),
|
||||
new BlockListLayoutItem(contentElementKey1, settingsElementKey1),
|
||||
])
|
||||
{
|
||||
Layout =
|
||||
{
|
||||
[Constants.PropertyEditors.Aliases.TinyMce] =
|
||||
[Constants.PropertyEditors.Aliases.RichText] =
|
||||
[
|
||||
new RichTextBlockLayoutItem(contentElementUdi1, settingsElementUdi1)
|
||||
new RichTextBlockLayoutItem(contentElementKey1, settingsElementKey1)
|
||||
],
|
||||
[Constants.PropertyEditors.Aliases.BlockGrid] =
|
||||
[
|
||||
new BlockGridLayoutItem(contentElementUdi1, settingsElementUdi1),
|
||||
new BlockGridLayoutItem(contentElementKey1, settingsElementKey1),
|
||||
],
|
||||
["Some.Custom.Block.Editor"] =
|
||||
[
|
||||
new BlockListLayoutItem(contentElementUdi1, settingsElementUdi1),
|
||||
new BlockListLayoutItem(contentElementKey1, settingsElementKey1),
|
||||
]
|
||||
},
|
||||
ContentData =
|
||||
[
|
||||
new(contentElementUdi1, elementType1Key, "elementType1"),
|
||||
new(contentElementKey1, elementType1Key, "elementType1"),
|
||||
],
|
||||
SettingsData =
|
||||
[
|
||||
new(settingsElementUdi1, elementType2Key, "elementType2")
|
||||
new(settingsElementKey1, elementType2Key, "elementType2")
|
||||
]
|
||||
};
|
||||
|
||||
@@ -437,8 +437,8 @@ public class JsonBlockValueConverterTests
|
||||
Assert.AreEqual(1, layoutItems.Count());
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(contentElementUdi1, layoutItems.First().ContentUdi);
|
||||
Assert.AreEqual(settingsElementUdi1, layoutItems.First().SettingsUdi);
|
||||
Assert.AreEqual(contentElementKey1, layoutItems.First().ContentKey);
|
||||
Assert.AreEqual(settingsElementKey1, layoutItems.First().SettingsKey);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user