public async Task ProcessAsync_GeneratesExpectedOutput() { // Arrange var expectedTagName = "not-div"; var metadataProvider = new TestModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var validationSummaryTagHelper = new ValidationSummaryTagHelper(htmlGenerator) { ValidationSummary = ValidationSummary.All, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var tagHelperContext = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList { { "class", "form-control" } }, getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Custom Content"); Model model = null; var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); validationSummaryTagHelper.ViewContext = viewContext; // Act await validationSummaryTagHelper.ProcessAsync(tagHelperContext, output); // Assert Assert.Equal(2, output.Attributes.Count); var attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("class")); Assert.Equal("form-control validation-summary-valid", attribute.Value); attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("data-valmsg-summary")); Assert.Equal("true", attribute.Value); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal("Custom Content<ul><li style=\"display:none\"></li>" + Environment.NewLine + "</ul>", output.PostContent.GetContent()); Assert.Equal(expectedTagName, output.TagName); }
public async Task ProcessAsync_GeneratesValidationSummaryWhenNotNone(ValidationSummary validationSummary) { // Arrange var tagBuilder = new TagBuilder("span2"); tagBuilder.InnerHtml.SetHtmlContent("New HTML"); var generator = new Mock <IHtmlGenerator>(); generator .Setup(mock => mock.GenerateValidationSummary( It.IsAny <ViewContext>(), It.IsAny <bool>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object>())) .Returns(tagBuilder) .Verifiable(); var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object) { ValidationSummary = validationSummary, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var output = new TagHelperOutput( tagName: "div", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>( new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Content of validation message"); var viewContext = CreateViewContext(); validationSummaryTagHelper.ViewContext = viewContext; var context = new TagHelperContext( tagName: "div", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>(), uniqueId: "test"); // Act await validationSummaryTagHelper.ProcessAsync(context, output); // Assert Assert.Equal("div", output.TagName); Assert.Empty(output.Attributes); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal("Content of validation messageNew HTML", output.PostContent.GetContent()); generator.Verify(); }
public async Task ProcessAsync_CallsIntoGenerateValidationSummaryWithExpectedParameters( ValidationSummary validationSummary, bool expectedExcludePropertyErrors) { // Arrange var expectedViewContext = CreateViewContext(); var generator = new Mock <IHtmlGenerator>(); generator .Setup(mock => mock.GenerateValidationSummary( expectedViewContext, expectedExcludePropertyErrors, null, // message null, // headerTag null)) // htmlAttributes .Returns(new TagBuilder("div")) .Verifiable(); var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object) { ValidationSummary = validationSummary, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var expectedPostContent = "original post-content"; var output = new TagHelperOutput( tagName: "div", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>( new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent(expectedPostContent); validationSummaryTagHelper.ViewContext = expectedViewContext; var context = new TagHelperContext( tagName: "div", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>(), uniqueId: "test"); // Act & Assert await validationSummaryTagHelper.ProcessAsync(context, output); generator.Verify(); Assert.Equal("div", output.TagName); Assert.Empty(output.Attributes); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal(expectedPostContent, output.PostContent.GetContent()); }
public async Task ProcessAsync_GeneratesExpectedOutput_WithNoErrors(ModelStateDictionary modelState) { // Arrange var expectedTagName = "not-div"; var metadataProvider = new TestModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var expectedAttributes = new TagHelperAttributeList { new TagHelperAttribute("class", "form-control validation-summary-valid"), new TagHelperAttribute("data-valmsg-summary", "true"), }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var tagHelperContext = new TagHelperContext( tagName: "not-div", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>(), uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList { { "class", "form-control" } }, getChildContentAsync: (useCachedResult, encoder) => { throw new InvalidOperationException("getChildContentAsync called unexpectedly"); }); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Custom Content"); var model = new Model(); var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider, modelState); var validationSummaryTagHelper = new ValidationSummaryTagHelper(htmlGenerator) { ValidationSummary = ValidationSummary.All, ViewContext = viewContext, }; // Act await validationSummaryTagHelper.ProcessAsync(tagHelperContext, output); // Assert Assert.Equal(expectedAttributes, output.Attributes, CaseSensitiveTagHelperAttributeComparer.Default); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal( $"Custom Content<ul><li style=\"display:none\"></li>{Environment.NewLine}</ul>", output.PostContent.GetContent()); Assert.Equal(expectedTagName, output.TagName); }
public async Task ProcessAsync_GeneratesExpectedOutput() { // Arrange var expectedTagName = "not-div"; var metadataProvider = new TestModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var validationSummaryTagHelper = new ValidationSummaryTagHelper(htmlGenerator) { ValidationSummary = ValidationSummary.All, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var tagHelperContext = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty<TagHelperAttribute>()), items: new Dictionary<object, object>(), uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList { { "class", "form-control" } }, getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult<TagHelperContent>(tagHelperContent); }); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Custom Content"); Model model = null; var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); validationSummaryTagHelper.ViewContext = viewContext; // Act await validationSummaryTagHelper.ProcessAsync(tagHelperContext, output); // Assert Assert.Equal(2, output.Attributes.Count); var attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("class")); Assert.Equal("form-control validation-summary-valid", attribute.Value); attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("data-valmsg-summary")); Assert.Equal("true", attribute.Value); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal("Custom Content<ul><li style=\"display:none\"></li>" + Environment.NewLine + "</ul>", output.PostContent.GetContent()); Assert.Equal(expectedTagName, output.TagName); }
public void ValidationSummaryProperty_ThrowsWhenSetToInvalidValidationSummaryValue( ValidationSummary validationSummary) { // Arrange var generator = new TestableHtmlGenerator(new EmptyModelMetadataProvider()); var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator); var validationTypeName = typeof(ValidationSummary).FullName; var expectedMessage = $"The value of argument 'value' ({validationSummary}) is invalid for Enum type '{validationTypeName}'."; // Act & Assert ExceptionAssert.ThrowsArgument( () => validationSummaryTagHelper.ValidationSummary = validationSummary, "value", expectedMessage); }
public void ValidationSummaryProperty_ThrowsWhenSetToInvalidValidationSummaryValue( ValidationSummary validationSummary) { // Arrange var generator = new TestableHtmlGenerator(new EmptyModelMetadataProvider()); var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator); var validationTypeName = typeof(ValidationSummary).FullName; var expectedMessage = $@"The value of argument 'value' ({validationSummary}) is invalid for Enum type '{validationTypeName}'. Parameter name: value"; // Act & Assert var ex = Assert.Throws <ArgumentException>( "value", () => { validationSummaryTagHelper.ValidationSummary = validationSummary; }); Assert.Equal(expectedMessage, ex.Message); }
public async Task ProcessAsync_DoesNothingIfValidationSummaryNone() { // Arrange var generator = new Mock <IHtmlGenerator>(MockBehavior.Strict); var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object) { ValidationSummary = ValidationSummary.None, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var expectedPostContent = "original post-content"; var output = new TagHelperOutput( tagName: "div", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>( new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent(expectedPostContent); var viewContext = CreateViewContext(); validationSummaryTagHelper.ViewContext = viewContext; var context = new TagHelperContext( tagName: "div", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>(), uniqueId: "test"); // Act await validationSummaryTagHelper.ProcessAsync(context, output); // Assert Assert.Equal("div", output.TagName); Assert.Empty(output.Attributes); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal(expectedPostContent, output.PostContent.GetContent()); }
public async Task ProcessAsync_SuppressesOutput_IfModelOnly_WithNoModelError( string prefix, ModelStateDictionary modelStateDictionary) { // Arrange var metadataProvider = new TestModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var viewContext = CreateViewContext(); viewContext.ViewData.TemplateInfo.HtmlFieldPrefix = prefix; var validationSummaryTagHelper = new ValidationSummaryTagHelper(htmlGenerator) { ValidationSummary = ValidationSummary.ModelOnly, ViewContext = viewContext, }; var output = new TagHelperOutput( "div", new TagHelperAttributeList(), (useCachedResult, encoder) => { throw new InvalidOperationException("getChildContentAsync called unexpectedly."); }); var context = new TagHelperContext( tagName: "div", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>(), uniqueId: "test"); // Act await validationSummaryTagHelper.ProcessAsync(context, output); // Assert Assert.Null(output.TagName); Assert.Empty(output.Attributes); Assert.Empty(HtmlContentUtilities.HtmlContentToString(output)); }
public async Task ProcessAsync_SuppressesOutput_IfClientSideValiationDisabled_WithNoErrorsData( ModelStateDictionary modelStateDictionary) { // Arrange var metadataProvider = new TestModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var viewContext = CreateViewContext(); viewContext.ClientValidationEnabled = false; var validationSummaryTagHelper = new ValidationSummaryTagHelper(htmlGenerator) { ValidationSummary = ValidationSummary.All, ViewContext = viewContext, }; var output = new TagHelperOutput( "div", new TagHelperAttributeList(), (useCachedResult, encoder) => { throw new InvalidOperationException("getChildContentAsync called unexpectedly."); }); var context = new TagHelperContext( new TagHelperAttributeList(), items: new Dictionary <object, object>(), uniqueId: "test"); // Act await validationSummaryTagHelper.ProcessAsync(context, output); // Assert Assert.Null(output.TagName); Assert.Empty(output.Attributes); Assert.Empty(HtmlContentUtilities.HtmlContentToString(output)); }
public async Task ProcessAsync_MergesTagBuilderFromGenerateValidationSummary() { // Arrange var tagBuilder = new TagBuilder("span2"); tagBuilder.InnerHtml.SetHtmlContent("New HTML"); tagBuilder.Attributes.Add("anything", "something"); tagBuilder.Attributes.Add("data-foo", "bar"); tagBuilder.Attributes.Add("data-hello", "world"); var generator = new Mock <IHtmlGenerator>(MockBehavior.Strict); generator .Setup(mock => mock.GenerateValidationSummary( It.IsAny <ViewContext>(), It.IsAny <bool>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object>())) .Returns(tagBuilder); var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object) { ValidationSummary = ValidationSummary.ModelOnly, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var output = new TagHelperOutput( tagName: "div", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => Task.FromResult <TagHelperContent>( new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Content of validation summary"); var viewContext = CreateViewContext(); validationSummaryTagHelper.ViewContext = viewContext; var context = new TagHelperContext( tagName: "div", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>(), uniqueId: "test"); // Act await validationSummaryTagHelper.ProcessAsync(context, output); // Assert Assert.Equal("div", output.TagName); Assert.Collection( output.Attributes, attribute => { Assert.Equal("anything", attribute.Name); Assert.Equal("something", attribute.Value); }, attribute => { Assert.Equal("data-foo", attribute.Name); Assert.Equal("bar", attribute.Value); }, attribute => { Assert.Equal("data-hello", attribute.Name); Assert.Equal("world", attribute.Value); }); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal("Content of validation summaryNew HTML", output.PostContent.GetContent()); }
public async Task ProcessAsync_GeneratesExpectedOutput_WithModelError(ValidationSummary validationSummary) { // Arrange var expectedError = "I am an error."; var expectedTagName = "not-div"; var metadataProvider = new TestModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var validationSummaryTagHelper = new ValidationSummaryTagHelper(htmlGenerator) { ValidationSummary = validationSummary, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var tagHelperContext = new TagHelperContext( tagName: "not-div", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>(), uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList { { "class", "form-control" } }, getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Custom Content"); var model = new Model(); var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); validationSummaryTagHelper.ViewContext = viewContext; var modelState = viewContext.ModelState; SetValidModelState(modelState); modelState.AddModelError(string.Empty, expectedError); // Act await validationSummaryTagHelper.ProcessAsync(tagHelperContext, output); // Assert Assert.InRange(output.Attributes.Count, low: 1, high: 2); var attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("class")); Assert.Equal( new TagHelperAttribute("class", "form-control validation-summary-errors"), attribute, CaseSensitiveTagHelperAttributeComparer.Default); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal( $"Custom Content<ul><li>{expectedError}</li>{Environment.NewLine}</ul>", output.PostContent.GetContent()); Assert.Equal(expectedTagName, output.TagName); }
public async Task ProcessAsync_DoesNothingIfValidationSummaryNone() { // Arrange var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict); var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object) { ValidationSummary = ValidationSummary.None, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var expectedPostContent = "original post-content"; var output = new TagHelperOutput( tagName: "div", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => Task.FromResult<TagHelperContent>( new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent(expectedPostContent); var viewContext = CreateViewContext(); validationSummaryTagHelper.ViewContext = viewContext; var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty<TagHelperAttribute>()), items: new Dictionary<object, object>(), uniqueId: "test"); // Act await validationSummaryTagHelper.ProcessAsync(context, output); // Assert Assert.Equal("div", output.TagName); Assert.Empty(output.Attributes); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal(expectedPostContent, output.PostContent.GetContent()); }
public async Task ProcessAsync_GeneratesExpectedOutput_WithPropertyErrors() { // Arrange var expectedError0 = "I am an error."; var expectedError2 = "I am also an error."; var expectedTagName = "not-div"; var metadataProvider = new TestModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var validationSummaryTagHelper = new ValidationSummaryTagHelper(htmlGenerator) { ValidationSummary = ValidationSummary.All, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var tagHelperContext = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty <TagHelperAttribute>()), items: new Dictionary <object, object>(), uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList { { "class", "form-control" } }, getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Custom Content"); var model = new Model(); var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); validationSummaryTagHelper.ViewContext = viewContext; var modelState = viewContext.ModelState; SetValidModelState(modelState); modelState.AddModelError(key: $"{nameof(Model.Strings)}[0]", errorMessage: expectedError0); modelState.AddModelError(key: $"{nameof(Model.Strings)}[2]", errorMessage: expectedError2); // Act await validationSummaryTagHelper.ProcessAsync(tagHelperContext, output); // Assert Assert.Equal(2, output.Attributes.Count); var attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("class")); Assert.Equal("form-control validation-summary-errors", attribute.Value); attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("data-valmsg-summary")); Assert.Equal("true", attribute.Value); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal( $"Custom Content<ul><li>{expectedError0}</li>{Environment.NewLine}" + $"<li>{expectedError2}</li>{Environment.NewLine}</ul>", output.PostContent.GetContent()); Assert.Equal(expectedTagName, output.TagName); }
public async Task ProcessAsync_CallsIntoGenerateValidationSummaryWithExpectedParameters( ValidationSummary validationSummary, bool expectedExcludePropertyErrors) { // Arrange var expectedViewContext = CreateViewContext(); var generator = new Mock<IHtmlGenerator>(); generator .Setup(mock => mock.GenerateValidationSummary( expectedViewContext, expectedExcludePropertyErrors, null, // message null, // headerTag null)) // htmlAttributes .Returns(new TagBuilder("div")) .Verifiable(); var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object) { ValidationSummary = validationSummary, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var expectedPostContent = "original post-content"; var output = new TagHelperOutput( tagName: "div", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => Task.FromResult<TagHelperContent>( new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent(expectedPostContent); validationSummaryTagHelper.ViewContext = expectedViewContext; var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty<TagHelperAttribute>()), items: new Dictionary<object, object>(), uniqueId: "test"); // Act & Assert await validationSummaryTagHelper.ProcessAsync(context, output); generator.Verify(); Assert.Equal("div", output.TagName); Assert.Empty(output.Attributes); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal(expectedPostContent, output.PostContent.GetContent()); }
public void ValidationSummaryProperty_ThrowsWhenSetToInvalidValidationSummaryValue( ValidationSummary validationSummary) { // Arrange var generator = new TestableHtmlGenerator(new EmptyModelMetadataProvider()); var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator); var validationTypeName = typeof(ValidationSummary).FullName; var expectedMessage = $@"The value of argument 'value' ({validationSummary}) is invalid for Enum type '{validationTypeName}'. Parameter name: value"; // Act & Assert var ex = Assert.Throws<ArgumentException>( "value", () => { validationSummaryTagHelper.ValidationSummary = validationSummary; }); Assert.Equal(expectedMessage, ex.Message); }
public async Task ProcessAsync_GeneratesValidationSummaryWhenNotNone(ValidationSummary validationSummary) { // Arrange var tagBuilder = new TagBuilder("span2"); tagBuilder.InnerHtml.SetHtmlContent("New HTML"); var generator = new Mock<IHtmlGenerator>(); generator .Setup(mock => mock.GenerateValidationSummary( It.IsAny<ViewContext>(), It.IsAny<bool>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>())) .Returns(tagBuilder) .Verifiable(); var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object) { ValidationSummary = validationSummary, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var output = new TagHelperOutput( tagName: "div", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => Task.FromResult<TagHelperContent>( new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Content of validation message"); var viewContext = CreateViewContext(); validationSummaryTagHelper.ViewContext = viewContext; var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty<TagHelperAttribute>()), items: new Dictionary<object, object>(), uniqueId: "test"); // Act await validationSummaryTagHelper.ProcessAsync(context, output); // Assert Assert.Equal("div", output.TagName); Assert.Empty(output.Attributes); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal("Content of validation messageNew HTML", output.PostContent.GetContent()); generator.Verify(); }
public async Task ProcessAsync_GeneratesExpectedOutput_WithModelErrorForIEnumerable() { // Arrange var expectedError = "Something went wrong."; var expectedTagName = "not-div"; var expectedAttributes = new TagHelperAttributeList { new TagHelperAttribute("class", "form-control validation-summary-errors"), new TagHelperAttribute("data-valmsg-summary", "true"), }; var metadataProvider = new TestModelMetadataProvider(); var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var validationSummaryTagHelper = new ValidationSummaryTagHelper(htmlGenerator) { ValidationSummary = ValidationSummary.All, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var tagHelperContext = new TagHelperContext( tagName: "not-div", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>(), uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, attributes: new TagHelperAttributeList { { "class", "form-control" } }, getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Custom Content"); var model = new FormMetadata(); var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); validationSummaryTagHelper.ViewContext = viewContext; viewContext.ModelState.AddModelError(key: nameof(FormMetadata.ID), errorMessage: expectedError); // Act await validationSummaryTagHelper.ProcessAsync(tagHelperContext, output); // Assert Assert.Equal(expectedAttributes, output.Attributes, CaseSensitiveTagHelperAttributeComparer.Default); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal( $"Custom Content<ul><li>{expectedError}</li>{Environment.NewLine}</ul>", output.PostContent.GetContent()); Assert.Equal(expectedTagName, output.TagName); }
public async Task ProcessAsync_MergesTagBuilderFromGenerateValidationSummary() { // Arrange var tagBuilder = new TagBuilder("span2"); tagBuilder.InnerHtml.SetHtmlContent("New HTML"); tagBuilder.Attributes.Add("data-foo", "bar"); tagBuilder.Attributes.Add("data-hello", "world"); tagBuilder.Attributes.Add("anything", "something"); var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict); generator .Setup(mock => mock.GenerateValidationSummary( It.IsAny<ViewContext>(), It.IsAny<bool>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>())) .Returns(tagBuilder); var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object) { ValidationSummary = ValidationSummary.ModelOnly, }; var expectedPreContent = "original pre-content"; var expectedContent = "original content"; var output = new TagHelperOutput( tagName: "div", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => Task.FromResult<TagHelperContent>( new DefaultTagHelperContent())); output.PreContent.SetContent(expectedPreContent); output.Content.SetContent(expectedContent); output.PostContent.SetContent("Content of validation summary"); var viewContext = CreateViewContext(); validationSummaryTagHelper.ViewContext = viewContext; var context = new TagHelperContext( allAttributes: new TagHelperAttributeList( Enumerable.Empty<TagHelperAttribute>()), items: new Dictionary<object, object>(), uniqueId: "test"); // Act await validationSummaryTagHelper.ProcessAsync(context, output); // Assert Assert.Equal("div", output.TagName); Assert.Equal(3, output.Attributes.Count); var attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("data-foo")); Assert.Equal("bar", attribute.Value); attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("data-hello")); Assert.Equal("world", attribute.Value); attribute = Assert.Single(output.Attributes, attr => attr.Name.Equals("anything")); Assert.Equal("something", attribute.Value); Assert.Equal(expectedPreContent, output.PreContent.GetContent()); Assert.Equal(expectedContent, output.Content.GetContent()); Assert.Equal("Content of validation summaryNew HTML", output.PostContent.GetContent()); }