File: Markdown\MarkdownHelperTests.cs
Web Access
Project: src\tests\Aspire.Dashboard.Tests\Aspire.Dashboard.Tests.csproj (Aspire.Dashboard.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Aspire.Dashboard.Model.Markdown;
using Markdig;
using Xunit;
 
namespace Aspire.Dashboard.Tests.Markdown;
 
public class MarkdownHelperTests
{
    [Fact]
    public void ToHtml_InCompleteDocumentAndSubListDash_NoHeader()
    {
        // Arrange
        var markdown =
            """
            3. **Waiting Resources:**
               -
            """;
 
        // Act
        var html = ToHtml(markdown);
 
        // Assert
        Assert.Equal(
            """
            <ol start="3">
            <li><strong>Waiting Resources:</strong></li>
            </ol>
            """, html.Trim(), ignoreLineEndingDifferences: true);
    }
 
    [Fact]
    public void ToHtml_InCompleteDocumentAndInProgressBold_NoHeader()
    {
        // Arrange
        var markdown =
            """
            3. **Waiting
            """;
 
        // Act
        var html = ToHtml(markdown);
 
        // Assert
        Assert.Equal(
            """
            <ol start="3">
            <li><strong>Waiting</strong></li>
            </ol>
            """, html.Trim(), ignoreLineEndingDifferences: true);
    }
 
    [Fact]
    public void ToHtml_InCompleteDocumentAndStartedBold_NoHeader()
    {
        // Arrange
        var markdown =
            """
            3. **
            """;
 
        // Act
        var html = ToHtml(markdown);
 
        // Assert
        Assert.Equal(
            """
            <ol start="3">
            <li></li>
            </ol>
            """, html.Trim(), ignoreLineEndingDifferences: true);
    }
 
    [Theory]
    [InlineData("before [")]
    [InlineData("before [link")]
    [InlineData("before [link]")]
    [InlineData("before [link](http://example.com")]
    public void ToHtml_InCompleteDocumentAndLinkInProgress_NoLink(string markdown)
    {
        // Arrange & Act
        var html = ToHtml(markdown);
 
        // Assert
        Assert.Equal(
            """
            <p>before </p>
            """, html.Trim(), ignoreLineEndingDifferences: true);
    }
 
    [Fact]
    public void ToHtml_InCompleteDocumentAndLinkFinished_Link()
    {
        // Arrange
        var markdown = "before [link](http://example.com)";
 
        // Act
        var html = ToHtml(markdown);
 
        // Assert
        Assert.Equal(
            """
            <p>before <a href="http://example.com" target="_blank" rel="noopener noreferrer nofollow">link</a></p>
            """, html.Trim(), ignoreLineEndingDifferences: true);
    }
 
    private static string ToHtml(string markdown)
    {
        return MarkdownHelpers.ToHtml(markdown, new MarkdownOptions
        {
            Pipeline = new MarkdownPipelineBuilder().Build(),
            IncompleteDocument = true,
            AllowedUrlSchemes = null,
            SuppressSurroundingParagraph = false
        });
    }
}