@@ -261,6 +261,48 @@ public async Task CharacterCountOverridden_RendersCorrectly()
261261 var errorMessage = page . Locator ( ".govuk-error-message" ) . First ;
262262 Assert . Equal ( "Error: Overridden error message" , await errorMessage . TextContentAsync ( ) ) ;
263263 }
264+
265+ [ Fact ]
266+ public async Task FileUpload_RendersCorrectly ( )
267+ {
268+ var page = await fixture . Browser ! . NewPageAsync ( ) ;
269+ await page . GotoAsync ( $ "{ ServerFixture . BaseUrl } /ModelBindingTests/FileUpload") ;
270+
271+ var input = page . Locator ( "input[type='file']" ) . First ;
272+ Assert . Equal ( "File" , await input . GetAttributeAsync ( "name" ) ) ;
273+ Assert . Equal ( "File" , await input . GetAttributeAsync ( "id" ) ) ;
274+
275+ var label = page . Locator ( "label" ) . First ;
276+ Assert . Equal ( "File" , await label . GetAttributeAsync ( "for" ) ) ;
277+ Assert . Equal ( "ModelMetadata display name" , await label . InnerTextAsync ( ) ) ;
278+
279+ var hint = page . Locator ( ".govuk-hint" ) . First ;
280+ Assert . Equal ( "ModelMetadata description" , await hint . InnerTextAsync ( ) ) ;
281+
282+ var errorMessage = page . Locator ( ".govuk-error-message" ) . First ;
283+ Assert . Equal ( "Error: Model error message" , await errorMessage . TextContentAsync ( ) ) ;
284+ }
285+
286+ [ Fact ]
287+ public async Task FileUploadOverridden_RendersCorrectly ( )
288+ {
289+ var page = await fixture . Browser ! . NewPageAsync ( ) ;
290+ await page . GotoAsync ( $ "{ ServerFixture . BaseUrl } /ModelBindingTests/FileUploadOverridden") ;
291+
292+ var input = page . Locator ( "input[type='file']" ) . First ;
293+ Assert . Equal ( "OverriddenName" , await input . GetAttributeAsync ( "name" ) ) ;
294+ Assert . Equal ( "OverriddenId" , await input . GetAttributeAsync ( "id" ) ) ;
295+
296+ var label = page . Locator ( "label" ) . First ;
297+ Assert . Equal ( "OverriddenId" , await label . GetAttributeAsync ( "for" ) ) ;
298+ Assert . Equal ( "Overridden label" , await label . InnerTextAsync ( ) ) ;
299+
300+ var hint = page . Locator ( ".govuk-hint" ) . First ;
301+ Assert . Equal ( "Overridden hint" , await hint . InnerTextAsync ( ) ) ;
302+
303+ var errorMessage = page . Locator ( ".govuk-error-message" ) . First ;
304+ Assert . Equal ( "Error: Overridden error message" , await errorMessage . TextContentAsync ( ) ) ;
305+ }
264306}
265307
266308[ Route ( "/[controller]/[action]" ) ]
@@ -342,6 +384,20 @@ public IActionResult CharacterCountOverridden()
342384 ModelState . AddModelError ( nameof ( CharacterCountTestsModel . Text ) , "Model error message" ) ;
343385 return View ( new CharacterCountTestsModel { Text = "Model value" } ) ;
344386 }
387+
388+ [ HttpGet ]
389+ public IActionResult FileUpload ( )
390+ {
391+ ModelState . AddModelError ( nameof ( FileUploadTestsModel . File ) , "Model error message" ) ;
392+ return View ( new FileUploadTestsModel ( ) ) ;
393+ }
394+
395+ [ HttpGet ]
396+ public IActionResult FileUploadOverridden ( )
397+ {
398+ ModelState . AddModelError ( nameof ( FileUploadTestsModel . File ) , "Model error message" ) ;
399+ return View ( new FileUploadTestsModel ( ) ) ;
400+ }
345401}
346402
347403public record TextInputTestsModel
@@ -373,3 +429,9 @@ public record CharacterCountTestsModel
373429 [ Display ( Name = "ModelMetadata display name" , Description = "ModelMetadata description" ) ]
374430 public string ? Text { get ; set ; }
375431}
432+
433+ public record FileUploadTestsModel
434+ {
435+ [ Display ( Name = "ModelMetadata display name" , Description = "ModelMetadata description" ) ]
436+ public Microsoft . AspNetCore . Http . IFormFile ? File { get ; set ; }
437+ }
0 commit comments