From e1eb560c8202a1e0ce5d770cd4224c7f4bba0c7e Mon Sep 17 00:00:00 2001 From: "T. Thiery" Date: Mon, 11 Jan 2016 22:26:59 +0100 Subject: [PATCH] Added Unit Tests for form field based HTTP Method Override --- .../HttpMethodOverrideMiddleware.cs | 2 +- .../HttpMethodOverrideMiddlewareTest.cs | 94 +++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideMiddleware.cs b/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideMiddleware.cs index df65207d35..804e44d5f7 100644 --- a/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideMiddleware.cs +++ b/src/Microsoft.AspNet.HttpOverrides/HttpMethodOverrideMiddleware.cs @@ -31,7 +31,7 @@ namespace Microsoft.AspNet.HttpOverrides public async Task Invoke(HttpContext context) { - if (string.Equals(context.Request.Method,"POST", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(context.Request.Method, "POST", StringComparison.OrdinalIgnoreCase)) { if (_options.FormFieldName != null) { diff --git a/test/Microsoft.AspNet.HttpOverrides.Tests/HttpMethodOverrideMiddlewareTest.cs b/test/Microsoft.AspNet.HttpOverrides.Tests/HttpMethodOverrideMiddlewareTest.cs index d077fac906..d739fc1043 100644 --- a/test/Microsoft.AspNet.HttpOverrides.Tests/HttpMethodOverrideMiddlewareTest.cs +++ b/test/Microsoft.AspNet.HttpOverrides.Tests/HttpMethodOverrideMiddlewareTest.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNet.Builder; @@ -78,5 +79,98 @@ namespace Microsoft.AspNet.HttpOverrides await server.CreateClient().SendAsync(req); Assert.True(assertsExecuted); } + + + [Fact] + public async Task FormFieldAvailableChangesRequestMethod() + { + var assertsExecuted = false; + var builder = new WebApplicationBuilder() + .Configure(app => + { + app.UseHttpMethodOverride(new HttpMethodOverrideOptions() + { + FormFieldName = "_METHOD" + }); + app.Run(context => + { + Assert.Equal("DELETE", context.Request.Method); + assertsExecuted = true; + return Task.FromResult(0); + }); + }); + var server = new TestServer(builder); + + var req = new HttpRequestMessage(HttpMethod.Post, ""); + req.Content = new FormUrlEncodedContent(new Dictionary() + { + { "_METHOD", "DELETE" } + }); + + + await server.CreateClient().SendAsync(req); + Assert.True(assertsExecuted); + } + + [Fact] + public async Task FormFieldUnavailableDoesNotChangeRequestMethod() + { + var assertsExecuted = false; + var builder = new WebApplicationBuilder() + .Configure(app => + { + app.UseHttpMethodOverride(new HttpMethodOverrideOptions() + { + FormFieldName = "_METHOD" + }); + app.Run(context => + { + Assert.Equal("POST", context.Request.Method); + assertsExecuted = true; + return Task.FromResult(0); + }); + }); + var server = new TestServer(builder); + + var req = new HttpRequestMessage(HttpMethod.Post, ""); + req.Content = new FormUrlEncodedContent(new Dictionary() + { + }); + + + await server.CreateClient().SendAsync(req); + Assert.True(assertsExecuted); + } + + [Fact] + public async Task FormFieldEmptyDoesNotChangeRequestMethod() + { + var assertsExecuted = false; + var builder = new WebApplicationBuilder() + .Configure(app => + { + app.UseHttpMethodOverride(new HttpMethodOverrideOptions() + { + FormFieldName = "_METHOD" + }); + app.Run(context => + { + Assert.Equal("POST", context.Request.Method); + assertsExecuted = true; + return Task.FromResult(0); + }); + }); + var server = new TestServer(builder); + + var req = new HttpRequestMessage(HttpMethod.Post, ""); + req.Content = new FormUrlEncodedContent(new Dictionary() + { + { "_METHOD", "" } + }); + + + await server.CreateClient().SendAsync(req); + Assert.True(assertsExecuted); + } } }