---
id: TST-PFM-MTD-082
title: issue upload
kind: integration
product_area: platform
module: metadata
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
repository: services-platform
files:
  - modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js
implements:
  - ATS-PFM-MTD-007-02
  - ATS-PFM-MTD-007-03
  - ATS-PFM-MTD-007-07
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 5
isolation: >-
  Prepared integration database and the suite fixture records; fixture teardown restores or removes its own
  rows.
evidence:
  - 'services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js'
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#answers
    the upload id, the URL, PUT, the headers, the staging reference and the expiry
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#builds
    the staging reference from this workspace, the contacts folder and the upload id
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#expires
    15 minutes after it was issued
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#asks
    the signer for exactly the declared type and size, the caller as uploader, and a 15-minute lifetime
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#answers
    the headers the PUT must carry, the uploader and upload id among them
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#records
    one row for the caller, the object, the field and the key signed
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#records
    the instant the URL stops working
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#appends
    one file_upload audit event naming who was given the upload and for what
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#records
    the accepted issue the refusals are measured against
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#refuses
    a picture over 10 MiB, naming size, and signs and records nothing
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#refuses
    a document over 25 MiB, naming size, and signs and records nothing
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#refuses
    an SVG picture, naming content_type, and signs and records nothing
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#refuses
    a PDF in a picture field, naming content_type, and signs and records nothing
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#refuses
    an unknown kind, naming kind, and signs and records nothing
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#refuses
    a path for a file name, naming file_name, and signs and records nothing
  - >-
    services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#issues
    in the execution’s tenant only, whatever else exists
fixture_imports:
  - '@rhythmsoftware/macroservice-errors/errors'
  - '@rhythmsoftware/macroservice-testing/refusals'
  - '@rhythmsoftware/macroservice-time/clock'
  - '@rhythmsoftware/macroservice-testing/stage'
  - ../../support
  - ../../../../services/uploads/issue-upload
test_doubles: []
limitations: []
unmatched_specification: null
binding_assertions:
  - scenario: ATS-PFM-MTD-007-02
    provenance: test
    source:
      - >-
        services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#issues
        in the execution’s tenant only, whatever else exists
    note: >-
      These references identify the assertions this suite contributes; bindings to additional suites remain
      part of the scenario’s proof.
  - scenario: ATS-PFM-MTD-007-03
    provenance: test
    source:
      - >-
        services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#refuses
        a document over 25 MiB, naming size, and signs and records nothing
    note: >-
      These references identify the assertions this suite contributes; bindings to additional suites remain
      part of the scenario’s proof.
  - scenario: ATS-PFM-MTD-007-07
    provenance: test
    source:
      - >-
        services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#records
        one row for the caller, the object, the field and the key signed
      - >-
        services-platform:modules/files/tests/integration/services/uploads/issue-upload.integration.spec.js#appends
        one file_upload audit event naming who was given the upload and for what
    note: >-
      These references identify the assertions this suite contributes; bindings to additional suites remain
      part of the scenario’s proof.
---

# Issue upload

## Verification Boundary

This integration suite checks upload issuance within the local test harness. The registered file and pinned revision define its boundary.

## What This Suite Proves

The bindings identify the detailed or feature scenarios whose outcomes have assertions in this suite. Original case references remain attached to the detailed scenarios so a reviewer can inspect the exact assertion. Assertions are evidence of implemented checks; no execution result is claimed.

## What It Does Not Prove

The register does not establish a current passing run or full specification conformance. Behavior outside the suite’s fixtures and assertions remains unverified.

## Real Dependencies and Test Doubles

The fixture uses PostgreSQL and the imported persistence or API code. The fixture imports identify the setup seams; this register makes no broader claim that dependencies are undoubled.

## Must Not Be Doubled

The operation under examination and its asserted stored outcomes must remain real within the declared harness. A fixture cannot replace the write, refusal or transactional effect that the bound scenario checks.
