// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Web.WebPages.Html;
using Xunit;
namespace System.Web.WebPages.Test
{
public class ValidationHelperTest
{
[Fact]
public void ValidationMessageAllowsEmptyModelName()
{
// Arrange
ModelStateDictionary dictionary = new ModelStateDictionary();
dictionary.AddError("test", "some error text");
HtmlHelper htmlHelper = HtmlHelperFactory.Create(dictionary);
// Act
var html = htmlHelper.ValidationMessage("test");
// Assert
Assert.Equal(@"some error text", html.ToHtmlString());
}
[Fact]
public void ValidationMessageReturnsFirstError()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Act
var html = htmlHelper.ValidationMessage("foo");
// Assert
Assert.Equal(@"foo error <1>", html.ToHtmlString());
}
[Fact]
public void ValidationMessageUsesValidCssClassIfFieldDoesNotHaveErrors()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Act
var html = htmlHelper.ValidationMessage("baz");
// Assert
Assert.Equal(@"", html.ToString());
}
[Fact]
public void ValidationMessageReturnsWithObjectAttributes()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Act
var html = htmlHelper.ValidationMessage("foo", new { attr = "attr-value" });
// Assert
Assert.Equal(@"foo error <1>",
html.ToHtmlString());
}
[Fact]
public void ValidationMessageReturnsWithCustomMessage()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Atc
var html = htmlHelper.ValidationMessage("foo", "bar error");
// Assert
Assert.Equal(@"bar error", html.ToHtmlString());
}
[Fact]
public void ValidationMessageReturnsWithCustomMessageAndObjectAttributes()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Act
var html = htmlHelper.ValidationMessage("foo", "bar error", new { baz = "baz" });
// Assert
Assert.Equal(@"bar error", html.ToHtmlString());
}
[Fact]
public void ValidationMessageWithModelStateAndNoErrors()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Act
var html = htmlHelper.ValidationMessage("baz");
// Assert
Assert.Equal(@"", html.ToString());
}
[Fact]
public void ValidationSummary()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Act
var html = htmlHelper.ValidationSummary();
// Assert
Assert.Equal(@"
- foo error <1>
- foo error <2>
- bar error <1>
- bar error <2>
"
, html.ToHtmlString());
}
[Fact]
public void ValidationSummaryWithMessage()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Act
var html = htmlHelper.ValidationSummary("test message");
// Assert
Assert.Equal(@"test message
- foo error <1>
- foo error <2>
- bar error <1>
- bar error <2>
"
, html.ToHtmlString());
}
[Fact]
public void ValidationSummaryWithFormErrors()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithFormErrors());
// Act
var html = htmlHelper.ValidationSummary();
// Assert
Assert.Equal(@"
- foo error <1>
- foo error <2>
- bar error <1>
- bar error <2>
- some form error <1>
- some form error <2>
"
, html.ToHtmlString());
}
[Fact]
public void ValidationSummaryWithFormErrorsAndExcludeFieldErrors()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithFormErrors());
// Act
var html = htmlHelper.ValidationSummary(excludeFieldErrors: true);
// Assert
Assert.Equal(@"
- some form error <1>
- some form error <2>
"
, html.ToHtmlString());
}
[Fact]
public void ValidationSummaryWithObjectProperties()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Act
var html = htmlHelper.ValidationSummary(new { attr = "attr-value", @class = "my-class" });
// Assert
Assert.Equal(@"
- foo error <1>
- foo error <2>
- bar error <1>
- bar error <2>
"
, html.ToHtmlString());
}
[Fact]
public void ValidationSummaryWithDictionary()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Act
var html = htmlHelper.ValidationSummary(new Dictionary { { "attr", "attr-value" }, { "class", "my-class" } });
// Assert
Assert.Equal(@"
- foo error <1>
- foo error <2>
- bar error <1>
- bar error <2>
"
, html.ToHtmlString());
}
[Fact]
public void ValidationSummaryWithDictionaryAndMessage()
{
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Act
var html = htmlHelper.ValidationSummary("This is a message.", new Dictionary { { "attr", "attr-value" }, { "class", "my-class" } });
// Assert
Assert.Equal(@"This is a message.
- foo error <1>
- foo error <2>
- bar error <1>
- bar error <2>
"
, html.ToHtmlString());
}
//[Fact]
// Cant test this, as it sets a static property
public void ValidationSummaryWithCustomValidationSummaryClass()
{
// Arrange
HtmlHelper.ValidationSummaryClass = "my-val-class";
HtmlHelper htmlHelper = HtmlHelperFactory.Create(GetModelStateWithErrors());
// Act
var html = htmlHelper.ValidationSummary("This is a message.", new Dictionary { { "attr", "attr-value" }, { "class", "my-class" } });
// Assert
Assert.Equal(@"This is a message.
- foo error <1>
- foo error <2>
- bar error <1>
- bar error <2>
"
, html.ToHtmlString());
}
[Fact]
public void ValidationSummaryWithNoErrorReturnsNullIfExcludeFieldErrorsIsSetToFalse()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create();
// Act
var html = htmlHelper.ValidationSummary(excludeFieldErrors: false);
// Assert
Assert.Equal(@"", html.ToString());
}
[Fact]
public void ValidationSummaryWithNoErrorReturnsNull()
{
// Arrange
HtmlHelper htmlHelper = HtmlHelperFactory.Create();
// Act
var html = htmlHelper.ValidationSummary(excludeFieldErrors: true);
// Assert
Assert.Null(html);
}
[Fact]
public void ValidationSummaryWithNoFormErrorsAndExcludedFieldErrorsReturnsNull()
{
// Arrange
ModelStateDictionary modelState = new ModelStateDictionary();
modelState.AddError("foo", "error");
modelState.AddError("bar", "error");
HtmlHelper htmlHelper = HtmlHelperFactory.Create(modelState);
// Act
var html = htmlHelper.ValidationSummary(excludeFieldErrors: true);
// Assert
Assert.Null(html);
}
[Fact]
public void ValidationSummaryWithMultipleFormErrorsAndExcludedFieldErrors()
{
// Arrange
ModelStateDictionary modelState = new ModelStateDictionary();
modelState.AddFormError("error <1>");
modelState.AddFormError("error <2>");
HtmlHelper htmlHelper = HtmlHelperFactory.Create(modelState);
// Act
var html = htmlHelper.ValidationSummary(excludeFieldErrors: true);
// Assert
Assert.Equal(@""
, html.ToHtmlString());
}
private static ModelStateDictionary GetModelStateWithErrors()
{
ModelStateDictionary modelState = new ModelStateDictionary();
modelState.AddError("foo", "foo error <1>");
modelState.AddError("foo", "foo error <2>");
modelState.AddError("bar", "bar error <1>");
modelState.AddError("bar", "bar error <2>");
return modelState;
}
private static ModelStateDictionary GetModelStateWithFormErrors()
{
ModelStateDictionary modelState = GetModelStateWithErrors();
modelState.AddFormError("some form error <1>");
modelState.AddFormError("some form error <2>");
return modelState;
}
}
}