---
id: TST-PFM-NOT-028
title: communication request submissions table
kind: integration
product_area: platform
module: notifications
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
repository: services-platform
files:
  - >-
    modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js
implements:
  - ATS-PFM-NOT-017-01
  - ATS-PFM-NOT-017-02
  - ATS-PFM-NOT-017-03
  - ATS-PFM-NOT-017-04
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 records in the prepared integration workspaces; seeded workspace
  identities remain shared fixtures.
assertion_bindings:
  - scenario: ATS-PFM-NOT-017-01
    suite: TST-PFM-NOT-028
    assertions:
      - >-
        services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js#leaves
        no queue row behind when the caller’s transaction rolls back
      - >-
        services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js#keeps
        the queue row when the caller’s transaction commits
      - >-
        services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js#points
        the row at the request object, which was written before it
  - scenario: ATS-PFM-NOT-017-02
    suite: TST-PFM-NOT-028
    assertions:
      - >-
        services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js#inserts
        a queue row into its own tenant naming all ten pointer columns, which is
        the whole capability
      - >-
        services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js#cannot
        insert one into another tenant: the forced policy refuses it
      - >-
        services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js#cannot
        write the claim column, so a caller can never hide its own row from the
        dispatcher
      - >-
        services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js#cannot
        read back even the rows it wrote
      - >-
        services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js#cannot
        delete a row, which is the dispatcher’s statement
      - >-
        services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js#cannot
        read the messages table, which holds the rendered e-mail
  - scenario: ATS-PFM-NOT-017-03
    suite: TST-PFM-NOT-028
    assertions:
      - >-
        services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js#answers
        the derived id both times, so a retrying caller is never told an id that
        does not exist
  - scenario: ATS-PFM-NOT-017-04
    suite: TST-PFM-NOT-028
    assertions:
      - >-
        services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js#refuses
        a malformed submission before anything is written, naming the caller’s
        own defect
evidence:
  - >-
    services-platform:modules/communications/tests/integration/db/communication-request-submissions.table.integration.spec.js
  - The file and referenced assertion titles exist at the pinned commit.
dependency_evidence:
  - >-
    Real: PostgreSQL, the migration's grants, checks and policy, and the shared
    submission helper. Doubled: the object store
  - >-
    (the tier's in-memory double, so the helper's PUT reaches no network). Never
    doubled: the database, the grant, the policy,
---

# communication request submissions table

## Verification Boundary

This suite exercises the local services and prepared PostgreSQL database. API lifecycle cases use signed test contexts through the real route handler; they do not invoke the deployed gateway.

## What This Suite Proves

Its cases exercise commit a communication pointer with its business change; restrict callers to scoped pointer insertion; deduplicate ordinary request retries and recovery; validate before consuming the submission key.

The registered scenario bindings identify the assertions this executable file contributes. They retain individual test references so that a composite scenario does not become a claim of complete execution by one file.

## What It Does Not Prove

Local outcomes do not prove deployed queues, external provider acceptance, production credentials or complete browser behavior. No fresh execution or conformance result is claimed.

## Real Dependencies and Test Doubles

The communication fixtures use real PostgreSQL and module logic. Shared support records queue and transport calls and stores objects in memory; sender provisioning substitutes a provider identity store. Signed API contexts replace the authorizer key in API suites.

## Must Not Be Doubled

Database constraints, workspace policy, state guards and the service operation under test must remain real. Recording a provider or queue call must not replace the submission, claim or outcome logic being checked.
