Skip to content

Commit 923ed6f

Browse files
Copilotgunndabad
andauthored
Add file upload model binding integration tests (#444)
* Initial plan * Add file upload model binding integration tests Co-authored-by: gunndabad <2041280+gunndabad@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: gunndabad <2041280+gunndabad@users.noreply.github.com>
1 parent be11f9f commit 923ed6f

File tree

3 files changed

+72
-0
lines changed

3 files changed

+72
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.FileUploadTestsModel
2+
3+
<govuk-file-upload for="File" />
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.FileUploadTestsModel
2+
3+
<govuk-file-upload for="File" name="OverriddenName" id="OverriddenId">
4+
<govuk-file-upload-label>Overridden label</govuk-file-upload-label>
5+
<govuk-file-upload-hint>Overridden hint</govuk-file-upload-hint>
6+
<govuk-file-upload-error-message>Overridden error message</govuk-file-upload-error-message>
7+
</govuk-file-upload>

tests/GovUk.Frontend.AspNetCore.IntegrationTests/TagHelperModelBindingTests/Tests.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

347403
public 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

Comments
 (0)