@@ -217,6 +217,50 @@ public async Task TextareaOverridden_RendersCorrectly()
217217 var errorMessage = page . Locator ( ".govuk-error-message" ) . First ;
218218 Assert . Equal ( "Error: Overridden error message" , await errorMessage . TextContentAsync ( ) ) ;
219219 }
220+
221+ [ Fact ]
222+ public async Task CharacterCount_RendersCorrectly ( )
223+ {
224+ var page = await fixture . Browser ! . NewPageAsync ( ) ;
225+ await page . GotoAsync ( $ "{ ServerFixture . BaseUrl } /ModelBindingTests/CharacterCount") ;
226+
227+ var textarea = page . Locator ( "textarea" ) . First ;
228+ Assert . Equal ( "Text" , await textarea . GetAttributeAsync ( "name" ) ) ;
229+ Assert . Equal ( "Text" , await textarea . GetAttributeAsync ( "id" ) ) ;
230+ Assert . Equal ( "Model value" , await textarea . InputValueAsync ( ) ) ;
231+
232+ var label = page . Locator ( "label" ) . First ;
233+ Assert . Equal ( "Text" , await label . GetAttributeAsync ( "for" ) ) ;
234+ Assert . Equal ( "ModelMetadata display name" , await label . InnerTextAsync ( ) ) ;
235+
236+ var hint = page . Locator ( ".govuk-hint" ) . First ;
237+ Assert . Equal ( "ModelMetadata description" , await hint . InnerTextAsync ( ) ) ;
238+
239+ var errorMessage = page . Locator ( ".govuk-error-message" ) . First ;
240+ Assert . Equal ( "Error: Model error message" , await errorMessage . TextContentAsync ( ) ) ;
241+ }
242+
243+ [ Fact ]
244+ public async Task CharacterCountOverridden_RendersCorrectly ( )
245+ {
246+ var page = await fixture . Browser ! . NewPageAsync ( ) ;
247+ await page . GotoAsync ( $ "{ ServerFixture . BaseUrl } /ModelBindingTests/CharacterCountOverridden") ;
248+
249+ var textarea = page . Locator ( "textarea" ) . First ;
250+ Assert . Equal ( "OverriddenName" , await textarea . GetAttributeAsync ( "name" ) ) ;
251+ Assert . Equal ( "OverriddenId" , await textarea . GetAttributeAsync ( "id" ) ) ;
252+ Assert . Equal ( "Overridden value" , await textarea . InputValueAsync ( ) ) ;
253+
254+ var label = page . Locator ( "label" ) . First ;
255+ Assert . Equal ( "OverriddenId" , await label . GetAttributeAsync ( "for" ) ) ;
256+ Assert . Equal ( "Overridden label" , await label . InnerTextAsync ( ) ) ;
257+
258+ var hint = page . Locator ( ".govuk-hint" ) . First ;
259+ Assert . Equal ( "Overridden hint" , await hint . InnerTextAsync ( ) ) ;
260+
261+ var errorMessage = page . Locator ( ".govuk-error-message" ) . First ;
262+ Assert . Equal ( "Error: Overridden error message" , await errorMessage . TextContentAsync ( ) ) ;
263+ }
220264}
221265
222266[ Route ( "/[controller]/[action]" ) ]
@@ -284,6 +328,20 @@ public IActionResult TextareaOverridden()
284328 ModelState . AddModelError ( nameof ( TextareaTestsModel . Text ) , "Model error message" ) ;
285329 return View ( new TextareaTestsModel { Text = "Model value" } ) ;
286330 }
331+
332+ [ HttpGet ]
333+ public IActionResult CharacterCount ( )
334+ {
335+ ModelState . AddModelError ( nameof ( CharacterCountTestsModel . Text ) , "Model error message" ) ;
336+ return View ( new CharacterCountTestsModel { Text = "Model value" } ) ;
337+ }
338+
339+ [ HttpGet ]
340+ public IActionResult CharacterCountOverridden ( )
341+ {
342+ ModelState . AddModelError ( nameof ( CharacterCountTestsModel . Text ) , "Model error message" ) ;
343+ return View ( new CharacterCountTestsModel { Text = "Model value" } ) ;
344+ }
287345}
288346
289347public record TextInputTestsModel
@@ -309,3 +367,9 @@ public record TextareaTestsModel
309367 [ Display ( Name = "ModelMetadata display name" , Description = "ModelMetadata description" ) ]
310368 public string ? Text { get ; set ; }
311369}
370+
371+ public record CharacterCountTestsModel
372+ {
373+ [ Display ( Name = "ModelMetadata display name" , Description = "ModelMetadata description" ) ]
374+ public string ? Text { get ; set ; }
375+ }
0 commit comments