// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System; using System.IO; using System.Web; using System.Web.Mvc; using System.Web.Routing; using Moq; using Xunit; namespace Microsoft.Web.Mvc.Test { public class FormExtensionsTest { internal const string AppPathModifier = "/$(SESSION)"; [Fact] public void FormWithPostAction() { // Arrange StringWriter writer; HtmlHelper htmlHelper = GetFormHelper(out writer); // Act IDisposable formDisposable = htmlHelper.BeginForm(action => action.About()); formDisposable.Dispose(); // Assert Assert.Equal(@"
", writer.ToString()); } [Fact] public void FormWithPostActionAndObjectAttributes() { // Arrange StringWriter writer; HtmlHelper htmlHelper = GetFormHelper(out writer); // Act IDisposable formDisposable = htmlHelper.BeginForm(action => action.About(), FormMethod.Get, new { baz = "baz" }); formDisposable.Dispose(); // Assert Assert.Equal(@"
", writer.ToString()); } [Fact] public void FormWithPostActionAndObjectAttributesWithUnderscores() { // Arrange StringWriter writer; HtmlHelper htmlHelper = GetFormHelper(out writer); // Act IDisposable formDisposable = htmlHelper.BeginForm(action => action.About(), FormMethod.Get, new { foo_baz = "baz" }); formDisposable.Dispose(); // Assert Assert.Equal(@"
", writer.ToString()); } public class FormController : Controller { public ActionResult About() { return RedirectToAction("foo"); } } private static HtmlHelper GetFormHelper(out StringWriter writer) { Mock mockHttpRequest = new Mock(); mockHttpRequest.Setup(r => r.Url).Returns(new Uri("http://www.contoso.com/some/path")); Mock mockHttpResponse = new Mock(MockBehavior.Strict); mockHttpResponse.Setup(r => r.ApplyAppPathModifier(It.IsAny())).Returns(r => AppPathModifier + r); Mock mockHttpContext = new Mock(); mockHttpContext.Setup(c => c.Request).Returns(mockHttpRequest.Object); mockHttpContext.Setup(c => c.Response).Returns(mockHttpResponse.Object); RouteCollection rt = new RouteCollection(); rt.Add(new Route("{controller}/{action}/{id}", null) { Defaults = new RouteValueDictionary(new { id = "defaultid" }) }); rt.Add("namedroute", new Route("named/{controller}/{action}/{id}", null) { Defaults = new RouteValueDictionary(new { id = "defaultid" }) }); RouteData rd = new RouteData(); rd.Values.Add("controller", "home"); rd.Values.Add("action", "oldaction"); Mock mockViewContext = new Mock(); mockViewContext.Setup(c => c.HttpContext).Returns(mockHttpContext.Object); mockViewContext.Setup(c => c.RouteData).Returns(rd); writer = new StringWriter(); mockViewContext.Setup(c => c.Writer).Returns(writer); HtmlHelper helper = new HtmlHelper( mockViewContext.Object, new Mock().Object, rt); return helper; } } }