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"));