diff --git a/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/CharacterCount.cshtml b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/CharacterCount.cshtml
new file mode 100644
index 00000000..cf0075f4
--- /dev/null
+++ b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/CharacterCount.cshtml
@@ -0,0 +1,3 @@
+@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.CharacterCountTestsModel
+
+
diff --git a/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/CharacterCountOverridden.cshtml b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/CharacterCountOverridden.cshtml
new file mode 100644
index 00000000..fa06a4cf
--- /dev/null
+++ b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/CharacterCountOverridden.cshtml
@@ -0,0 +1,8 @@
+@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.CharacterCountTestsModel
+
+
+ Overridden label
+ Overridden hint
+ Overridden error message
+ Overridden value
+
diff --git a/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs
index c5b599ec..931db491 100644
--- a/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs
+++ b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs
@@ -217,6 +217,50 @@ public async Task TextareaOverridden_RendersCorrectly()
var errorMessage = page.Locator(".govuk-error-message").First;
Assert.Equal("Error: Overridden error message", await errorMessage.TextContentAsync());
}
+
+ [Fact]
+ public async Task CharacterCount_RendersCorrectly()
+ {
+ var page = await fixture.Browser!.NewPageAsync();
+ await page.GotoAsync($"{ServerFixture.BaseUrl}/ModelBindingTests/CharacterCount");
+
+ var textarea = page.Locator("textarea").First;
+ Assert.Equal("Text", await textarea.GetAttributeAsync("name"));
+ Assert.Equal("Text", await textarea.GetAttributeAsync("id"));
+ Assert.Equal("Model value", await textarea.InputValueAsync());
+
+ var label = page.Locator("label").First;
+ Assert.Equal("Text", await label.GetAttributeAsync("for"));
+ Assert.Equal("ModelMetadata display name", await label.InnerTextAsync());
+
+ var hint = page.Locator(".govuk-hint").First;
+ Assert.Equal("ModelMetadata description", await hint.InnerTextAsync());
+
+ var errorMessage = page.Locator(".govuk-error-message").First;
+ Assert.Equal("Error: Model error message", await errorMessage.TextContentAsync());
+ }
+
+ [Fact]
+ public async Task CharacterCountOverridden_RendersCorrectly()
+ {
+ var page = await fixture.Browser!.NewPageAsync();
+ await page.GotoAsync($"{ServerFixture.BaseUrl}/ModelBindingTests/CharacterCountOverridden");
+
+ var textarea = page.Locator("textarea").First;
+ Assert.Equal("OverriddenName", await textarea.GetAttributeAsync("name"));
+ Assert.Equal("OverriddenId", await textarea.GetAttributeAsync("id"));
+ Assert.Equal("Overridden value", await textarea.InputValueAsync());
+
+ var label = page.Locator("label").First;
+ Assert.Equal("OverriddenId", await label.GetAttributeAsync("for"));
+ Assert.Equal("Overridden label", await label.InnerTextAsync());
+
+ var hint = page.Locator(".govuk-hint").First;
+ Assert.Equal("Overridden hint", await hint.InnerTextAsync());
+
+ var errorMessage = page.Locator(".govuk-error-message").First;
+ Assert.Equal("Error: Overridden error message", await errorMessage.TextContentAsync());
+ }
}
[Route("/[controller]/[action]")]
@@ -284,6 +328,20 @@ public IActionResult TextareaOverridden()
ModelState.AddModelError(nameof(TextareaTestsModel.Text), "Model error message");
return View(new TextareaTestsModel { Text = "Model value" });
}
+
+ [HttpGet]
+ public IActionResult CharacterCount()
+ {
+ ModelState.AddModelError(nameof(CharacterCountTestsModel.Text), "Model error message");
+ return View(new CharacterCountTestsModel { Text = "Model value" });
+ }
+
+ [HttpGet]
+ public IActionResult CharacterCountOverridden()
+ {
+ ModelState.AddModelError(nameof(CharacterCountTestsModel.Text), "Model error message");
+ return View(new CharacterCountTestsModel { Text = "Model value" });
+ }
}
public record TextInputTestsModel
@@ -309,3 +367,9 @@ public record TextareaTestsModel
[Display(Name = "ModelMetadata display name", Description = "ModelMetadata description")]
public string? Text { get; set; }
}
+
+public record CharacterCountTestsModel
+{
+ [Display(Name = "ModelMetadata display name", Description = "ModelMetadata description")]
+ public string? Text { get; set; }
+}