The structured coverage rows link required rules to their scenarios. A covered category has a defined check; executable coverage and successful execution require separate evidence. The category map keeps incomplete lifecycle matrices and other missing checks visible as findings.
Only a completed workspace upload supplies file work. Package registration checks recorded upload integrity. Reset keeps input available while deletion removes it. The interaction scenarios use the related capabilities' rule references and identify the shared fixture and observable outcome.
Coverage
Rulegap: FND-PFM-DJE-071
Transitiongap: FND-PFM-DJE-071
Validationcovered
Permissioncovered
Edgegap: FND-PFM-DJE-071
Failurecovered
Boundarycovered
Concurrencygap: FND-PFM-DJE-071
Invariantcovered
Interactioncovered
Test Scenarios
12 scenarios proving CAP-PFM-DJE-011; 9 bound to an existing test.
01Upload operations require their shared permissionpermissionapinegativetest
Prepare a session and a caller lacking upload access.
Steps
[
{
"do": "Attempt creation, signing, read, completion and abort.",
"expect": "Each request is refused and the existing session remains open.",
"provenance": "test",
"source": "services-platform:modules/data-jobs/tests/e2e/data-jobs.e2e.spec.js#refuses opening a session to a console user without the key"
}
]
Expected
Each request is refused and the existing session remains open.
[
{
"do": "Submit invalid name, type, size, digest and extra-property declarations.",
"expect": "The response identifies the invalid property without creating an upload.",
"provenance": "test",
"source": "services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#refuses a declaration before it creates anything in S3, so a refused request leaves no upload behind"
}
]
Expected
The response identifies the invalid property without creating an upload.
[
{
"do": "Calculate their part sizes.",
"expect": "Sizes round to whole MiB, retain the 16 MiB floor and require at most 9,000 parts.",
"provenance": "test",
"source": "services-platform:modules/data-jobs/tests/unit/part-sizing.spec.ts#holds the 16 MiB floor for every file the floor can divide into the allowed number of parts"
}
]
Expected
Sizes round to whole MiB, retain the 16 MiB floor and require at most 9,000 parts.
[
{
"do": "Request valid, out-of-range, repeated and excessive part lists, then use a closed session.",
"expect": "Valid addresses expire after one hour and invalid requests are refused.",
"provenance": "test",
"source": "services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#signs each URL for one hour, which is how long a client has to use it"
}
]
Expected
Valid addresses expire after one hour and invalid requests are refused.
Prepare a session whose assembled object is short.
Steps
[
{
"do": "Complete it and separately test missing parts and missing receipts.",
"expect": "Wrong size aborts the session; incomplete part declarations are refused.",
"provenance": "test",
"source": "services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#refuses a completion whose object is not the size that was declared"
}
]
Expected
Wrong size aborts the session; incomplete part declarations are refused.
Prepare matching, mismatching and oversized objects with declared digests.
Steps
[
{
"do": "Complete each upload.",
"expect": "Matching input has a verified digest; mismatch is refused and aborted; oversized input without measurement remains unverified.",
"provenance": "test",
"source": "services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#records the digest it measured over the stored object when it is the one that was declared"
}
]
Expected
Matching input has a verified digest; mismatch is refused and aborted; oversized input without measurement remains unverified.
Prepare completed, aborted and storage-abandoned sessions.
Steps
[
{
"do": "Repeat completion, abort a completion, repeat abort and inspect abandoned input.",
"expect": "Invalid transitions are refused, repeated abort returns its settled result and abandoned input expires.",
"provenance": "test",
"source": "services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#refuses a second completion of a session that is already completed"
}
]
Expected
Invalid transitions are refused, repeated abort returns its settled result and abandoned input expires.
Prepare completion input naming an unavailable part.
Steps
[
{
"do": "Request completion.",
"expect": "A descriptive 400 leaves the session open.",
"provenance": "test",
"source": "services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#refuses in words a completion naming a part S3 does not hold, rather than failing as a server fault"
}
]
[
{
"do": "Inspect metadata and attempt cross-workspace reads, completion and abort.",
"expect": "Metadata omits internal storage fields; cross-workspace input is not found without a storage call.",
"provenance": "test",
"source": "services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#answers nothing about where the file is going: no bucket, no key, no S3 upload id"
}
]
Expected
Metadata omits internal storage fields; cross-workspace input is not found without a storage call.
Create open, completed and foreign-workspace upload sessions.
Steps
[
{
"do": "Submit equivalent file jobs against each session and process the accepted job.",
"expect": "Only the completed local session supplies input; unavailable sessions create no processing work and foreign input is concealed.",
"provenance": "proposed",
"source": "services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#refuses to abort a completed session, whose object a job may already be reading; services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#refuses to complete another tenant’s session, and makes no S3 call for it; services-platform:modules/data-jobs/services/uploads/upload-sessions.ts:presignUploadParts; services-crm:modules/data-jobs/tests/e2e/bulk-data-jobs.e2e.spec.js#refuses an upload id of no upload at all in the same words, so neither answer tells a caller whose it is"
}
]
Expected
Only the completed local session supplies input; unavailable sessions create no processing work and foreign input is concealed.
Data
Create open, completed and foreign-workspace upload sessions.
Complete manifest and dataset uploads with known sizes and a checkable digest.
Steps
[
{
"do": "Register a package with a mismatched dataset digest, then one matching the saved upload evidence.",
"expect": "The mismatch leaves no run; the matching package registers before any dataset job starts.",
"provenance": "proposed",
"source": "services-platform:modules/data-jobs/services/uploads/upload-sessions.ts:requireCompletedParts; services-platform:modules/data-jobs/tests/integration/services/uploads/upload-sessions.integration.spec.js#refuses a completion whose object is not the file the declared SHA-256 describes, naming sha256; services-platform:modules/data-jobs/services/uploads/upload-sessions.ts:verifiedDigestOf; services-platform:modules/data-jobs/services/runs/register-run.ts:registerRun"
}
]
Expected
The mismatch leaves no run; the matching package registers before any dataset job starts.
Data
Complete manifest and dataset uploads with known sizes and a checkable digest.
Prepare completed uploads and loaded records in a loading workspace.
Steps
[
{
"do": "Reset the workspace, inspect retained uploads, reload from them, then invoke workspace deletion on a separate disposable fixture.",
"expect": "Reset retains input for another load; deletion removes its upload records and stored versions.",
"provenance": "proposed",
"source": "services-platform:docs/data-jobs/uploads.md#Deletion; services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#removes everything the load wrote: no contact, organization, imported type or crosswalk row is left; services-crm:modules/data-jobs/tests/integration/services/jobs/initial-import-guarantees.integration.spec.js#reloads the same records as the load before the reset, numbers included"
}
]
Expected
Reset retains input for another load; deletion removes its upload records and stored versions.
Data
Prepare completed uploads and loaded records in a loading workspace.