// 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.IO; using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Moq; using Xunit; namespace Microsoft.AspNetCore.Mvc.Rendering { /// /// Tests the 's and /// methods. /// public class HtmlHelperFormExtensionsTest { private static readonly IEnumerable _actionNames = new List { null, "Details" }; private static readonly IEnumerable _controllerNames = new List { null, "Product" }; private static readonly IEnumerable _htmlAttributes = new List { null, new { isprint = "false", showreviews = "false" }, new Dictionary { { "isprint", "false" }, { "showreviews", "true" }, }, }; private static readonly IEnumerable _methods = new List { FormMethod.Get, FormMethod.Post, }; private static readonly IEnumerable _routeNames = new List { null, "default" }; private static readonly IEnumerable _routeValues = new List { null, new { p1_name = "p1-value" }, new Dictionary { { "p1-name", "p1-value" }, { "p2-name", "p2-value" } }, }; public static TheoryData ActionNameAndControllerNameDataSet { get { var dataSet = new TheoryData(); foreach (var actionName in _actionNames) { foreach (var controllerName in _controllerNames) { dataSet.Add(actionName, controllerName); } } return dataSet; } } public static TheoryData ActionNameControllerNameAndMethodDataSet { get { var dataSet = new TheoryData(); foreach (var actionName in _actionNames) { foreach (var controllerName in _controllerNames) { foreach (var method in _methods) { dataSet.Add(actionName, controllerName, method); } } } return dataSet; } } public static TheoryData ActionNameControllerNameMethodAndHtmlAttributesDataSet { get { var dataSet = new TheoryData(); foreach (var actionName in _actionNames) { foreach (var controllerName in _controllerNames) { foreach (var method in _methods) { foreach (var htmlAttributes in _htmlAttributes) { dataSet.Add(actionName, controllerName, method, htmlAttributes); } } } } return dataSet; } } public static TheoryData ActionNameControllerNameAndRouteValuesDataSet { get { var dataSet = new TheoryData(); foreach (var actionName in _actionNames) { foreach (var controllerName in _controllerNames) { foreach (var routeValues in _routeValues) { dataSet.Add(actionName, controllerName, routeValues); } } } return dataSet; } } public static TheoryData ActionNameControllerNameRouteValuesAndMethodDataSet { get { var dataSet = new TheoryData(); foreach (var actionName in _actionNames) { foreach (var controllerName in _controllerNames) { foreach (var routeValues in _routeValues) { foreach (var method in _methods) { dataSet.Add(actionName, controllerName, routeValues, method); } } } } return dataSet; } } public static TheoryData MethodDataSet { get { var dataSet = new TheoryData(); foreach (var method in _methods) { dataSet.Add(method); } return dataSet; } } public static TheoryData MethodAndHtmlAttributesDataSet { get { var dataSet = new TheoryData(); foreach (var method in _methods) { foreach (var htmlAttributes in _htmlAttributes) { dataSet.Add(method, htmlAttributes); } } return dataSet; } } public static TheoryData RouteNameDataSet { get { var dataSet = new TheoryData(); foreach (var routeName in _routeNames) { dataSet.Add(routeName); } return dataSet; } } public static TheoryData RouteNameAndMethodDataSet { get { var dataSet = new TheoryData(); foreach (var routeName in _routeNames) { foreach (var method in _methods) { dataSet.Add(routeName, method); } } return dataSet; } } public static TheoryData RouteNameMethodAndHtmlAttributesDataSet { get { var dataSet = new TheoryData(); foreach (var routeName in _routeNames) { foreach (var method in _methods) { foreach (var htmlAttributes in _htmlAttributes) { dataSet.Add(routeName, method, htmlAttributes); } } } return dataSet; } } public static TheoryData RouteNameAndRouteValuesDataSet { get { var dataSet = new TheoryData(); foreach (var routeName in _routeNames) { foreach (var routeValues in _routeValues) { dataSet.Add(routeName, routeValues); } } return dataSet; } } public static TheoryData RouteNameRouteValuesAndMethodDataSet { get { var dataSet = new TheoryData(); foreach (var routeName in _routeNames) { foreach (var routeValues in _routeValues) { foreach (var method in _methods) { dataSet.Add(routeName, routeValues, method); } } } return dataSet; } } public static TheoryData RouteValuesDataSet { get { var dataSet = new TheoryData(); foreach (var routeValues in _routeValues) { dataSet.Add(routeValues); } return dataSet; } } [Fact] public void BeginFormWithNoParameters_CallsHtmlGeneratorWithExpectedValues() { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, null, // actionName null, // controllerName null, // routeValues "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(); // Assert Assert.NotNull(mvcForm); Assert.Equal("
", builder.ToString()); htmlGenerator.Verify(); } [Fact] public void BeginForm_WithAntiforgery_CallsHtmlGeneratorWithExpectedValues() { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, null, // actionName null, // controllerName null, // routeValues "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(antiforgery: true); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Fact] public void BeginForm_SuppressAntiforgery_CallsHtmlGeneratorWithExpectedValues() { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, null, // actionName null, // controllerName null, // routeValues "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(antiforgery: false); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(MethodDataSet))] public void BeginFormWithMethodParameter_CallsHtmlGeneratorWithExpectedValues(FormMethod method) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, null, // actionName null, // controllerName null, // routeValues method.ToString().ToLowerInvariant(), null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); if (method != FormMethod.Get) { htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); } // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(method); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(MethodAndHtmlAttributesDataSet))] public void BeginFormWithMethodAndHtmlAttributesParameters_CallsHtmlGeneratorWithExpectedValues( FormMethod method, object htmlAttributes) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, null, // actionName null, // controllerName null, // routeValues method.ToString().ToLowerInvariant(), htmlAttributes)) .Returns(tagBuilder) .Verifiable(); if (method != FormMethod.Get) { htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); } // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(method, htmlAttributes); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(MethodAndHtmlAttributesDataSet))] public void BeginFormWithMethodAndHtmlAttributesParameters_WithAntiforgery_CallsHtmlGeneratorWithExpectedValues( FormMethod method, object htmlAttributes) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, null, // actionName null, // controllerName null, // routeValues method.ToString().ToLowerInvariant(), htmlAttributes)) .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(method, antiforgery: true, htmlAttributes: htmlAttributes); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(MethodAndHtmlAttributesDataSet))] public void BeginFormWithMethodAndHtmlAttributesParameters_SuppressAntiforgery_CallsHtmlGeneratorWithExpectedValues( FormMethod method, object htmlAttributes) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, null, // actionName null, // controllerName null, // routeValues method.ToString().ToLowerInvariant(), htmlAttributes)) .Returns(tagBuilder) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(method, antiforgery: false, htmlAttributes: htmlAttributes); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteValuesDataSet))] public void BeginFormWithRouteValuesParameter_CallsHtmlGeneratorWithExpectedValues(object routeValues) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, null, // actionName null, // controllerName routeValues, "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(routeValues); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(ActionNameAndControllerNameDataSet))] public void BeginFormWithActionNameAndControllerNameParameters_CallsHtmlGeneratorWithExpectedValues( string actionName, string controllerName) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, actionName, controllerName, null, // routeValues "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(actionName, controllerName); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(ActionNameControllerNameAndRouteValuesDataSet))] public void BeginFormWithActionNameControllerNameAndRouteValuesParameters_CallsHtmlGeneratorWithExpectedValues( string actionName, string controllerName, object routeValues) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, actionName, controllerName, routeValues, "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(actionName, controllerName, routeValues); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(ActionNameControllerNameAndMethodDataSet))] public void BeginFormWithActionNameControllerNameAndMethodParameters_CallsHtmlGeneratorWithExpectedValues( string actionName, string controllerName, FormMethod method) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, actionName, controllerName, null, // routeValues method.ToString().ToLowerInvariant(), null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); if (method != FormMethod.Get) { htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); } // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(actionName, controllerName, method); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(ActionNameControllerNameRouteValuesAndMethodDataSet))] public void BeginFormWithActionNameContollerNameRouteValuesAndMethodParameters_CallsHtmlGeneratorWithExpectedValues( string actionName, string controllerName, object routeValues, FormMethod method) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, actionName, controllerName, routeValues, method.ToString().ToLowerInvariant(), null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); if (method != FormMethod.Get) { htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); } // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(actionName, controllerName, routeValues, method); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(ActionNameControllerNameMethodAndHtmlAttributesDataSet))] public void BeginFormWithActionNameContollerNameMethodAndHtmlAttributesParameters_CallsHtmlGeneratorWithExpectedValues( string actionName, string controllerName, FormMethod method, object htmlAttributes) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, actionName, controllerName, null, // routeValues method.ToString().ToLowerInvariant(), htmlAttributes)) .Returns(tagBuilder) .Verifiable(); if (method != FormMethod.Get) { htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); } // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm(actionName, controllerName, method, htmlAttributes); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(ActionNameControllerNameMethodAndHtmlAttributesDataSet))] public void BeginFormWithActionNameContollerNameMethodAndHtmlAttributesParameters_WithAntiforgery_CallsHtmlGeneratorWithExpectedValues( string actionName, string controllerName, FormMethod method, object htmlAttributes) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, actionName, controllerName, null, // routeValues method.ToString().ToLowerInvariant(), htmlAttributes)) .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm( actionName, controllerName, routeValues: null, method: method, antiforgery: true, htmlAttributes: htmlAttributes); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(ActionNameControllerNameMethodAndHtmlAttributesDataSet))] public void BeginFormWithActionNameContollerNameMethodAndHtmlAttributesParameters_SuppressAntiforgery_CallsHtmlGeneratorWithExpectedValues( string actionName, string controllerName, FormMethod method, object htmlAttributes) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateForm( htmlHelper.ViewContext, actionName, controllerName, null, // routeValues method.ToString().ToLowerInvariant(), htmlAttributes)) .Returns(tagBuilder) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginForm( actionName, controllerName, routeValues: null, method: method, antiforgery: false, htmlAttributes: htmlAttributes); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteValuesDataSet))] public void BeginRouteFormWithRouteValuesParameter_CallsHtmlGeneratorWithExpectedValues(object routeValues) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, null, // routeName routeValues, "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm(routeValues); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteValuesDataSet))] public void BeginRouteFormWithRouteValuesParameter_WithAntiforgery_CallsHtmlGeneratorWithExpectedValues( object routeValues) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, null, // routeName routeValues, "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm(routeValues, antiforgery: true); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteValuesDataSet))] public void BeginRouteFormWithRouteValuesParameter_SuppressAntiforgery_CallsHtmlGeneratorWithExpectedValues( object routeValues) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, null, // routeName routeValues, "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm(routeValues, antiforgery: false); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteNameDataSet))] public void BeginRouteFormWithRouteNameParameter_CallsHtmlGeneratorWithExpectedValues(string routeName) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, routeName, null, // routeValues "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm(routeName); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteNameDataSet))] public void BeginRouteFormWithRouteNameParameter_WithAntiforgery_CallsHtmlGeneratorWithExpectedValues( string routeName) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, routeName, null, // routeValues "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm(routeName, antiforgery: true); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteNameDataSet))] public void BeginRouteFormWithRouteNameParameter_SuppressAntiforgery_CallsHtmlGeneratorWithExpectedValues( string routeName) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, routeName, null, // routeValues "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm(routeName, antiforgery: false); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteNameAndRouteValuesDataSet))] public void BeginRouteFormWithRouteNameAndRouteValuesParameters_CallsHtmlGeneratorWithExpectedValues( string routeName, object routeValues) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, routeName, routeValues, "post", // method null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm(routeName, routeValues); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteNameAndMethodDataSet))] public void BeginRouteFormWithRouteNameAndMethodParameters_CallsHtmlGeneratorWithExpectedValues( string routeName, FormMethod method) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, routeName, null, // routeValues method.ToString().ToLowerInvariant(), null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); if (method != FormMethod.Get) { htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); } // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm(routeName, method); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteNameRouteValuesAndMethodDataSet))] public void BeginRouteFormWithRouteNameRouteValuesAndMethodParameters_CallsHtmlGeneratorWithExpectedValues( string routeName, object routeValues, FormMethod method) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, routeName, routeValues, method.ToString().ToLowerInvariant(), null)) // htmlAttributes .Returns(tagBuilder) .Verifiable(); if (method != FormMethod.Get) { htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); } // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm(routeName, routeValues, method); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteNameMethodAndHtmlAttributesDataSet))] public void BeginRouteFormWithRouteNameMethodAndHtmlAttributesParameters_CallsHtmlGeneratorWithExpectedValues( string routeName, FormMethod method, object htmlAttributes) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, routeName, null, // routeValues method.ToString().ToLowerInvariant(), htmlAttributes)) .Returns(tagBuilder) .Verifiable(); if (method != FormMethod.Get) { htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); } // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm(routeName, method, htmlAttributes); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteNameMethodAndHtmlAttributesDataSet))] public void BeginRouteFormWithRouteNameMethodAndHtmlAttributesParameters_WithAntiforgery_CallsHtmlGeneratorWithExpectedValues( string routeName, FormMethod method, object htmlAttributes) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, routeName, null, // routeValues method.ToString().ToLowerInvariant(), htmlAttributes)) .Returns(tagBuilder) .Verifiable(); htmlGenerator .Setup(g => g.GenerateAntiforgery(htmlHelper.ViewContext)) .Returns(HtmlString.Empty) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm( routeName, routeValues: null, method: method, antiforgery: true, htmlAttributes: htmlAttributes); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } [Theory] [MemberData(nameof(RouteNameMethodAndHtmlAttributesDataSet))] public void BeginRouteFormWithRouteNameMethodAndHtmlAttributesParameters_SuppressAntiforgery_CallsHtmlGeneratorWithExpectedValues( string routeName, FormMethod method, object htmlAttributes) { // Arrange var tagBuilder = new TagBuilder(tagName: "form"); var htmlGenerator = new Mock(MockBehavior.Strict); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); htmlGenerator .Setup(g => g.GenerateRouteForm( htmlHelper.ViewContext, routeName, null, // routeValues method.ToString().ToLowerInvariant(), htmlAttributes)) .Returns(tagBuilder) .Verifiable(); // Guards Assert.NotNull(htmlHelper.ViewContext); var writer = Assert.IsAssignableFrom(htmlHelper.ViewContext.Writer); var builder = writer.GetStringBuilder(); Assert.NotNull(builder); // Act var mvcForm = htmlHelper.BeginRouteForm( routeName, routeValues: null, method: method, antiforgery: false, htmlAttributes: htmlAttributes); // Assert Assert.NotNull(mvcForm); Assert.Equal("", builder.ToString()); htmlGenerator.Verify(); } } }