File: EntraIdUrlsTests.cs
Web Access
Project: src\tests\Aspire.Hosting.Azure.EntraId.Tests\Aspire.Hosting.Azure.EntraId.Tests.csproj (Aspire.Hosting.Azure.EntraId.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace Aspire.Hosting.Azure.EntraId.Tests;
 
public class EntraIdUrlsTests
{
    // Placeholder IDs from the Microsoft Learn documentation. They are well-formed but identify nothing.
    private const string TenantId = "aaaabbbb-0000-cccc-1111-dddd2222eeee";
    private const string ClientId = "00001111-aaaa-2222-bbbb-3333cccc4444";
 
    [Theory]
    [InlineData("https://login.microsoftonline.com/", TenantId, $"https://login.microsoftonline.com/{TenantId}/v2.0/.well-known/openid-configuration")]
    [InlineData("https://login.microsoftonline.com", TenantId, $"https://login.microsoftonline.com/{TenantId}/v2.0/.well-known/openid-configuration")]
    [InlineData("https://login.microsoftonline.com/", "organizations", "https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration")]
    [InlineData("https://contoso.ciamlogin.com/", "contoso.onmicrosoft.com", "https://contoso.ciamlogin.com/contoso.onmicrosoft.com/v2.0/.well-known/openid-configuration")]
    public void GetOpenIdConfigurationUrl_AppendsTenantAndDiscoveryPath(string instance, string tenant, string expectedUrl)
    {
        Assert.Equal(expectedUrl, EntraIdUrls.GetOpenIdConfigurationUrl(instance, tenant));
    }
 
    [Theory]
    [InlineData("https://login.microsoftonline.com/", "portal.azure.com")]
    [InlineData("https://login.microsoft.com/", "portal.azure.com")]
    [InlineData("https://login.windows.net/", "portal.azure.com")]
    // Host names are case-insensitive.
    [InlineData("https://LOGIN.MicrosoftOnline.com/", "portal.azure.com")]
    [InlineData("https://login.microsoftonline.us/", "portal.azure.us")]
    [InlineData("https://login.chinacloudapi.cn/", "portal.azure.cn")]
    [InlineData("https://login.partner.microsoftonline.cn/", "portal.azure.cn")]
    [InlineData("https://contoso.ciamlogin.com/", "entra.microsoft.com")]
    public void GetPortalUrl_OpensAppRegistrationInPortalOfInstanceCloud(string instance, string expectedPortalHost)
    {
        Assert.Equal(
            $"https://{expectedPortalHost}/#@{TenantId}/view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Overview/appId/{ClientId}/isMSAApp~/false",
            EntraIdUrls.GetPortalUrl(instance, TenantId, ClientId));
    }
 
    [Theory]
    [InlineData("https://login.contoso.example/")]
    [InlineData("https://localhost:8443/")]
    // Only subdomains of ciamlogin.com are sign-in hosts of external tenants.
    [InlineData("https://ciamlogin.com/")]
    [InlineData("https://contosociamlogin.com/")]
    [InlineData("not a url")]
    public void GetPortalUrl_ReturnsNullWhenPortalIsUnknown(string instance)
    {
        Assert.Null(EntraIdUrls.GetPortalUrl(instance, TenantId, ClientId));
    }
}