V15: Allows blocks in rich text editor to leave out the "Umbraco-Block" HTML comment (#17118)
* feat: allows blocks in rte to leave out the "Umbraco-Block" comment from their bodies * test: add unit test to test blocks without html comments as well as inline blocks
This commit is contained in:
@@ -135,7 +135,7 @@ 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-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf02\"></umb-rte-block>",
|
||||
"blocks": {
|
||||
"layout": {
|
||||
"Umbraco.TinyMCE": [{
|
||||
@@ -157,7 +157,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-udi=\"umb://element/36cc710ad8a645d0a07f7bbd8742cf02\"></umb-rte-block>", value.Markup);
|
||||
|
||||
Assert.IsNotNull(value.Blocks);
|
||||
|
||||
@@ -172,6 +172,57 @@ public class RichTextPropertyEditorHelperTests
|
||||
Assert.AreEqual(0, value.Blocks.SettingsData.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Can_Parse_Mixed_Blocks_And_Inline_Blocks()
|
||||
{
|
||||
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>",
|
||||
"blocks": {
|
||||
"layout": {
|
||||
"Umbraco.TinyMCE": [{
|
||||
"contentUdi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf02"
|
||||
}, {
|
||||
"contentUdi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf03"
|
||||
}
|
||||
]
|
||||
},
|
||||
"contentData": [{
|
||||
"contentTypeKey": "b2f0806c-d231-4c78-88b2-3c97d26e1123",
|
||||
"udi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf02",
|
||||
"contentPropertyAlias": "A content property value"
|
||||
}, {
|
||||
"contentTypeKey": "b2f0806c-d231-4c78-88b2-3c97d26e1124",
|
||||
"udi": "umb://element/36cc710ad8a645d0a07f7bbd8742cf03",
|
||||
"contentPropertyAlias": "A content property value"
|
||||
}
|
||||
],
|
||||
"settingsData": []
|
||||
}
|
||||
}
|
||||
""";
|
||||
|
||||
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.IsNotNull(value.Blocks);
|
||||
|
||||
Guid[] contentTypeGuids = [Guid.Parse("b2f0806c-d231-4c78-88b2-3c97d26e1123"), Guid.Parse("b2f0806c-d231-4c78-88b2-3c97d26e1124")];
|
||||
Guid[] itemGuids = [Guid.Parse("36cc710a-d8a6-45d0-a07f-7bbd8742cf02"), Guid.Parse("36cc710a-d8a6-45d0-a07f-7bbd8742cf03")];
|
||||
|
||||
Assert.AreEqual(2, value.Blocks.ContentData.Count);
|
||||
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);
|
||||
}
|
||||
|
||||
Assert.AreEqual(0, value.Blocks.SettingsData.Count);
|
||||
}
|
||||
|
||||
private IJsonSerializer JsonSerializer() => new SystemTextJsonSerializer();
|
||||
|
||||
private ILogger Logger() => Mock.Of<ILogger>();
|
||||
|
||||
Reference in New Issue
Block a user