public void LogsCannotApplyRequestFormLimits()
    {
        // Arrange
        var sink          = new TestSink();
        var loggerFactory = new TestLoggerFactory(sink, enabled: true);

        var requestFormLimitsFilter = new RequestFormLimitsFilter(loggerFactory);

        requestFormLimitsFilter.FormOptions = new FormOptions();
        var authorizationFilterContext = CreateAuthorizationFilterContext(
            new IFilterMetadata[] { requestFormLimitsFilter });

        authorizationFilterContext.HttpContext.Request.Form = new FormCollection(null);

        // Act
        requestFormLimitsFilter.OnAuthorization(authorizationFilterContext);

        // Assert
        var write = Assert.Single(sink.Writes);

        Assert.Equal(LogLevel.Warning, write.LogLevel);
        Assert.Equal(
            "Unable to apply configured form options since the request form has already been read.",
            write.State.ToString());
    }
    public void LogsAppliedRequestFormLimits_WhenFormFeatureIsNull()
    {
        // Arrange
        var sink          = new TestSink();
        var loggerFactory = new TestLoggerFactory(sink, enabled: true);

        var requestFormLimitsFilter = new RequestFormLimitsFilter(loggerFactory);

        requestFormLimitsFilter.FormOptions = new FormOptions();
        var authorizationFilterContext = CreateAuthorizationFilterContext(
            new IFilterMetadata[] { requestFormLimitsFilter });

        // Set to null explicitly as we want to make sure the filter adds one
        authorizationFilterContext.HttpContext.Features.Set <IFormFeature>(null);

        // Act
        requestFormLimitsFilter.OnAuthorization(authorizationFilterContext);

        // Assert
        var write = Assert.Single(sink.Writes);

        Assert.Equal(LogLevel.Debug, write.LogLevel);
        Assert.Equal(
            "Applied the configured form options on the current request.",
            write.State.ToString());
    }
    public void SetsRequestFormFeature_WhenFeatureIsNotPresent()
    {
        // Arrange
        var requestFormLimitsFilter = new RequestFormLimitsFilter(NullLoggerFactory.Instance);

        requestFormLimitsFilter.FormOptions = new FormOptions();
        var authorizationFilterContext = CreateAuthorizationFilterContext(
            new IFilterMetadata[] { requestFormLimitsFilter });

        // Set to null explicitly as we want to make sure the filter adds one
        authorizationFilterContext.HttpContext.Features.Set <IFormFeature>(null);

        // Act
        requestFormLimitsFilter.OnAuthorization(authorizationFilterContext);

        // Assert
        var formFeature = authorizationFilterContext.HttpContext.Features.Get <IFormFeature>();

        Assert.IsType <FormFeature>(formFeature);
    }