---
id: TST-PFM-NOT-114
title: slack system adapter
kind: unit
product_area: platform
module: notifications
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
repository: services-platform
files:
  - modules/notifications/tests/unit/slack-system-adapter.spec.js
implements:
  - ATS-PFM-NOT-013-06
  - ATS-PFM-NOT-013-07
environment: mock
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 1
isolation: Per-process test inputs and installed doubles.
assertion_bindings:
  - scenario: ATS-PFM-NOT-013-06
    suite: TST-PFM-NOT-114
    assertions:
      - >-
        services-platform:modules/notifications/tests/unit/slack-system-adapter.spec.js#posts
        the stored payload to the channel id the secret holds for the key, with
        the token as the credential, and answers the message ts
      - >-
        services-platform:modules/notifications/tests/unit/slack-system-adapter.spec.js#answers
        a 429 as a retryable failure carrying Retry-After
      - >-
        services-platform:modules/notifications/tests/unit/slack-system-adapter.spec.js#waits
        30 seconds when a 429 names no Retry-After
      - >-
        services-platform:modules/notifications/tests/unit/slack-system-adapter.spec.js#keeps
        the four named refusals among the permanent ones
      - >-
        services-platform:modules/notifications/tests/unit/slack-system-adapter.spec.js#answers
        any other refusal as a retryable failure, so the queue’s receives are
        the retry budget
      - >-
        services-platform:modules/notifications/tests/unit/slack-system-adapter.spec.js#answers
        a network failure as a retryable failure
      - >-
        services-platform:modules/notifications/tests/unit/slack-system-adapter.spec.js#skips
        every delivery `channel_unconfigured` when there is no secret, posts
        nothing, and warns once for the process
  - scenario: ATS-PFM-NOT-013-07
    suite: TST-PFM-NOT-114
    assertions:
      - >-
        services-platform:modules/notifications/tests/unit/slack-system-adapter.spec.js#never
        puts the token in a log line, an outcome or the payload it stored
evidence:
  - >-
    services-platform:modules/notifications/tests/unit/slack-system-adapter.spec.js
  - The file and referenced assertion titles exist at the pinned commit.
dependency_evidence:
  - >-
    Real: the adapter. Doubled: Slack and the secret
    (`tests/support/recording-slack.ts`, which records exactly what the adapter
  - >-
    posted), and the execution context's logger (a recorder of the lines). Never
    doubled: the adapter's own decisions.
---

# slack system adapter

## Verification Boundary

This suite checks isolated calculations, validation or presentation with process-local inputs. It does not establish a deployed workflow.

## What This Suite Proves

Its cases exercise handle Slack success, throttling and failure; exclude credentials from retained Slack delivery data.

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 test file identifies its pure inputs or presentation doubles. Console component suites use recorded request handlers; pure validation suites require no external provider.

## Must Not Be Doubled

The calculation, validator or component under test must execute its real implementation. Doubles supply inputs and external responses without replacing the behavior being proved.
