---
id: TST-PFM-DJE-164
title: Job API and outcome inspection
kind: api-lifecycle
product_area: platform
module: data-job-engine
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repository: services-platform
files:
  - modules/data-jobs/tests/e2e/data-jobs.e2e.spec.js
implements:
  - ATS-PFM-DJE-011-01
  - ATS-PFM-DJE-011-02
  - ATS-PFM-DJE-011-09
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 5
isolation: >-
  Suite-owned fixture records, job identifiers and workspace contexts; teardown removes the fixture
  data.
evidence:
  - 'services-platform:modules/data-jobs/tests/e2e/data-jobs.e2e.spec.js'
assertion_inventory:
  - the data-job uploads API (end to end)
  - a caller who may upload
  - opens the session and answers what the client uploads by
  - answers nothing about where the file is going
  - presigns the parts it asks for
  - 'answers the session and the parts S3 holds, which is how a client resumes'
  - 'never answers the key or the S3 upload id of a session, which are the server\u2019s'
  - lists the tenant\u2019s sessions
  - completes the session once every part is there
  - abandons a session the client gives up on
  - 'refuses a declaration no data job can read, naming the property the caller sent'
  - refuses a body carrying a property the request does not have
  - answers a session id the tenant has none under as absent
  - a caller who may not upload
  - refuses opening a session to a console user without the key
  - 'wrote no session for the refused caller, which is what the refusal has to mean'
  - refuses presigning the parts of an existing session
  - >-
    refuses reading a session, because which files a tenant loaded is not a read-only user\u2019s
    business
  - refuses completing a session
  - refuses aborting a session
  - 'left the session open after every refusal, so none of them half-happened'
  - refuses listing the tenant\u2019s sessions
  - refuses an anonymous caller on every one of the six operations
  - a caller of another customer
  - refuses an administrator of another customer the tenant\u2019s uploads
  - refuses that administrator the session by its own id
  - >-
    answers that administrator the same way for a session id nobody holds, so the refusal discloses
    nothing
  - refuses that administrator a new session in this tenant
  - 'wrote nothing for that administrator, leaving the one session the suite opened'
registration_note: Registration describes existing source; the suite is not executed by this documentation job.
---

# Job API and outcome inspection

## Verification Boundary

The suite checks requests through the local production dispatcher and signed caller evaluation. The structured assertion inventory records the checks present at the pinned revision.

## What This Suite Proves

The existing checks exercise job api and outcome inspection. The specification bindings identify the narrower outcomes supported by those assertions.

## What It Does Not Prove

Local execution does not establish deployed queue, storage or service behavior. Independent test cases do not establish a complete cross-feature process.

## Real Dependencies and Test Doubles

The owning service exercises production persistence and domain behavior against real Postgres. The fixture supplies caller contexts; queue delivery, storage and external calls are doubled where the file installs a test port.

## Must Not Be Doubled

The database effects, security context and production operation under examination remain real. Their outcomes cannot be replaced with canned success responses.
