pelagia-portal/App/tests/integration
Hardik 2afdeec6ad
Some checks failed
PR checks / checks (pull_request) Failing after 2m14s
PR checks / integration (pull_request) Failing after 2m13s
fix(po): upload attachments server-side so they persist & show
PO/receipt attachments were uploaded via a browser presigned PUT straight
to R2 (POST /api/files/sign -> PUT uploadUrl -> linkDocument). That direct
browser->R2 PUT only succeeds when the bucket carries a CORS policy
allowing PUT from the portal origin; in production that policy was missing,
so the browser silently blocked the PUT, linkDocument never ran, and no
PODocument row was created -- "documents uploaded but not visible anywhere"
(0 PODocument rows in prod/staging).

Route uploads through a server action (uploadPoDocuments) that writes the
file with uploadBuffer and creates the PODocument row atomically -- the
same pattern the crewing module already uses for CV/crew-document uploads,
and within the 10mb serverActions.bodySizeLimit. This removes the R2-CORS
dependency and guarantees a created row always has its stored file.

Removes the now-dead presigned path (lib/upload-files.ts,
app/actions/link-document.ts, api/files/sign/route.ts).

Adds an integration test that drives the action against a real DB and
asserts the PODocument row is created and surfaced by the exact include
the PO detail page renders from (i.e. the attachment is visible).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 00:28:16 +05:30
..
admin-ranks.test.ts feat(crewing): foundations — SITE_STAFF role, ranks reference data + admin (flagged) 2026-06-22 13:26:04 +05:30
applications.test.ts feat(crewing): enforce recruitment vetting gates C5 + partial C3 2026-06-22 23:40:08 +05:30
appraisal.test.ts feat(crewing): Phase 5b — appraisal (flagged) 2026-06-22 22:09:32 +05:30
approval-actions.test.ts feat(po): register line items in the product catalogue on approval 2026-06-24 04:59:47 +05:30
approved-this-month.test.ts fix(dashboard): count all POs approved this month, not just current MGR_APPROVED 2026-06-19 12:07:53 +05:30
cancel-supersede.test.ts feat(po): cancel POs (manager/superuser) + optional supersede link (#53) 2026-06-21 12:20:54 +05:30
candidates.test.ts fix(crewing): make rank-held universal, ex-hand an admin-only flag 2026-06-23 21:33:50 +05:30
company-branding.test.ts feat(po): per-company logo, stamp & brand bar on exported POs 2026-06-21 01:17:23 +05:30
company-crud.test.ts test(companies): cover createCompany/updateCompany actions 2026-06-21 02:05:32 +05:30
confirm-receipt.test.ts test(integration): repair stale integration suite (wip: 97/108) 2026-06-21 02:34:07 +05:30
create-po.test.ts test(integration): repair stale integration suite (wip: 97/108) 2026-06-21 02:34:07 +05:30
crew-pii-page.test.ts fix(crewing): mask Aadhaar/PAN document numbers server-side 2026-06-22 23:29:11 +05:30
crew-records.test.ts refactor(crewing): correct audit action types + atomic auto-raise backfills 2026-06-22 23:46:23 +05:30
crewing-admin.test.ts feat(crewing): admin crew management — direct placement, CRUD, strength config 2026-06-22 21:23:31 +05:30
crewing-followups.test.ts feat(crewing): resolve self-contained deferred follow-ups (flagged) 2026-06-22 22:28:23 +05:30
crewing-gates.test.ts refactor(crewing): correct audit action types + atomic auto-raise backfills 2026-06-22 23:46:23 +05:30
delivery-locations.test.ts feat(po): admin-managed delivery locations + Place of Delivery dropdown (#19) 2026-06-24 02:08:59 +05:30
discard-po.test.ts test(integration): repair stale integration suite (wip: 97/108) 2026-06-21 02:34:07 +05:30
email-vendor.test.ts feat(pdf): cache the PO PDF per vendor email, refresh only the link timer 2026-06-24 15:01:25 +05:30
epfo.test.ts test(crewing): cover EPFO stub contract + /api/epfo permission gate 2026-06-22 23:56:14 +05:30
helpers.ts test(integration): green the last 3 behavioural-drift tests (108/108) 2026-06-21 02:39:41 +05:30
history-account-filter.test.ts feat(reports): drill from cost centre / accounting code into PO History (#126) 2026-06-26 01:03:17 +05:30
import-api.test.ts test(integration): repair stale integration suite (wip: 97/108) 2026-06-21 02:34:07 +05:30
leave-attendance.test.ts feat(crewing): clash detection by required strength (Option A) 2026-06-22 21:14:21 +05:30
leave-clash.test.ts test(crewing): lock in R2/R8/R11 gates + R6 clash overlap boundaries 2026-06-22 22:58:48 +05:30
manager-po-creation.test.ts test(integration): repair stale integration suite (wip: 97/108) 2026-06-21 02:34:07 +05:30
onboarding.test.ts fix(crewing): harden onboardCandidate (D1 guard, D3 metadata, atomic contract) 2026-06-22 23:32:30 +05:30
payment-actions.test.ts test(integration): green the last 3 behavioural-drift tests (108/108) 2026-06-21 02:39:41 +05:30
po-document-upload.test.ts fix(po): upload attachments server-side so they persist & show 2026-06-28 00:28:16 +05:30
products-search.test.ts test(integration): repair stale integration suite (wip: 97/108) 2026-06-21 02:34:07 +05:30
project-codes.test.ts refactor(po): admin-managed Project Codes instead of a static list 2026-06-26 02:52:03 +05:30
requisitions.test.ts feat(crewing): complete requisition list A3 (candidate count + filters) 2026-06-22 23:52:05 +05:30
signoff.test.ts feat(crewing): Phase 4c — sign-off & experience (flagged) 2026-06-22 21:34:29 +05:30
terms.test.ts feat(po): user-defined T&C categories + dynamic PO terms editor (#11) 2026-06-24 04:43:24 +05:30
vendor-approval.test.ts test(integration): green the last 3 behavioural-drift tests (108/108) 2026-06-21 02:39:41 +05:30
verification.test.ts feat(crewing): EPFO/UAN assisted verification (GstService pattern, flagged) 2026-06-22 22:43:24 +05:30