File: RateLimiterEndpointConventionBuilderExtensionsTests.cs
Web Access
Project: src\src\Middleware\RateLimiting\test\Microsoft.AspNetCore.RateLimiting.Tests.csproj (Microsoft.AspNetCore.RateLimiting.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Threading.RateLimiting;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.InternalTesting;
 
namespace Microsoft.AspNetCore.RateLimiting;
 
public class RateLimiterEndpointConventionBuilderExtensionsTests : LoggedTest
{
    [Fact]
    public void RequireRateLimiting_Name_MetadataAdded()
    {
        // Arrange
        var testConventionBuilder = new TestEndpointConventionBuilder();
 
        // Act
        testConventionBuilder.RequireRateLimiting("TestPolicyName");
 
        // Assert
        var addEnableRateLimitingAttribute = Assert.Single(testConventionBuilder.Conventions);
 
        var endpointModel = new TestEndpointBuilder();
        addEnableRateLimitingAttribute(endpointModel);
        var endpoint = endpointModel.Build();
 
        var metadata = endpoint.Metadata.GetMetadata<EnableRateLimitingAttribute>();
        Assert.NotNull(metadata);
        Assert.Equal("TestPolicyName", metadata.PolicyName);
        Assert.Null(metadata.Policy);
    }
 
    [Fact]
    public void RequireRateLimiting_Policy_MetadataAdded()
    {
        // Arrange
        var testConventionBuilder = new TestEndpointConventionBuilder();
 
        // Act
        testConventionBuilder.RequireRateLimiting(new TestRateLimiterPolicy("myKey", 404, false));
 
        // Assert
        var addEnableRateLimitingAttribute = Assert.Single(testConventionBuilder.Conventions);
 
        var endpointBuilder = new TestEndpointBuilder();
        addEnableRateLimitingAttribute(endpointBuilder);
        var endpoint = endpointBuilder.Build();
 
        var metadata = endpoint.Metadata.GetMetadata<EnableRateLimitingAttribute>();
        Assert.NotNull(metadata);
        Assert.NotNull(metadata.Policy);
        Assert.Null(metadata.PolicyName);
    }
 
    [Fact]
    public void DisableRateLimiting_MetadataAdded()
    {
        // Arrange
        var testConventionBuilder = new TestEndpointConventionBuilder();
 
        // Act
        testConventionBuilder.DisableRateLimiting();
 
        // Assert
        var addDisableRateLimitingAttribute = Assert.Single(testConventionBuilder.Conventions);
 
        var endpointModel = new TestEndpointBuilder();
        addDisableRateLimitingAttribute(endpointModel);
        var endpoint = endpointModel.Build();
 
        var metadata = endpoint.Metadata.GetMetadata<DisableRateLimitingAttribute>();
        Assert.NotNull(metadata);
    }
}