Skip to content

File Requests - QA Test Plan

The File Requests app enables users to create shareable upload links where recipients can submit files. The requester can set constraints (file types, size limits, deadlines), review submissions, approve/reject them, and import approved files into the Documents app. Routes are under /business/apps/filerequests/.

  • active — Accepting submissions
  • closed — Manually closed by requester
  • expired — Past the expiry date
  • pending — Awaiting review
  • approved — Accepted by requester
  • rejected — Declined by requester (with optional reason)

IDDescriptionPreconditionsStepsExpected ResultPriority
FR-001List page loadsUser is logged inNavigate to /business/apps/filerequestsPage shows header with count badge, “New Request” button, filter controls, and request listP0
FR-002Request cards display correctlyRequests existView listEach card shows subject, status badge, created date, expires date (if set), and max documents (if set)P0
FR-003Status badges render correctlyRequests with various statusesView listActive = default, Closed = secondary, Expired = destructiveP1
FR-004Empty state when no requestsNo requests existView list”No file requests found” message shownP1
FR-005Request card links to detailRequests existClick on a request cardNavigates to /business/apps/filerequests/{id}P0
FR-006Count badge shows totalRequests existView headerBadge shows correct total countP1

IDDescriptionPreconditionsStepsExpected ResultPriority
FR-010Search by keywordRequests existType search term in search box, press EnterURL updates with ?search=term; list filters by subject matching searchP0
FR-011Filter by status - ActiveActive and closed requests existSelect “Active” from status dropdownURL updates with ?status=active; only active requests shownP0
FR-012Filter by status - ClosedClosed requests existSelect “Closed” from status dropdownOnly closed requests shownP0
FR-013Filter by status - ExpiredExpired requests existSelect “Expired” from status dropdownOnly expired requests shownP0
FR-014Clear status filterStatus filter is appliedSelect “All Statuses”Status param removed from URL; all requests shownP1
FR-015Combined search and status filterVarious requests existEnter search term and select statusBoth params in URL; list filtered by both criteriaP1
FR-016Pagination resets on filter changeMultiple pages of requestsApply a new filterPage param is removed from URLP2

IDDescriptionPreconditionsStepsExpected ResultPriority
FR-020Create page loadsUser is logged inNavigate to /business/apps/filerequests/newForm shows Subject, Description, Password, Max Documents, Max File Size, Allowed Extensions, and Expiry Date fieldsP0
FR-021Create request with all fieldsUser is logged in1. Enter subject “Tax Documents 2025” 2. Enter description 3. Set password 4. Set max docs to 5 5. Set max size to 10 MB 6. Enter “pdf, docx” for extensions 7. Set expiry date 8. SubmitRequest created; user redirected to /business/apps/filerequestsP0
FR-022Subject is requiredUser is logged inLeave subject empty, submitValidation error on subject fieldP0
FR-023Create with only required fieldsUser is logged inEnter subject only, submitRequest created successfully with defaults (unlimited docs, 25MB size, all types, no expiry)P0
FR-024Allowed extensions parsingUser is logged inEnter “pdf, docx, jpg” in extensions fieldExtensions parsed as array ["pdf", "docx", "jpg"]; leading dots strippedP1
FR-025Allowed extensions with dotsUser is logged inEnter “.pdf, .docx” in extensions fieldLeading dots stripped; stored as ["pdf", "docx"]P1
FR-026Password protection is optionalUser is logged inLeave password empty, submitRequest created without password protectionP1
FR-027Expiry date is optionalUser is logged inLeave expiry date empty, submitRequest created without expiry dateP1
FR-028Cancel returns to listUser is on create pageClick “Cancel”Navigates to /business/apps/filerequestsP2
FR-029Submit shows loading stateUser submits formObserve submit buttonSpinner shown; button disabled during requestP1
FR-030Server error shows toastServer returns errorSubmit (simulated failure)Error toast with server messageP1
FR-031Unauthenticated user redirectedUser not logged inNavigate to create pageRedirected to /auth/loginP0

IDDescriptionPreconditionsStepsExpected ResultPriority
FR-040Detail page loadsRequest exists, user authenticatedNavigate to /business/apps/filerequests/{id}Page shows subject, status badge, description, shareable upload link, constraints (max docs, max size, allowed extensions, password protected), dates, and submissions tableP0
FR-041Shareable link displaysRequest loadedView upload link sectionPublic URL displayed as {origin}/file-request/{id} with Copy buttonP0
FR-042Copy shareable linkDetail page loadedClick “Copy” buttonLink copied to clipboard; toast “Link copied to clipboard”P1
FR-043Constraints display correctlyRequest has constraints setView info cardMax Documents, Max File Size (MB), Allowed Extensions (comma-separated or “All types”), and Password Protected (Yes/No) shownP0
FR-044Close active requestRequest status is activeClick “Close Request”Request status changes to closed; toast successP0
FR-045Close button hidden for non-activeRequest is closed or expiredView header actions”Close Request” button is not renderedP1
FR-046Delete request with confirmationRequest existsClick “Delete” button, confirm browser dialogRequest deleted; user redirected to /business/apps/filerequestsP0
FR-047Cancel deleteDelete confirmation shownClick cancel in confirm dialogRequest remains; user stays on pageP2

IDDescriptionPreconditionsStepsExpected ResultPriority
FR-050Submissions table displaysSubmissions existView detail pageTable shows File name, Submitter (name + email), Status badge, Date, Size (formatted), and action buttonsP0
FR-051Approve pending submissionSubmission status is pendingClick approve (check) buttonSubmission status changes to approved; toast “Submission approved”P0
FR-052Reject pending submissionSubmission status is pendingClick reject (X) buttonSubmission status changes to rejected; toast “Submission rejected”P0
FR-053Reject with reasonSubmission status is pendingEnter rejection reason, click rejectSubmission rejected with reason displayed beneath status badgeP1
FR-054Approve/reject buttons hidden for non-pendingSubmission is approved or rejectedView actions columnNo approve/reject buttons shownP1
FR-055File size formattingVarious file sizesView size columnBytes shown as B/KB/MB with one decimal (e.g., “2.5 MB”, “512 KB”)P2
FR-056Empty submissions stateNo submissions yetView submissions section”No submissions yet. Share the link to start receiving files.” messageP1

IDDescriptionPreconditionsStepsExpected ResultPriority
FR-060Import button shown for approved, non-importedSubmission is approved and not yet importedView actionsImport (file-import) icon button visibleP0
FR-061Import submission to documentsApproved submission, not importedClick import buttonSubmission imported to Documents app; toast “Imported to documents”; “Imported” badge appearsP0
FR-062Imported badge shownSubmission has imported_document_idView actions”Imported” outline badge shown instead of import buttonP1
FR-063Import button hidden for non-approvedSubmission is pending or rejectedView actionsNo import button renderedP1

IDDescriptionPreconditionsStepsExpected ResultPriority
FR-070Unauthenticated user gets 401 on detailNot logged inNavigate to request detail401 “Unauthorized” errorP0
FR-071Non-existent request returns 404Invalid request IDNavigate to /business/apps/filerequests/nonexistent404 “File request not found” errorP1
FR-072Unauthenticated user gets empty listNot logged inNavigate to list pageEmpty requests array returned; no server errorP1
FR-073Action failures return 500 with messageServer error on approve/reject/importSubmit action (simulated failure)500 error with descriptive messageP1