public void DisplayNameHelpers_ReturnDisplayNameForProperty_IfNonNull(string displayName) { // Arrange var provider = new TestModelMetadataProvider(); provider .ForProperty <DefaultTemplatesUtilities.ObjectTemplateModel>("Property1") .DisplayDetails(dd => dd.DisplayName = () => displayName); var helper = DefaultTemplatesUtilities.GetHtmlHelper(provider: provider); var enumerableHelper = DefaultTemplatesUtilities.GetHtmlHelperForEnumerable(provider: provider); // Act var displayNameResult = helper.DisplayName("Property1"); var displayNameForResult = helper.DisplayNameFor(m => m.Property1); var displayNameForEnumerableResult = enumerableHelper.DisplayNameFor(m => m.Property1); // Assert Assert.Equal(displayName, displayNameResult); Assert.Equal(displayName, displayNameForResult); Assert.Equal(displayName, displayNameForEnumerableResult); }
public void CheckBoxInTemplate_GetsModelValue_IfModelStateAndViewDataEmpty() { // Arrange var expected = @"<input checked=""HtmlEncode[[checked]]"" id=""HtmlEncode[[Prefix_Property1]]"" " + @"name=""HtmlEncode[[Prefix.Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" + @"<input name=""HtmlEncode[[Prefix.Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />"; var metadataProvider = new EmptyModelMetadataProvider(); var helper = DefaultTemplatesUtilities.GetHtmlHelper(new ViewDataDictionary <TestModel>(metadataProvider)); helper.ViewContext.ClientValidationEnabled = false; helper.ViewData.Model = new TestModel { Property1 = true }; helper.ViewData.TemplateInfo.HtmlFieldPrefix = "Prefix"; // Act var html = helper.CheckBox("Property1", isChecked: null, htmlAttributes: null); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(html)); }
public void BeginRouteForm_EndForm_RendersAntiforgeryToken() { // Arrange var htmlGenerator = new Mock <IHtmlGenerator>(MockBehavior.Strict); htmlGenerator .Setup(g => g.GenerateRouteForm( It.IsAny <ViewContext>(), It.IsAny <string>(), It.IsAny <object>(), It.IsAny <string>(), It.IsAny <object>())) .Returns(new TagBuilder("form")); htmlGenerator .Setup(g => g.GenerateAntiforgery(It.IsAny <ViewContext>())) .Returns(new TagBuilder("antiforgery")); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); var serviceProvider = new Mock <IServiceProvider>(); serviceProvider.Setup(s => s.GetService(typeof(HtmlEncoder))).Returns(new HtmlTestEncoder()); var viewContext = htmlHelper.ViewContext; viewContext.HttpContext.RequestServices = serviceProvider.Object; var writer = viewContext.Writer as StringWriter; Assert.NotNull(writer); // Act & Assert using (var form = htmlHelper.BeginRouteForm(routeValues: null)) { } Assert.Equal( "<form><antiforgery></antiforgery></form>", writer.GetStringBuilder().ToString()); }
public void CheckBoxForInTemplate_GeneratesExpectedValue() { // Arrange // Mono issue - https://github.com/aspnet/External/issues/19 var expected = PlatformNormalizer.NormalizeContent( @"<input data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[The Property1 field is required.]]"" " + @"id=""HtmlEncode[[MyPrefix_Property1]]"" name=""HtmlEncode[[MyPrefix.Property1]]"" Property3=""HtmlEncode[[PropValue]]"" " + @"type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[MyPrefix.Property1]]"" type=""HtmlEncode[[hidden]]"" " + @"value=""HtmlEncode[[false]]"" />"); var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData()); helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix"; var attributes = new Dictionary <string, object> { { "Property3", "PropValue" } }; // Act var html = helper.CheckBoxFor(m => m.Property1, attributes); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(html)); }
public void CheckBoxFor_UsesModelStateAttemptedValue(string attemptedValue, string expectedChecked) { // Arrange // Mono issue - https://github.com/aspnet/External/issues/19 var expected = PlatformNormalizer.NormalizeContent( @"<input {0}data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[The Property1 field is required.]]"" " + @"id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" + @"<input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />"); expected = string.Format(expected, expectedChecked); var viewData = GetTestModelViewData(); var helper = DefaultTemplatesUtilities.GetHtmlHelper(viewData); viewData.ModelState.SetModelValue("Property1", new string[] { attemptedValue }, attemptedValue); // Act var html = helper.CheckBoxFor(m => m.Property1, htmlAttributes: null); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(html)); }
public void ValidationSummary_ClientValidationDisabledAllValid_ReturnsEmpty( string message, object htmlAttributes, string tag, string ignored) { // Arrange var model = new ValidationModel(); var html = DefaultTemplatesUtilities.GetHtmlHelper(model); html.ViewContext.ClientValidationEnabled = false; // Act var result = html.ValidationSummary( excludePropertyErrors: false, message: message, htmlAttributes: htmlAttributes, tag: tag); // Assert Assert.Equal(HtmlString.Empty, result); }
public void ValidationSummary_UsesSpecifiedUsesSpecifiedHtmlAttributesAndExcludesPropertyErrors() { // Arrange var helper = DefaultTemplatesUtilities.GetHtmlHelper(); helper.ViewData.ModelState.AddModelError(string.Empty, "Error for root"); helper.ViewData.ModelState.AddModelError("Property1", "Error for Property1"); // Act var validationSummaryResult = helper.ValidationSummary( excludePropertyErrors: true, message: "Custom Message", htmlAttributes: new { attr = "value" }); // Assert Assert.Equal( "<div attr=\"HtmlEncode[[value]]\" class=\"HtmlEncode[[validation-summary-errors]]\"><span>HtmlEncode[[Custom Message]]</span>" + Environment.NewLine + "<ul><li>HtmlEncode[[Error for root]]</li>" + Environment.NewLine + "</ul></div>", HtmlContentUtilities.HtmlContentToString(validationSummaryResult)); }
public void CheckBoxInTemplate_WithEmptyExpression_GeneratesExpectedValue() { // Arrange var requiredMessage = ValidationAttributeUtil.GetRequiredErrorMessage("Boolean"); var expected = $@"<input data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[{requiredMessage}]]"" " + @"id=""HtmlEncode[[MyPrefix]]"" name=""HtmlEncode[[MyPrefix]]"" Property3=""HtmlEncode[[Property3Value]]"" " + @"type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[MyPrefix]]"" type=""HtmlEncode[[hidden]]"" " + @"value=""HtmlEncode[[false]]"" />"; var helper = DefaultTemplatesUtilities.GetHtmlHelper(model: false); var attributes = new Dictionary <string, object> { { "Property3", "Property3Value" } }; helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix"; // Act var html = helper.CheckBox(string.Empty, isChecked: false, htmlAttributes: attributes); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(html)); }
public void CheckBoxFor_UsesModelStateAttemptedValue(string attemptedValue, string expectedChecked) { // Arrange var requiredMessage = ValidationAttributeUtil.GetRequiredErrorMessage("Property1"); var expected = $@"<input {{0}}data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[{requiredMessage}]]"" " + @"id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" + @"<input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />"; expected = string.Format(expected, expectedChecked); var viewData = GetTestModelViewData(); var helper = DefaultTemplatesUtilities.GetHtmlHelper(viewData); viewData.ModelState.SetModelValue("Property1", new string[] { attemptedValue }, attemptedValue); // Act var html = helper.CheckBoxFor(m => m.Property1, htmlAttributes: null); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(html)); }
public void CheckBoxWithNullExpression_DoesNotThrow_WithNameAttribute() { // Arrange var expected = @"<input class=""HtmlEncode[[some-class]]"" name=""HtmlEncode[[-expression-]]"" " + @"type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input " + @"name=""HtmlEncode[[-expression-]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />"; var helper = DefaultTemplatesUtilities.GetHtmlHelper(model: false); helper.ViewContext.ClientValidationEnabled = false; var attributes = new Dictionary <string, object> { { "class", "some-class" }, { "name", "-expression-" }, }; // Act var html = helper.CheckBox(null, isChecked: false, htmlAttributes: attributes); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(html)); }
public void HiddenInTemplate_UsesPrefixNameToLookupPropertyValueInViewData() { // Arrange var expected = @"<input id=""HtmlEncode[[MyPrefix$Property1]]"" name=""HtmlEncode[[MyPrefix.Property1]]"" type=""HtmlEncode[[hidden]]"" " + @"value=""HtmlEncode[[vdd-with-prefix]]"" />"; var helper = DefaultTemplatesUtilities.GetHtmlHelper( GetViewDataWithModelStateAndModelAndViewDataValues(), idAttributeDotReplacement: "$"); helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix"; helper.ViewData.ModelState.Clear(); helper.ViewData.Clear(); helper.ViewData.Add("Property1", "vdd-without-prefix"); helper.ViewData.Add("MyPrefix.Property1", "vdd-with-prefix"); helper.ViewData.Add("MyPrefix$Property1", "vdd-with-iddotreplacement"); // Act var result = helper.Hidden("Property1", value: null, htmlAttributes: null); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(result)); }
public void HiddenForInTemplate_UsesModelStateValueForComplexExpressions( Expression <Func <HiddenModel, string> > expression, string expected) { // Arrange var viewData = GetViewDataWithNullModelAndNonNullViewData(); viewData.ModelState.SetModelValue("pre.Property3[key]", "Prop3Val", "Prop3Val"); viewData.ModelState.SetModelValue("pre.Property4.Property5", "Prop5Val", "Prop5Val"); viewData.ModelState.SetModelValue("pre.Property4.Property6[0]", "Prop6Val", "Prop6Val"); var helper = DefaultTemplatesUtilities.GetHtmlHelper(viewData); viewData.TemplateInfo.HtmlFieldPrefix = "pre"; var attributes = new { data_val = "true", value = "attr-val" }; // Act var result = helper.HiddenFor(expression, attributes); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(result)); }
public void CheckBoxNotInTemplate_GetsValueFromPropertyOfViewDataEntry() { // Arrange var expected = @"<input checked=""HtmlEncode[[checked]]"" id=""HtmlEncode[[Prefix_Property1]]"" " + @"name=""HtmlEncode[[Prefix.Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" + @"<input name=""HtmlEncode[[Prefix.Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />"; var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData()); helper.ViewContext.ClientValidationEnabled = false; helper.ViewData.Remove(nameof(TestModel.Property1)); helper.ViewData["Prefix"] = new TestModel { Property1 = true }; helper.ViewData.Model = new TestModel(); // Act var html = helper.CheckBox("Prefix.Property1", isChecked: null, htmlAttributes: null); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(html)); }
public void CheckBoxForInTemplate_GeneratesExpectedValue() { // Arrange var requiredMessage = ValidationAttributeUtil.GetRequiredErrorMessage("Property1"); var expected = $@"<input data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[{requiredMessage}]]"" " + @"id=""HtmlEncode[[MyPrefix_Property1]]"" name=""HtmlEncode[[MyPrefix.Property1]]"" Property3=""HtmlEncode[[PropValue]]"" " + @"type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[MyPrefix.Property1]]"" type=""HtmlEncode[[hidden]]"" " + @"value=""HtmlEncode[[false]]"" />"; var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData()); helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix"; var attributes = new Dictionary <string, object> { { "Property3", "PropValue" } }; // Act var html = helper.CheckBoxFor(m => m.Property1, attributes); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(html)); }
public void ValidationSummary_MultipleErrors_ReturnsExpectedDiv( bool excludePropertyErrors, string prefix, string expected) { // Arrange var model = new ValidationModel(); var html = DefaultTemplatesUtilities.GetHtmlHelper(model); html.ViewData.TemplateInfo.HtmlFieldPrefix = prefix; AddMultipleErrors(html.ViewData.ModelState); // Act var result = html.ValidationSummary( excludePropertyErrors, message: null, htmlAttributes: null, tag: null); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(result)); }
public void BeginForm_EndForm_SuppressAntiforgeryToken_WithExplicitCallToAntiforgery() { // Arrange var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict); htmlGenerator .Setup(g => g.GenerateForm( It.IsAny<ViewContext>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>(), It.IsAny<string>(), It.IsAny<object>())) .Returns(new TagBuilder("form")); htmlGenerator .Setup(g => g.GenerateAntiforgery(It.IsAny<ViewContext>())) .Returns(new TagBuilder("antiforgery")); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object); var serviceProvider = new Mock<IServiceProvider>(); serviceProvider.Setup(s => s.GetService(typeof(HtmlEncoder))).Returns(new HtmlTestEncoder()); var viewContext = htmlHelper.ViewContext; viewContext.HttpContext.RequestServices = serviceProvider.Object; var writer = viewContext.Writer as StringWriter; Assert.NotNull(writer); // Act & Assert using (var form = htmlHelper.BeginForm(FormMethod.Post, antiforgery: false, htmlAttributes: null)) { // This call will ouput a token. Assert.Equal("antiforgery", Assert.IsType<TagBuilder>(htmlHelper.AntiForgeryToken()).TagName); } Assert.Equal( "<form></form>", writer.GetStringBuilder().ToString()); }
public void Display_UsesTemplateName() { // Arrange var model = new SomeModel { SomeProperty = "ModelValue" }; var viewEngine = new Mock <ICompositeViewEngine>(MockBehavior.Strict); viewEngine .Setup(v => v.GetView(/*executingFilePath*/ null, It.IsAny <string>(), /*isMainPage*/ false)) .Returns(ViewEngineResult.NotFound(string.Empty, Enumerable.Empty <string>())); viewEngine .Setup(v => v.FindView(It.IsAny <ActionContext>(), "DisplayTemplates/SomeTemplate", /*isMainPage*/ false)) .Returns(ViewEngineResult.Found("SomeView", Mock.Of <IView>())) .Verifiable(); var helper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object); // Act var displayResult = helper.Display(expression: "SomeProperty", templateName: "SomeTemplate"); // Assert viewEngine.Verify(); }
public void DisplayTextFor_ReturnsSimpleDisplayText_IfSetAndValueNonNull() { // Arrange var model = new OverriddenToStringModel("Ignored text") { SimpleDisplay = "Simple display text", }; var provider = new TestModelMetadataProvider(); provider.ForType <OverriddenToStringModel>().DisplayDetails(dd => { dd.SimpleDisplayProperty = nameof(OverriddenToStringModel.SimpleDisplay); }); var helper = DefaultTemplatesUtilities.GetHtmlHelper <OverriddenToStringModel>(model: model, provider: provider); // Act var result = helper.DisplayTextFor(m => m); // Assert Assert.Equal("Simple display text", result); }
public void Display_UsesTemplateFormatted(HtmlHelperDisplayExtensionsTest.FormatModel model, string expectedResult) { // Arrange var view = new Mock<IView>(); view.Setup(v => v.RenderAsync(It.IsAny<ViewContext>())) .Callback((ViewContext v) => v.Writer.WriteAsync(v.ViewData.TemplateInfo.FormattedModelValue.ToString())) .Returns(Task.FromResult(0)); var viewEngine = new Mock<ICompositeViewEngine>(MockBehavior.Strict); viewEngine .Setup(v => v.GetView(/*executingFilePath*/ null, It.IsAny<string>(), /*isMainPage*/ false)) .Returns(ViewEngineResult.NotFound(string.Empty, Enumerable.Empty<string>())); viewEngine .Setup(v => v.FindView(It.IsAny<ActionContext>(), "EditorTemplates/Status", /*isMainPage*/ false)) .Returns(ViewEngineResult.Found("Status", view.Object)) .Verifiable(); var helper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object); // Act var displayResult = helper.EditorFor(x => x.FormatProperty); // Assert Assert.Equal(expectedResult, HtmlContentUtilities.HtmlContentToString(displayResult)); }
public void CheckBoxFor_WithAttributeDictionary_GeneratesExpectedAttributes() { // Arrange var requiredMessage = ValidationAttributeUtil.GetRequiredErrorMessage("Property1"); var expected = $@"<input data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[{requiredMessage}]]"" " + @"id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" " + @"Property3=""HtmlEncode[[Property3Value]]"" type=""HtmlEncode[[checkbox]]"" " + @"value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[Property1]]"" " + @"type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />"; var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData()); var attributes = new Dictionary <string, object> { { "Property3", "Property3Value" }, { "name", "-expression-" }, // overridden }; // Act var html = helper.CheckBoxFor(m => m.Property1, attributes); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(html)); }
public void ValidationSummary_OneInvalidProperty_ReturnsExpectedDiv( bool excludePropertyErrors, bool clientValidationEnabled, string ignored, string expected) { // Arrange var model = new ValidationModel(); var html = DefaultTemplatesUtilities.GetHtmlHelper(model); html.ViewContext.ClientValidationEnabled = clientValidationEnabled; html.ViewData.ModelState.AddModelError("Property1", "This is my validation message"); // Act var result = html.ValidationSummary( excludePropertyErrors, message: null, htmlAttributes: null, tag: null); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(result)); }
public void DisplayTextFor_IgnoresModelStateEntry() { // Arrange var model = new OverriddenToStringModel("Model value") { Name = "Property value", }; var helper = DefaultTemplatesUtilities.GetHtmlHelper(model); var viewData = helper.ViewData; viewData["Name"] = "View data dictionary value"; viewData.TemplateInfo.HtmlFieldPrefix = "FieldPrefix"; viewData.ModelState.SetModelValue( "FieldPrefix.Name", "Attempted name value", "Attempted name value"); // Act var result = helper.DisplayTextFor(m => m.Name); // Assert Assert.Equal("Property value", result); }
public void DisplayText_ReturnsPropertyValue_IfNameFound() { // Arrange var model = new OverriddenToStringModel("Ignored text") { Name = "Property value", SimpleDisplay = "Simple display text", }; var provider = new TestModelMetadataProvider(); provider.ForType <OverriddenToStringModel>().DisplayDetails(dd => { dd.SimpleDisplayProperty = nameof(OverriddenToStringModel.SimpleDisplay); }); var helper = DefaultTemplatesUtilities.GetHtmlHelper <OverriddenToStringModel>(model: model, provider: provider); // Act var result = helper.DisplayText("Name"); // Assert Assert.Equal("Property value", result); }
public void TextAreaFor_ComplexExpressions_UsesModelStateValueForComplexExpressions( Expression <Func <ComplexModel, string> > expression, string expected) { // Arrange var model = new ComplexModel(); var helper = DefaultTemplatesUtilities.GetHtmlHelper(model); helper.ViewData.TemplateInfo.HtmlFieldPrefix = "pre"; helper.ViewData.ModelState.SetModelValue("pre.Property3[key]", "MProp3Val", "MProp3Val"); helper.ViewData.ModelState.SetModelValue("pre.Property4.Property5", "MProp5Val", "MProp5Val"); helper.ViewData.ModelState.SetModelValue("pre.Property4.Property6[0]", "MProp6Val", "MProp6Val"); helper.ViewData.Model.Property3["key"] = "Prop3Val"; helper.ViewData.Model.Property4.Property5 = "Prop5Val"; helper.ViewData.Model.Property4.Property6.Add("Prop6Val"); // Act var result = helper.TextAreaFor(expression); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(result)); }
public void DisplayNameHelpers_ReturnDisplayName_IfNonNull(string displayName) { // Arrange var provider = new TestModelMetadataProvider(); provider .ForType <DefaultTemplatesUtilities.ObjectTemplateModel>() .DisplayDetails(dd => dd.DisplayName = () => displayName); var helper = DefaultTemplatesUtilities.GetHtmlHelper(provider: provider); var enumerableHelper = DefaultTemplatesUtilities.GetHtmlHelperForEnumerable(provider: provider); // Act var displayNameResult = helper.DisplayName(expression: string.Empty); var displayNameForResult = helper.DisplayNameFor(m => m); var displayNameForEnumerableResult = enumerableHelper.DisplayNameFor((DefaultTemplatesUtilities.ObjectTemplateModel m) => m); var displayNameForModelResult = helper.DisplayNameForModel(); // Assert Assert.Equal(displayName, displayNameResult); Assert.Equal(displayName, displayNameForResult); Assert.Equal(displayName, displayNameForEnumerableResult); Assert.Equal(displayName, displayNameForModelResult); }