| File: Mcp\ApiDocs\ApiDocsSourceConfigurationTests.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; using Microsoft.Extensions.Configuration; namespace Aspire.Cli.Tests.Documentation.ApiDocs; public class ApiDocsSourceConfigurationTests { [Fact] public void GetSitemapUrl_PrefersAspireConfigDocsApiPath() { var configuration = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary<string, string?> { [ApiDocsSourceConfiguration.SitemapUrlConfigPath] = "http://localhost:4321/sitemap-0.xml" }) .Build(); var sitemapUrl = ApiDocsSourceConfiguration.GetSitemapUrl(configuration); Assert.Equal("http://localhost:4321/sitemap-0.xml", sitemapUrl); } [Fact] public void GetSitemapUrl_DefaultsToBuiltInSource() { var configuration = new ConfigurationBuilder().Build(); var sitemapUrl = ApiDocsSourceConfiguration.GetSitemapUrl(configuration); Assert.Equal(ApiDocsSourceConfiguration.DefaultSitemapUrl, sitemapUrl); } [Fact] public void GetSitemapContentCacheKey_DefaultSourceUsesFriendlyStem() { var cacheKey = ApiDocsSourceConfiguration.GetSitemapContentCacheKey("https://aspire.dev/sitemap-0.xml"); Assert.Equal("sitemap-0", cacheKey); } [Fact] public void GetIndexCacheKey_UsesConfiguredSourceUrl() { var aspireDevKey = ApiDocsSourceConfiguration.GetIndexCacheKey("https://aspire.dev/sitemap-0.xml"); var localhostKey = ApiDocsSourceConfiguration.GetIndexCacheKey("http://localhost:4321/sitemap-0.xml"); Assert.Equal("index:sitemap-0", aspireDevKey); Assert.NotEqual(aspireDevKey, localhostKey); } [Fact] public void BuildMarkdownUrl_RebasesConfiguredHost() { var markdownUrl = ApiDocsSourceConfiguration.BuildMarkdownUrl( "https://aspire.dev/reference/api/csharp/aspire.test.package/testtype/methods", "http://localhost:4321/sitemap-0.xml"); Assert.Equal("http://localhost:4321/reference/api/csharp/aspire.test.package/testtype/methods.md", markdownUrl); } [Fact] public void BuildMarkdownUrl_StripsFragmentFromAnchoredMemberUrl() { var markdownUrl = ApiDocsSourceConfiguration.BuildMarkdownUrl( "https://aspire.dev/reference/api/csharp/aspire.test.package/testtype/methods#dothing-string", "https://aspire.dev/sitemap-0.xml"); Assert.Equal("https://aspire.dev/reference/api/csharp/aspire.test.package/testtype/methods.md", markdownUrl); } [Fact] public void GetPageContentCacheKey_DefaultHostOmitsSchemeAndHost() { var cacheKey = ApiDocsSourceConfiguration.GetPageContentCacheKey( "https://aspire.dev/reference/api/csharp/aspire.test.package/testtype/methods", "https://aspire.dev/sitemap-0.xml"); Assert.Equal("reference-api-csharp-aspire.test.package-testtype-methods", cacheKey); } [Fact] public void GetMemberIndexCacheKey_UsesConfiguredSourceUrl() { var aspireDevKey = ApiDocsSourceConfiguration.GetMemberIndexCacheKey("https://aspire.dev/sitemap-0.xml"); var localhostKey = ApiDocsSourceConfiguration.GetMemberIndexCacheKey("http://localhost:4321/sitemap-0.xml"); Assert.Equal("member-index:sitemap-0", aspireDevKey); Assert.NotEqual(aspireDevKey, localhostKey); } [Fact] public void ResolveLinkedPageUrl_RebasesConfiguredHostAndStripsMarkdownAndFragment() { var pageUrl = ApiDocsSourceConfiguration.ResolveLinkedPageUrl( "/reference/api/csharp/aspire.test.package/testtype/methods.md#dothing-string", "http://localhost:4321/sitemap-0.xml"); Assert.Equal("http://localhost:4321/reference/api/csharp/aspire.test.package/testtype/methods", pageUrl); } [Fact] public void RewriteMarkdownLinks_RebasesConfiguredHostAndPreservesAnchors() { var rewritten = ApiDocsSourceConfiguration.RewriteMarkdownLinks( """ See [Package](/reference/api/csharp/aspire.test.package.md), [Member](/reference/api/csharp/aspire.test.package/testtype/methods.md#dothing-string), [CreateBuilder(string[])](/reference/api/csharp/aspire.hosting/distributedapplication/methods.md#createbuilder-string), and [This section](#remarks). """, "https://aspire.dev/reference/api/csharp/aspire.test.package/testtype", "http://localhost:4321/sitemap-0.xml"); Assert.Equal( "See [Package](http://localhost:4321/reference/api/csharp/aspire.test.package.md), [Member](http://localhost:4321/reference/api/csharp/aspire.test.package/testtype/methods.md#dothing-string), [CreateBuilder(string[])](http://localhost:4321/reference/api/csharp/aspire.hosting/distributedapplication/methods.md#createbuilder-string), and [This section](http://localhost:4321/reference/api/csharp/aspire.test.package/testtype#remarks).", rewritten); } [Fact] public void RewriteMarkdownLinks_RewritesBracketedMemberSignatureLinksFromDistributedApplicationPage() { var rewritten = ApiDocsSourceConfiguration.RewriteMarkdownLinks( """ ## Methods - [CreateBuilder(string[])](/reference/api/csharp/aspire.hosting/distributedapplication/methods.md#createbuilder-string) : [IDistributedApplicationBuilder](/reference/api/csharp/aspire.hosting/idistributedapplicationbuilder.md) `static` `ats export` -- Creates a new instance of [IDistributedApplicationBuilder](/reference/api/csharp/aspire.hosting/idistributedapplicationbuilder.md) with the specified command-line arguments. """, "https://aspire.dev/reference/api/csharp/aspire.hosting/distributedapplication", "http://localhost:4321/sitemap-0.xml"); Assert.Contains("[CreateBuilder(string[])](http://localhost:4321/reference/api/csharp/aspire.hosting/distributedapplication/methods.md#createbuilder-string)", rewritten, StringComparison.Ordinal); Assert.Contains("[IDistributedApplicationBuilder](http://localhost:4321/reference/api/csharp/aspire.hosting/idistributedapplicationbuilder.md)", rewritten, StringComparison.Ordinal); } }