From c1c4d531f18548084765ad8d593b4f3ac1f7366f Mon Sep 17 00:00:00 2001 From: Alex Saunders Date: Wed, 24 Jan 2024 16:51:15 +0000 Subject: [PATCH] show relevant error when not selecting a file to upload --- internal/page/donor/upload_evidence.go | 9 ++++++++- internal/page/donor/upload_evidence_test.go | 14 ++++++++++++-- lang/cy.json | 1 + lang/en.json | 1 + 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/internal/page/donor/upload_evidence.go b/internal/page/donor/upload_evidence.go index ba6760f769..80ab786081 100644 --- a/internal/page/donor/upload_evidence.go +++ b/internal/page/donor/upload_evidence.go @@ -30,6 +30,7 @@ const ( errUnexpectedContentType = uploadError(2) errFileTooBig = uploadError(3) errTooManyFiles = uploadError(4) + errFileNotSelected = uploadError(5) ) func acceptedMimeTypes() []string { @@ -245,7 +246,11 @@ func readUploadEvidenceForm(r *http.Request) *uploadEvidenceForm { filename := html.EscapeString(part.FileName()) if len(sniff) == 0 { - files = append(files, File{Error: errEmptyFile, Filename: filename}) + if filename == "" { + files = append(files, File{Error: errFileNotSelected}) + } else { + files = append(files, File{Error: errEmptyFile, Filename: filename}) + } continue } @@ -320,6 +325,8 @@ func (f *uploadEvidenceForm) Validate() validation.List { errors.Add("upload", validation.FileError{Label: "errorFileTooBig", Filename: file.Filename}) case errEmptyFile: errors.Add("upload", validation.FileError{Label: "errorFileEmpty", Filename: file.Filename}) + case errFileNotSelected: + errors.Add("upload", validation.FileError{Label: "errorFileNotSelected"}) default: errors.Add("upload", validation.FileError{Label: "errorGenericUploadProblemFile", Filename: file.Filename}) } diff --git a/internal/page/donor/upload_evidence_test.go b/internal/page/donor/upload_evidence_test.go index 3e11b7de52..175fca733e 100644 --- a/internal/page/donor/upload_evidence_test.go +++ b/internal/page/donor/upload_evidence_test.go @@ -738,26 +738,36 @@ func TestPostUploadEvidenceWhenBadUpload(t *testing.T) { fieldName string fieldContent io.Reader expectedError validation.FormattableError + fileName string }{ - "missing": { + "file with no data": { fieldName: "upload", fieldContent: strings.NewReader(""), expectedError: validation.FileError{Label: "errorFileEmpty", Filename: "dummy.pdf"}, + fileName: "dummy.pdf", }, "not pdf": { fieldName: "upload", fieldContent: strings.NewReader("I am just text"), expectedError: validation.FileError{Label: "errorFileIncorrectType", Filename: "dummy.pdf"}, + fileName: "dummy.pdf", }, "wrong field": { fieldName: "file", fieldContent: bytes.NewReader(dummyData), expectedError: validation.CustomError{Label: "errorGenericUploadProblem"}, + fileName: "dummy.pdf", }, "over size pdf": { fieldName: "upload", fieldContent: io.MultiReader(bytes.NewReader(dummyData), randomReader), expectedError: validation.FileError{Label: "errorFileTooBig", Filename: "dummy.pdf"}, + fileName: "dummy.pdf", + }, + "missing": { + fieldName: "upload", + fieldContent: strings.NewReader(""), + expectedError: validation.FileError{Label: "errorFileNotSelected"}, }, } @@ -772,7 +782,7 @@ func TestPostUploadEvidenceWhenBadUpload(t *testing.T) { part, _ = writer.CreateFormField("action") io.WriteString(part, "upload") - part, _ = writer.CreateFormFile(tc.fieldName, "dummy.pdf") + part, _ = writer.CreateFormFile(tc.fieldName, tc.fileName) io.Copy(part, tc.fieldContent) writer.Close() diff --git a/lang/cy.json b/lang/cy.json index 41db87be7d..9aa39b12dd 100644 --- a/lang/cy.json +++ b/lang/cy.json @@ -795,6 +795,7 @@ "errorFileTooBig": "{{.Filename}}: Y ffeil yn rhy fawr", "errorFileIncorrectType": "{{.Filename}}: Ni dderbynnir ffeiliau o’r math hwn", "errorFileEmpty": "{{.Filename}}: Mae’r ffeil yn wag", + "errorFileNotSelected": "Welsh", "errorGenericUploadProblemFile": "{{.Filename}}: Gwall ffeil cyffredinol", "errorFilesInfected": { "one": "Ni ellir uwchlwytho {{.Filenames}} am ei bod yn cynnwys feirws", diff --git a/lang/en.json b/lang/en.json index d341ef68aa..2e9cff98fb 100644 --- a/lang/en.json +++ b/lang/en.json @@ -745,6 +745,7 @@ "errorFileTooBig": "{{.Filename}}: File size too big", "errorFileIncorrectType": "{{.Filename}}: File is not a supported file type", "errorFileEmpty": "{{.Filename}}: File is empty", + "errorFileNotSelected": "No files have been chosen – select ‘Choose files’ to upload your evidence", "errorGenericUploadProblemFile": "{{.Filename}}: Generic file error", "errorFilesInfected": { "one": "{{.Filenames}} cannot be uploaded as it contains a virus",