Skip to content
This repository was archived by the owner on Dec 14, 2018. It is now read-only.

Commit 0708aef

Browse files
author
NTaylorMullen
committed
Addressed code review comments.
1 parent 9c82004 commit 0708aef

File tree

2 files changed

+86
-33
lines changed

2 files changed

+86
-33
lines changed

src/Microsoft.AspNet.Mvc.TagHelpers/ValidationMessageTagHelper.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,16 @@ public override void Process(TagHelperContext context, TagHelperOutput output)
3434
var tagBuilder = Generator.GenerateValidationMessage(ViewContext,
3535
For.Name,
3636
message: output.Content,
37-
tag: output.TagName,
37+
tag: null,
3838
htmlAttributes: null);
3939

40-
output.Merge(tagBuilder);
40+
if (tagBuilder != null)
41+
{
42+
output.MergeAttributes(tagBuilder);
43+
44+
// We passed in the content, if there's something there it'll be set appropriately.
45+
output.Content = tagBuilder.InnerHtml;
46+
}
4147
}
4248
}
4349
}

test/Microsoft.AspNet.Mvc.TagHelpers.Test/ValidationMessageTagHelperTest.cs

Lines changed: 78 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
using System.Collections.Generic;
55
using System.IO;
66
using System.Reflection;
7+
using System.Threading.Tasks;
78
using Microsoft.AspNet.Http;
89
using Microsoft.AspNet.Mvc.ModelBinding;
10+
using Microsoft.AspNet.Mvc.Razor;
911
using Microsoft.AspNet.Mvc.Rendering;
1012
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
1113
using Microsoft.AspNet.Routing;
@@ -17,50 +19,94 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
1719
public class ValidationMessageTagHelperTest
1820
{
1921
[Fact]
20-
public void Process_CallsIntoGenerateValidationMessageWithExpectedParameters()
22+
public async Task ProcessAsync_GeneratesExpectedOutput()
23+
{
24+
// Arrange
25+
var metadataProvider = new DataAnnotationsModelMetadataProvider();
26+
var modelExpression = CreateModelExpression("Name");
27+
var validationMessageTagHelper = new ValidationMessageTagHelper
28+
{
29+
For = modelExpression
30+
};
31+
32+
var tagHelperContext = new TagHelperContext(
33+
allAttributes: new Dictionary<string, object>
34+
{
35+
{ "id", "myvalidationmessage" },
36+
{ "for", modelExpression },
37+
});
38+
var output = new TagHelperOutput(
39+
"original tag name",
40+
attributes: new Dictionary<string, string>
41+
{
42+
{ "id", "myvalidationmessage" }
43+
},
44+
content: "Something");
45+
46+
var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
47+
var viewContext = TestableHtmlGenerator.GetViewContext(model: null,
48+
htmlGenerator: htmlGenerator,
49+
metadataProvider: metadataProvider);
50+
51+
var activator = new DefaultTagHelperActivator();
52+
activator.Activate(validationMessageTagHelper, viewContext);
53+
54+
// Act
55+
await validationMessageTagHelper.ProcessAsync(tagHelperContext, output);
56+
57+
// Assert
58+
Assert.Equal(4, output.Attributes.Count);
59+
var attribute = Assert.Single(output.Attributes, kvp => kvp.Key.Equals("id"));
60+
Assert.Equal("myvalidationmessage", attribute.Value);
61+
attribute = Assert.Single(output.Attributes, kvp => kvp.Key.Equals("class"));
62+
Assert.Equal("field-validation-valid", attribute.Value);
63+
attribute = Assert.Single(output.Attributes, kvp => kvp.Key.Equals("data-valmsg-for"));
64+
Assert.Equal("Name", attribute.Value);
65+
attribute = Assert.Single(output.Attributes, kvp => kvp.Key.Equals("data-valmsg-replace"));
66+
Assert.Equal("false", attribute.Value);
67+
Assert.Equal("Something", output.Content);
68+
Assert.Equal("original tag name", output.TagName);
69+
}
70+
71+
[Fact]
72+
public async Task ProcessAsync_CallsIntoGenerateValidationMessageWithExpectedParameters()
2173
{
2274
// Arrange
2375
var validationMessageTagHelper = new ValidationMessageTagHelper
2476
{
2577
For = CreateModelExpression("Hello")
2678
};
27-
var called = false;
2879
var output = new TagHelperOutput(
2980
"span",
3081
attributes: new Dictionary<string, string>(),
3182
content: "Content of validation message");
3283

3384
var expectedViewContext = CreateViewContext();
3485
var generator = new Mock<IHtmlGenerator>();
35-
generator.Setup(mock =>
36-
mock.GenerateValidationMessage(It.IsAny<ViewContext>(),
37-
It.IsAny<string>(),
38-
It.IsAny<string>(),
39-
It.IsAny<string>(),
40-
It.IsAny<object>()))
41-
.Callback<ViewContext, string, string, string, object>(
42-
(viewContext, name, message, tag, htmlAttributes) =>
43-
{
44-
called = true;
45-
46-
Assert.Same(expectedViewContext, viewContext);
47-
Assert.Equal("Hello", name);
48-
Assert.Equal("Content of validation message", message);
49-
Assert.Equal("span", tag);
50-
Assert.Null(htmlAttributes);
51-
})
52-
.Returns(new TagBuilder("span"));
86+
var setup = generator.Setup(mock =>
87+
mock.GenerateValidationMessage(expectedViewContext,
88+
"Hello",
89+
"Content of validation message",
90+
null,
91+
null));
92+
setup.Returns(new TagBuilder("span"));
93+
setup.Verifiable();
5394

5495
SetViewContextAndGenerator(validationMessageTagHelper, expectedViewContext, generator.Object);
5596

5697
// Act & Assert
57-
validationMessageTagHelper.Process(context: null, output: output);
98+
await validationMessageTagHelper.ProcessAsync(context: null, output: output);
5899

59-
Assert.True(called);
100+
generator.Verify();
101+
Assert.Equal("span", output.TagName);
102+
Assert.Empty(output.Attributes);
103+
104+
// Our mock doesn't set any TagBuilder content.
105+
Assert.Empty(output.Content);
60106
}
61107

62108
[Fact]
63-
public void Process_MergesTagBuilderFromGenerateValidationMessage()
109+
public async Task ProcessAsync_MergesTagBuilderFromGenerateValidationMessage()
64110
{
65111
// Arrange
66112
var validationMessageTagHelper = new ValidationMessageTagHelper
@@ -81,21 +127,21 @@ public void Process_MergesTagBuilderFromGenerateValidationMessage()
81127

82128
var expectedViewContext = CreateViewContext();
83129
var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
84-
generator.Setup(mock =>
130+
var setup = generator.Setup(mock =>
85131
mock.GenerateValidationMessage(It.IsAny<ViewContext>(),
86132
It.IsAny<string>(),
87133
It.IsAny<string>(),
88134
It.IsAny<string>(),
89-
It.IsAny<object>()))
90-
.Returns(tagBuilder);
135+
It.IsAny<object>()));
136+
setup.Returns(tagBuilder);
91137

92138
SetViewContextAndGenerator(validationMessageTagHelper, expectedViewContext, generator.Object);
93139

94140
// Act
95-
validationMessageTagHelper.Process(context: null, output: output);
141+
await validationMessageTagHelper.ProcessAsync(context: null, output: output);
96142

97143
// Assert
98-
Assert.Equal(output.TagName, "span2");
144+
Assert.Equal(output.TagName, "span");
99145
Assert.Equal(2, output.Attributes.Count);
100146
var attribute = Assert.Single(output.Attributes, kvp => kvp.Key.Equals("data-foo"));
101147
Assert.Equal("bar", attribute.Value);
@@ -105,7 +151,7 @@ public void Process_MergesTagBuilderFromGenerateValidationMessage()
105151
}
106152

107153
[Fact]
108-
public void Process_DoesNothingIfNullFor()
154+
public async Task ProcessAsync_DoesNothingIfNullFor()
109155
{
110156
// Arrange
111157
var validationMessageTagHelper = new ValidationMessageTagHelper();
@@ -119,9 +165,10 @@ public void Process_DoesNothingIfNullFor()
119165

120166
SetViewContextAndGenerator(validationMessageTagHelper, expectedViewContext, generator.Object);
121167

122-
// Act & Assert
123-
validationMessageTagHelper.Process(context: null, output: output);
168+
// Act
169+
await validationMessageTagHelper.ProcessAsync(context: null, output: output);
124170

171+
// Assert
125172
Assert.Equal("span", output.TagName);
126173
Assert.Empty(output.Attributes);
127174
Assert.Equal("Content of validation message", output.Content);

0 commit comments

Comments
 (0)