public void RequireAuthorization_PolicyCallback()
    {
        // Arrange
        var builder     = new TestEndpointConventionBuilder();
        var requirement = new TestRequirement();

        // Act
        builder.RequireAuthorization(policyBuilder => policyBuilder.Requirements.Add(requirement));

        // Assert
        var convention = Assert.Single(builder.Conventions);

        var endpointModel = new RouteEndpointBuilder((context) => Task.CompletedTask, RoutePatternFactory.Parse("/"), 0);

        convention(endpointModel);

        Assert.Equal(2, endpointModel.Metadata.Count);
        var authMetadata = Assert.IsAssignableFrom <IAuthorizeData>(endpointModel.Metadata[0]);

        Assert.Null(authMetadata.Policy);

        var policy = Assert.IsAssignableFrom <AuthorizationPolicy>(endpointModel.Metadata[1]);

        Assert.Equal(1, policy.Requirements.Count);
        Assert.Equal(requirement, policy.Requirements[0]);
    }
    public void RequireAuthorization_PolicyCallbackWithAuthorize()
    {
        // Arrange
        var builder     = new TestEndpointConventionBuilder();
        var authorize   = new AuthorizeAttribute();
        var requirement = new TestRequirement();

        // Act
        builder.RequireAuthorization(policyBuilder => policyBuilder.Requirements.Add(requirement));

        // Assert
        var convention = Assert.Single(builder.Conventions);

        var endpointModel = new RouteEndpointBuilder((context) => Task.CompletedTask, RoutePatternFactory.Parse("/"), 0);

        endpointModel.Metadata.Add(authorize);
        convention(endpointModel);

        // Confirm that we don't add another authorize if one already exists
        Assert.Equal(2, endpointModel.Metadata.Count);
        Assert.Equal(authorize, endpointModel.Metadata[0]);
        var policy = Assert.IsAssignableFrom <AuthorizationPolicy>(endpointModel.Metadata[1]);

        Assert.Equal(1, policy.Requirements.Count);
        Assert.Equal(requirement, policy.Requirements[0]);
    }
        public void WithCorsPolicy_ChainedCall_ReturnedBuilderIsDerivedType()
        {
            // Arrange
            var testConventionBuilder = new TestEndpointConventionBuilder();

            // Act
            var builder = testConventionBuilder.WithCorsPolicy("TestPolicyName");

            // Assert
            Assert.True(builder.TestProperty);
        }
    public void AllowAnonymous_ChainedCall()
    {
        // Arrange
        var builder = new TestEndpointConventionBuilder();

        // Act
        var chainedBuilder = builder.AllowAnonymous();

        // Assert
        Assert.True(chainedBuilder.TestProperty);
    }
    public void RequireAuthorization_ChainedCall()
    {
        // Arrange
        var builder = new TestEndpointConventionBuilder();

        // Act
        var chainedBuilder = builder.RequireAuthorization();

        // Assert
        Assert.True(chainedBuilder.TestProperty);
    }
Exemple #6
0
    public void UsesTagsFromMultipleCallsToWithTags()
    {
        var testBuilder         = new TestEndpointConventionBuilder();
        var routeHandlerBuilder = new RouteHandlerBuilder(new[] { testBuilder });

        routeHandlerBuilder
        .WithTags("A")
        .WithTags("B");

        var operation = GetOpenApiOperation(() => { }, additionalMetadata: testBuilder.Metadata.ToArray());

        Assert.Collection(operation.Tags,
                          tag => Assert.Equal("A", tag.Name),
                          tag => Assert.Equal("B", tag.Name));
    }
    public void AllowAnonymous_Default()
    {
        // Arrange
        var builder = new TestEndpointConventionBuilder();

        // Act
        builder.AllowAnonymous();

        // Assert
        var convention = Assert.Single(builder.Conventions);

        var endpointModel = new RouteEndpointBuilder((context) => Task.CompletedTask, RoutePatternFactory.Parse("/"), 0);

        convention(endpointModel);

        Assert.IsAssignableFrom <IAllowAnonymous>(Assert.Single(endpointModel.Metadata));
    }
        public void RequireAuthorization_PolicyName()
        {
            // Arrange
            var builder = new TestEndpointConventionBuilder();

            // Act
            builder.RequireAuthorization("policy");

            // Assert
            var convention = Assert.Single(builder.Conventions);

            var endpointModel = new RouteEndpointBuilder((context) => Task.CompletedTask, RoutePatternFactory.Parse("/"), 0);

            convention(endpointModel);

            Assert.Equal("policy", Assert.IsAssignableFrom <IAuthorizeData>(Assert.Single(endpointModel.Metadata)).Policy);
        }
    public void RequireAuthorization_IAuthorizeData()
    {
        // Arrange
        var builder  = new TestEndpointConventionBuilder();
        var metadata = new AuthorizeAttribute();

        // Act
        builder.RequireAuthorization(metadata);

        // Assert
        var convention = Assert.Single(builder.Conventions);

        var endpointModel = new RouteEndpointBuilder((context) => Task.CompletedTask, RoutePatternFactory.Parse("/"), 0);

        convention(endpointModel);

        Assert.Equal(metadata, Assert.Single(endpointModel.Metadata));
    }
Exemple #10
0
        public void RequireHost_HostNames()
        {
            // Arrange
            var builder = new TestEndpointConventionBuilder();

            // Act
            builder.RequireHost("contoso.com:8080");

            // Assert
            var convention = Assert.Single(builder.Conventions);

            var endpointModel = new RouteEndpointBuilder((context) => Task.CompletedTask, RoutePatternFactory.Parse("/"), 0);

            convention(endpointModel);

            var hostMetadata = Assert.IsType <HostAttribute>(Assert.Single(endpointModel.Metadata));

            Assert.Equal("contoso.com:8080", hostMetadata.Hosts.Single());
        }
    public void RequireAuthorization_IAuthorizeData_Empty()
    {
        // Arrange
        var builder = new TestEndpointConventionBuilder();

        // Act
        builder.RequireAuthorization(Array.Empty <IAuthorizeData>());

        // Assert
        var convention = Assert.Single(builder.Conventions);

        var endpointModel = new RouteEndpointBuilder((context) => Task.CompletedTask, RoutePatternFactory.Parse("/"), 0);

        convention(endpointModel);

        var authMetadata = Assert.IsAssignableFrom <IAuthorizeData>(Assert.Single(endpointModel.Metadata));

        Assert.Null(authMetadata.Policy);
    }
    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);
    }
        public void WithCorsPolicy_Name_MetadataAdded()
        {
            // Arrange
            var testConventionBuilder = new TestEndpointConventionBuilder();

            // Act
            testConventionBuilder.WithCorsPolicy("TestPolicyName");

            // Assert
            var addCorsPolicy = Assert.Single(testConventionBuilder.Conventions);

            var endpointModel = new TestEndpointBuilder();

            addCorsPolicy(endpointModel);
            var endpoint = endpointModel.Build();

            var metadata = endpoint.Metadata.GetMetadata <IEnableCorsAttribute>();

            Assert.NotNull(metadata);
            Assert.Equal("TestPolicyName", metadata.PolicyName);
        }
    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);
    }
        public void WithCorsPolicy_Policy_MetadataAdded()
        {
            // Arrange
            var testConventionBuilder = new TestEndpointConventionBuilder();

            // Act
            testConventionBuilder.WithCorsPolicy(builder => builder.AllowAnyOrigin());

            // Assert
            var addCorsPolicy = Assert.Single(testConventionBuilder.Conventions);

            var endpointBuilder = new TestEndpointBuilder();

            addCorsPolicy(endpointBuilder);
            var endpoint = endpointBuilder.Build();

            var metadata = endpoint.Metadata.GetMetadata <ICorsPolicyMetadata>();

            Assert.NotNull(metadata);
            Assert.NotNull(metadata.Policy);
            Assert.True(metadata.Policy.AllowAnyOrigin);
        }
    public void RequireRateLimiting_Policy_MetadataAdded()
    {
        // Arrange
        var testConventionBuilder = new TestEndpointConventionBuilder();

        // Act
        testConventionBuilder.RequireRateLimiting <TestEndpointConventionBuilder, string>(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);
    }
    public void RequireAuthorization_PolicyWithAuthorize()
    {
        // Arrange
        var builder   = new TestEndpointConventionBuilder();
        var policy    = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build();
        var authorize = new AuthorizeAttribute();

        // Act
        builder.RequireAuthorization(policy);

        // Assert
        var convention = Assert.Single(builder.Conventions);

        var endpointModel = new RouteEndpointBuilder((context) => Task.CompletedTask, RoutePatternFactory.Parse("/"), 0);

        endpointModel.Metadata.Add(authorize);
        convention(endpointModel);

        // Confirm that we don't add another authorize if one already exists
        Assert.Equal(2, endpointModel.Metadata.Count);
        Assert.Equal(authorize, endpointModel.Metadata[0]);
        Assert.Equal(policy, endpointModel.Metadata[1]);
    }
    public void RequireAuthorization_Policy()
    {
        // Arrange
        var builder = new TestEndpointConventionBuilder();
        var policy  = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build();

        // Act
        builder.RequireAuthorization(policy);

        // Assert
        var convention = Assert.Single(builder.Conventions);

        var endpointModel = new RouteEndpointBuilder((context) => Task.CompletedTask, RoutePatternFactory.Parse("/"), 0);

        convention(endpointModel);

        Assert.Equal(2, endpointModel.Metadata.Count);
        var authMetadata = Assert.IsAssignableFrom <IAuthorizeData>(endpointModel.Metadata[0]);

        Assert.Null(authMetadata.Policy);

        Assert.Equal(policy, endpointModel.Metadata[1]);
    }