File: Mcp\ApiDocs\ApiSitemapParserTests.cs
Web Access
Project: src\tests\Aspire.Cli.Tests\Aspire.Cli.Tests.csproj (Aspire.Cli.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.Cli.Documentation.ApiDocs;
 
namespace Aspire.Cli.Tests.Documentation.ApiDocs;
 
public class ApiSitemapParserTests
{
    [Fact]
    public void Parse_WithEmptyContent_ReturnsEmptyList()
    {
        var result = ApiSitemapParser.Parse("");
 
        Assert.Empty(result);
    }
 
    [Fact]
    public void Parse_FiltersToSupportedApiRoutes()
    {
        var sitemap = """
            <?xml version="1.0" encoding="UTF-8"?>
            <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
              <url><loc>https://aspire.dev/getting-started/</loc></url>
              <url><loc>https://aspire.dev/reference/api/csharp/aspire.test.package/</loc></url>
              <url><loc>https://aspire.dev/reference/api/typescript/aspire.hosting.test/</loc></url>
              <url><loc>https://aspire.dev/da/reference/api/csharp/aspire.test.package/</loc></url>
            </urlset>
            """;
 
        var result = ApiSitemapParser.Parse(sitemap);
 
        Assert.Collection(
            result,
            entry =>
            {
                Assert.Equal("csharp", entry.Language);
                Assert.Equal(["aspire.test.package"], entry.Segments);
            },
            entry =>
            {
                Assert.Equal("typescript", entry.Language);
                Assert.Equal(["aspire.hosting.test"], entry.Segments);
            });
    }
 
    [Fact]
    public void Parse_ParsesHierarchySegments()
    {
        var sitemap = """
            <?xml version="1.0" encoding="UTF-8"?>
            <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
              <url><loc>https://aspire.dev/reference/api/csharp/aspire.test.package/testtype/methods/</loc></url>
              <url><loc>https://aspire.dev/reference/api/typescript/aspire.hosting.test/testresource/runasemulator/</loc></url>
            </urlset>
            """;
 
        var result = ApiSitemapParser.Parse(sitemap);
 
        Assert.Collection(
            result,
            entry =>
            {
                Assert.Equal("https://aspire.dev/reference/api/csharp/aspire.test.package/testtype/methods", entry.Url);
                Assert.Equal(["aspire.test.package", "testtype", "methods"], entry.Segments);
            },
            entry =>
            {
                Assert.Equal("https://aspire.dev/reference/api/typescript/aspire.hosting.test/testresource/runasemulator", entry.Url);
                Assert.Equal(["aspire.hosting.test", "testresource", "runasemulator"], entry.Segments);
             });
    }
 
    [Fact]
    public void Parse_DoesNotMatchPartialLanguagePrefixes()
    {
        var sitemap = """
            <?xml version="1.0" encoding="UTF-8"?>
            <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
              <url><loc>https://aspire.dev/reference/api/csharply/aspire.test.package/</loc></url>
              <url><loc>https://aspire.dev/reference/api/typescript-extra/aspire.hosting.test/</loc></url>
              <url><loc>https://aspire.dev/reference/api/csharp/aspire.test.package/</loc></url>
            </urlset>
            """;
 
        var result = ApiSitemapParser.Parse(sitemap);
 
        var entry = Assert.Single(result);
        Assert.Equal(ApiReferenceLanguages.CSharp, entry.Language);
        Assert.Equal(["aspire.test.package"], entry.Segments);
    }
}