// 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("