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; } +}