Migrations: Handles rich text blocks created with TinyMCE in convert local links migration and refreshes internal datatype cache following migration requiring cache rebuild (closes #20885) (#20887)

Handles rich text blocks created with TinyMCE in convert local links migration.
Refreshes internal datatype cache following migration requiring cache rebuild.
This commit is contained in:
Andy Butland
2025-11-19 14:54:12 +01:00
parent cc8d90be91
commit 745d74104e
7 changed files with 82 additions and 6 deletions

View File

@@ -10,6 +10,7 @@ using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Configuration;
using Umbraco.Cms.Core.Events;
using Umbraco.Cms.Core.Migrations;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Scoping;
using Umbraco.Cms.Core.Services;
@@ -38,6 +39,7 @@ internal sealed class AdvancedMigrationTests : UmbracoIntegrationTest
private IServiceScopeFactory ServiceScopeFactory => GetRequiredService<IServiceScopeFactory>();
private DistributedCache DistributedCache => GetRequiredService<DistributedCache>();
private IDatabaseCacheRebuilder DatabaseCacheRebuilder => GetRequiredService<IDatabaseCacheRebuilder>();
private IPublishedContentTypeFactory PublishedContentTypeFactory => GetRequiredService<IPublishedContentTypeFactory>();
private IMigrationPlanExecutor MigrationPlanExecutor => new MigrationPlanExecutor(
CoreScopeProvider,
ScopeAccessor,
@@ -48,7 +50,8 @@ internal sealed class AdvancedMigrationTests : UmbracoIntegrationTest
DistributedCache,
Mock.Of<IKeyValueService>(),
ServiceScopeFactory,
AppCaches.NoCache);
AppCaches.NoCache,
PublishedContentTypeFactory);
[Test]
public async Task CreateTableOfTDtoAsync()

View File

@@ -110,15 +110,16 @@ public class RichTextPropertyEditorHelperTests
Assert.IsNull(value.Blocks);
}
[Test]
public void Can_Parse_Blocks_With_Both_Content_And_Settings()
[TestCase(Constants.PropertyEditors.Aliases.RichText)]
[TestCase("Umbraco.TinyMCE")]
public void Can_Parse_Blocks_With_Both_Content_And_Settings(string propertyEditorAlias)
{
const string input = """
string input = """
{
"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.RichText": [{
"[PropertyEditorAlias]": [{
"contentKey": "36cc710a-d8a6-45d0-a07f-7bbd8742cf02",
"settingsKey": "d2eeef66-4111-42f4-a164-7a523eaffbc2"
}
@@ -143,6 +144,7 @@ public class RichTextPropertyEditorHelperTests
}
}
""";
input = input.Replace("[PropertyEditorAlias]", propertyEditorAlias);
var result = RichTextPropertyEditorHelper.TryParseRichTextEditorValue(input, JsonSerializer(), Logger(), out RichTextEditorValue? value);
Assert.IsTrue(result);
@@ -180,6 +182,12 @@ public class RichTextPropertyEditorHelperTests
Assert.AreEqual("settingsPropertyAlias", settingsProperties.First().Alias);
Assert.AreEqual("A settings property value", settingsProperties.First().Value);
});
Assert.IsTrue(value.Blocks.Layout.ContainsKey(Constants.PropertyEditors.Aliases.RichText));
var layout = value.Blocks.Layout[Constants.PropertyEditors.Aliases.RichText];
Assert.AreEqual(1, layout.Count());
Assert.AreEqual(Guid.Parse("36cc710a-d8a6-45d0-a07f-7bbd8742cf02"), layout.First().ContentKey);
Assert.AreEqual(Guid.Parse("d2eeef66-4111-42f4-a164-7a523eaffbc2"), layout.First().SettingsKey);
}
[Test]

View File

@@ -12,6 +12,7 @@ using NUnit.Framework;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Events;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Sync;
@@ -85,7 +86,8 @@ public class MigrationPlanTests
distributedCache,
Mock.Of<IKeyValueService>(),
Mock.Of<IServiceScopeFactory>(),
appCaches);
appCaches,
Mock.Of<IPublishedContentTypeFactory>());
var plan = new MigrationPlan("default")
.From(string.Empty)