From 7726bbf07cee43103a522fce174abbc8957cb5fb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Feb 2026 13:20:03 +0000 Subject: [PATCH 1/3] Initial plan From 3076d7ee3d509c8479221643ebb55af8fea638ed Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Feb 2026 13:23:42 +0000 Subject: [PATCH 2/3] Add password input tests to TagHelperModelBindingTests Co-authored-by: gunndabad <2041280+gunndabad@users.noreply.github.com> --- .../PasswordInput.cshtml | 3 + .../PasswordInputOverridden.cshtml | 7 ++ .../TagHelperModelBindingTests/Tests.cs | 65 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/PasswordInput.cshtml create mode 100644 tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/PasswordInputOverridden.cshtml diff --git a/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/PasswordInput.cshtml b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/PasswordInput.cshtml new file mode 100644 index 00000000..f0551632 --- /dev/null +++ b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/PasswordInput.cshtml @@ -0,0 +1,3 @@ +@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.PasswordInputTestsModel + + diff --git a/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/PasswordInputOverridden.cshtml b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/PasswordInputOverridden.cshtml new file mode 100644 index 00000000..97deb8b7 --- /dev/null +++ b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/PasswordInputOverridden.cshtml @@ -0,0 +1,7 @@ +@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.PasswordInputTestsModel + + + Overridden label + Overridden hint + Overridden error message + diff --git a/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs index ebe4065d..cdce36d3 100644 --- a/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs +++ b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs @@ -49,6 +49,51 @@ public async Task TextInputOverridden_RendersCorrectly() var errorMessage = page.Locator(".govuk-error-message").First; Assert.Equal("Error: Overridden error message", await errorMessage.TextContentAsync()); } + + [Fact] + public async Task PasswordInput_RendersCorrectly() + { + var page = await fixture.Browser!.NewPageAsync(); + await page.GotoAsync($"{ServerFixture.BaseUrl}/ModelBindingTests/PasswordInput"); + + var input = page.Locator("input[type='password']").First; + Assert.Equal("Password", await input.GetAttributeAsync("name")); + Assert.Equal("Password", await input.GetAttributeAsync("id")); + Assert.Equal("Model value", await input.GetAttributeAsync("value")); + + var label = page.Locator("label").First; + Assert.Equal("Password", 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 PasswordInputOverridden_RendersCorrectly() + { + var page = await fixture.Browser!.NewPageAsync(); + await page.GotoAsync($"{ServerFixture.BaseUrl}/ModelBindingTests/PasswordInputOverridden"); + await page.PauseAsync(); + + var input = page.Locator("input[type='password']").First; + Assert.Equal("OverriddenName", await input.GetAttributeAsync("name")); + Assert.Equal("OverriddenId", await input.GetAttributeAsync("id")); + Assert.Equal("Overridden value", await input.GetAttributeAsync("value")); + + 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]")] @@ -67,6 +112,20 @@ public IActionResult TextInputOverridden() ModelState.AddModelError(nameof(TextInputTestsModel.Text), "Model error message"); return View(new TextInputTestsModel { Text = "Model value" }); } + + [HttpGet] + public IActionResult PasswordInput() + { + ModelState.AddModelError(nameof(PasswordInputTestsModel.Password), "Model error message"); + return View(new PasswordInputTestsModel { Password = "Model value" }); + } + + [HttpGet] + public IActionResult PasswordInputOverridden() + { + ModelState.AddModelError(nameof(PasswordInputTestsModel.Password), "Model error message"); + return View(new PasswordInputTestsModel { Password = "Model value" }); + } } public record TextInputTestsModel @@ -74,3 +133,9 @@ public record TextInputTestsModel [Display(Name = "ModelMetadata display name", Description = "ModelMetadata description")] public string? Text { get; set; } } + +public record PasswordInputTestsModel +{ + [Display(Name = "ModelMetadata display name", Description = "ModelMetadata description")] + public string? Password { get; set; } +} From 0043a97b3e449fdd8866927917d8368ab44c1e16 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Feb 2026 13:25:16 +0000 Subject: [PATCH 3/3] Remove PauseAsync debug statement Co-authored-by: gunndabad <2041280+gunndabad@users.noreply.github.com> --- .../TagHelperModelBindingTests/Tests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs index cdce36d3..97042f85 100644 --- a/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs +++ b/tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs @@ -77,7 +77,6 @@ public async Task PasswordInputOverridden_RendersCorrectly() { var page = await fixture.Browser!.NewPageAsync(); await page.GotoAsync($"{ServerFixture.BaseUrl}/ModelBindingTests/PasswordInputOverridden"); - await page.PauseAsync(); var input = page.Locator("input[type='password']").First; Assert.Equal("OverriddenName", await input.GetAttributeAsync("name"));