>([new(_message) { ResultType = _resultType }]);
+ }
+
+ [HealthCheck("CFD6FC34-59C9-4402-B55F-C8BC96B628A1", "Success Check")]
+ public class SuccessHealthCheck : StubHealthCheck
+ {
+ public SuccessHealthCheck()
+ : base(StatusResultType.Success, "Check passed")
+ {
+ }
+ }
+
+ [HealthCheck("CFD6FC34-59C9-4402-B55F-C8BC96B628A2", "Warning Check")]
+ public class WarningHealthCheck : StubHealthCheck
+ {
+ public WarningHealthCheck()
+ : base(StatusResultType.Warning, "Check has warnings")
+ {
+ }
+ }
+
+ [HealthCheck("CFD6FC34-59C9-4402-B55F-C8BC96B628A3", "Error Check")]
+ public class ErrorHealthCheck : StubHealthCheck
+ {
+ public ErrorHealthCheck()
+ : base(StatusResultType.Error, "Check failed")
+ {
+ }
+ }
+
+#pragma warning disable CS0618 // Type or member is obsolete
+ private static MarkdownToHtmlConverter CreateConverter() =>
+ new(new HeyRedMarkdownToHtmlConverter());
+#pragma warning restore CS0618 // Type or member is obsolete
+}
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Strings/MarkdownToHtmlConverterTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Strings/MarkdownToHtmlConverterTests.cs
new file mode 100644
index 000000000000..cc61073c5d43
--- /dev/null
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Strings/MarkdownToHtmlConverterTests.cs
@@ -0,0 +1,75 @@
+using System.Text.RegularExpressions;
+using NUnit.Framework;
+using Umbraco.Cms.Infrastructure.Strings;
+
+namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Strings;
+
+[TestFixture]
+public partial class MarkdownToHtmlConverterTests
+{
+ private const string MarkdownSample = """
+ # Heading
+
+ This is **bold** and *italic* text.
+
+ - Item one
+ - Item two
+
+ ```
+ var x = 1;
+ ```
+ """;
+
+ [Test]
+ public void MarkdigMarkdownToHtmlConverter_ToHtml_ConvertsMarkdownToHtml()
+ {
+ var converter = new MarkdigMarkdownToHtmlConverter();
+
+ var result = converter.ToHtml(MarkdownSample);
+
+ const string ExpectedHtml = """
+ Heading
+ This is bold and italic text.
+
+ var x = 1;
+ """;
+
+ Assert.That(NormalizeHtml(result), Is.EqualTo(NormalizeHtml(ExpectedHtml)));
+ }
+
+#pragma warning disable CS0618 // Type or member is obsolete
+ [Test]
+ public void HeyRedMarkdownToHtmlConverter_ToHtml_ConvertsMarkdownToHtml()
+ {
+ var converter = new HeyRedMarkdownToHtmlConverter();
+
+ var result = converter.ToHtml(MarkdownSample);
+
+ const string ExpectedHtml = """
+ Heading
+ This is bold and italic text.
+
+ var x = 1;
+ """;
+
+ Assert.That(NormalizeHtml(result), Is.EqualTo(NormalizeHtml(ExpectedHtml)));
+ }
+#pragma warning restore CS0618 // Type or member is obsolete
+
+ private static string NormalizeHtml(string html) =>
+ WhitespaceBeforeTagRegex().Replace(
+ WhitespaceAfterTagRegex().Replace(html, ">"),
+ "<").Trim();
+
+ [GeneratedRegex(@">\s+")]
+ private static partial Regex WhitespaceAfterTagRegex();
+
+ [GeneratedRegex(@"\s+<")]
+ private static partial Regex WhitespaceBeforeTagRegex();
+}