File: AuthorizationAppBuilderExtensionsTests.cs
Web Access
Project: src\src\Security\Authorization\test\Microsoft.AspNetCore.Authorization.Test.csproj (Microsoft.AspNetCore.Authorization.Test)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization.Test.TestObjects;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
 
namespace Microsoft.AspNetCore.Authorization.Test;
 
public class AuthorizationAppBuilderExtensionsTests
{
    [Fact]
    public async Task UseAuthorization_HasRequiredSevices_RegistersMiddleware()
    {
        // Arrange
        var authenticationService = new TestAuthenticationService();
        var services = CreateServices(authenticationService);
 
        var app = new ApplicationBuilder(services);
 
        app.UseAuthorization();
 
        var appFunc = app.Build();
 
        var endpoint = new Endpoint(
            null,
            new EndpointMetadataCollection(new AuthorizeAttribute()),
            "Test endpoint");
 
        var httpContext = new DefaultHttpContext();
        httpContext.RequestServices = services;
        httpContext.SetEndpoint(endpoint);
 
        // Act
        await appFunc(httpContext);
 
        // Assert
        Assert.True(authenticationService.ChallengeCalled);
    }
 
    [Fact]
    public void UseAuthorization_MissingRequiredSevices_FriendlyErrorMessage()
    {
        // Arrange
        var authenticationService = new TestAuthenticationService();
 
        var app = new ApplicationBuilder(new ServiceCollection().BuildServiceProvider());
 
        // Act
        var ex = Assert.Throws<InvalidOperationException>(() =>
        {
            app.UseAuthorization();
        });
 
        // Assert
        Assert.Equal(
            "Unable to find the required services. Please add all the required services by calling " +
            "'IServiceCollection.AddAuthorization' in the application startup code.",
            ex.Message);
    }
 
    private IServiceProvider CreateServices(IAuthenticationService authenticationService)
    {
        var services = new ServiceCollection();
 
        services.AddRouting();
        services.AddAuthorization();
        services.AddLogging();
        services.AddSingleton(authenticationService);
 
        var serviceProvder = services.BuildServiceProvider();
 
        return serviceProvder;
    }
}