Skip to content

ATS-PFM-NOT-013Send operational alerts to Rhythm HQ: Capability Test Specification

Markdown

ATS-PFM-NOT-013

Send operational alerts to Rhythm HQ: Capability Test Specification

Markdown
  • DocumentProposed

KindAcceptance test setProduct areaPlatformModuleStaff Notifications and Association CommunicationsRevision2

Read atservices-platform ad3f6a65react-console baf6dae3

Coverage

  • Rule covered
  • Transition not-applicable
  • Validation covered
  • Permission covered
  • Edge gap: FND-PFM-NOT-074
  • Failure covered
  • Boundary covered
  • Concurrency gap: FND-PFM-NOT-074
  • Invariant covered
  • Interaction covered

Test Scenarios

11 scenarios proving CAP-PFM-NOT-013; 10 bound to an existing test.

01 Process an HQ event through the ordinary pipelineruleapitest
Proves
BR-CAP-PFM-NOT-013-01
Preconditions
Prepare a provisioning-completed alert published in the system scope.
Steps
Execute operational alert processing.
Expected
One request creates a recipient-less notice and queued system Slack delivery with rendered payload.
Data
Use only records created and owned by this suite.
Bound to
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#is accepted as one request, one instance with no recipient and one queued slack_system delivery with the Block Kit payload
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#writes a delivery-work row the dispatcher publishes to the chat queue as a pointer to the delivery
Source
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#is accepted as one request, one instance with no recipient and one queued slack_system delivery with the Block Kit payload
02 Reject customer attempts to select HQ audiencespermissionapinegativetest
Proves
BR-CAP-PFM-NOT-013-02 INV-DOM-PFM-NOT-003-06
Preconditions
Prepare a definition that declares the system audience.
Steps
Publish it from a customer organization; publish an audience of people in the system scope; store a recipientless notice in a customer organization.
Expected
Both forbidden audience cases are rejected and create no notices or deliveries.
Data
Use only records created and owned by this suite.
Bound to
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#is refused in a customer’s tenant as audience_kind_not_allowed, even for a definition that declares it, and nothing is made
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#keeps a customer’s tenant from having an instance with no recipient, whatever wrote it
services-platform:modules/notifications/tests/unit/audience-planner.spec.js#refuses a system audience outside the Rhythm system scope even when the definition declares it
Source
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#is refused in a customer’s tenant as audience_kind_not_allowed, even for a definition that declares it, and nothing is made
03 Require a mapped HQ channelvalidationunitnegativetest
Proves
BR-CAP-PFM-NOT-013-03
Preconditions
Prepare the channel map and the provisioning definitions.
Steps
Submit for registration a system definition with no entry; publish one.
Expected
Registration names the unmapped definition in its rejection, and processing records an invalid request with missing-channel reason.
Data
Use only records created and owned by this suite.
Bound to
services-platform:modules/notifications/tests/unit/hq-channels.spec.js#sends both provisioning outcomes to the operations channel, and nothing else
services-platform:modules/notifications/tests/unit/hq-channels.spec.js#refuses a system definition with no entry in the map, naming the definition and the audience_kinds path
services-platform:modules/notifications/tests/unit/hq-channels.spec.js#is frozen, so nothing changes where an alert goes while the process runs
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#is recorded invalid, naming no_hq_channel, when the definition has no channel in the map
Source
services-platform:modules/notifications/tests/unit/hq-channels.spec.js#sends both provisioning outcomes to the operations channel, and nothing else
04 Create one operational delivery per mapped channelinvariantapitest
Proves
BR-CAP-PFM-NOT-013-04
Preconditions
Prepare a definition mapped to two channels.
Steps
Publish it twice for the identical occurrence.
Expected
Two mapped channels create two notices and deliveries, no console delivery and no additions on repetition.
Data
Use only records created and owned by this suite.
Bound to
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#makes nothing twice when the same occurrence is published again under another request
Source
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#writes one instance and one delivery for each channel of the map
05 Render stable, bounded Slack contentboundaryunittest
Proves
BR-CAP-PFM-NOT-013-05
Preconditions
Prepare a alert with a long body, special characters and an open action.
Steps
Render the same alert using winter and summer occurrence times.
Expected
The payload follows its fixed layout, formats Eastern time across daylight-saving changes, truncates and escapes text, and uses a channel key without a Slack identifier.
Data
Use only records created and owned by this suite.
Bound to
services-platform:modules/notifications/tests/unit/slack-system-render.spec.js#is exactly a bold title and the body, the Rhythm HQ context line in Eastern time, one URL button and a plain fallback
services-platform:modules/notifications/tests/unit/slack-system-render.spec.js#reads the instant in Eastern time on the other side of daylight saving time
services-platform:modules/notifications/tests/unit/slack-system-render.spec.js#escapes the three characters Slack treats as control characters, and nothing else
services-platform:modules/notifications/tests/unit/slack-system-render.spec.js#names the channel by key and carries no id, so what is stored on a delivery names no workspace identifier
Source
services-platform:modules/notifications/tests/unit/slack-system-render.spec.js#is exactly a bold title and the body, the Rhythm HQ context line in Eastern time, one URL button and a plain fallback
06 Handle Slack success, throttling and failurefailureunitnegativetest
Proves
BR-CAP-PFM-NOT-013-06
Preconditions
Prepare a recording Slack.
Steps
Answer ok; 429 with and without Retry-After; each permanent rejection; another rejection; a 5xx; a network failure; no secret.
Expected
Success retains the message reference. Throttling honors the minimum wait; permanent errors fail immediately and transient errors retry. Missing configuration skips with one warning.
Data
Use only records created and owned by this suite.
Bound to
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#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#skips every delivery `channel_unconfigured` when there is no secret, posts nothing, and warns once for the process
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#requeues a rate limit for at least Slack’s Retry-After, longer than the queue’s backoff
Source
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
07 Exclude credentials from retained Slack delivery datainvariantunittest
Proves
BR-CAP-PFM-NOT-013-07
Preconditions
Prepare a capturing logger and a recording Slack.
Steps
Exercise operational delivery with a successful response and an error response.
Expected
Retained delivery outcomes and payloads contain no Slack credential.
Data
Use only records created and owned by this suite.
Bound to
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
services-platform:modules/notifications/tests/unit/hq-channels.spec.js#does not echo the token in the refusal of a malformed value
Source
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
08 Keep provisioning alerts in Rhythm operationsinteractionapitest
Proves
AS-JNY-PFM-NOT-004-01
Preconditions
Prepare a recording Slack and the Rhythm system scope.
Steps
Complete a provisioning job and process its published operational alert.
Expected
One Block Kit message targets operations; customer notification history contains no copy.
Data
The journey's own personas and Northeast unit.
Bound to
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#posts the payload to the channel id and records the delivery sent with the message ts, the instance delivering
Source
react-console:acceptance/notifications/playwright/journeys/hq/NT-ACC-0150.spec.ts#NT-ACC-0150
09 Initialize the reserved workspace idempotentlyinvariantapitest
Proves
BR-CAP-PFM-NOT-013-11
Preconditions
Prepare a environment with no system workspace.
Steps
Ensure the system scope, next ensure it a second time.
Expected
One active support workspace belongs to the demonstration customer and remains nonlive and unlicensed.
Data
An environment with no system workspace.
Bound to
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#is a support tenant of its own demo customer, active but never live, with no licence company
Source
services-platform:modules/notifications/tests/integration/services/system/system-audience.integration.spec.js#is a support tenant of its own demo customer, active but never live, with no licence company
10 HQ routing stays separate from personal selection and operator recoveryinteractionapiproposed
Proves
BR-CAP-PFM-NOT-013-04
Preconditions
Use the reserved operational workspace and a customer workspace, with a mapped alert and temporary Slack failure.
Steps
Publish the operational alert, try the same audience in the customer workspace, exhaust its delivery and retry the exhausted work from HQ.
Expected
The operational notice has no personal recipient and the customer request creates no notice. Operator retry changes only eligible exhausted work.
Data
A suite-owned workspace, named staff accounts and unique occurrence keys; external adapters record attempts without shared writes.
Source
rhythm-v2-docs:specs/platform/notifications/planning/capabilities/CAP-PFM-NOT-013-alert-rhythms-own-staff-in-slack.md#frontmatter,rhythm-v2-docs:specs/platform/notifications/planning/capabilities/CAP-PFM-NOT-012-support-a-customers-notifications-from-rhythm-hq.md#frontmatter
11 Post an operational payload to the configured providerruleapitest
Proves
BR-CAP-PFM-NOT-013-06
Preconditions
Configure the development operational Slack secret and a mapped operations channel.
Steps
Render the suite’s operational payload, send it through the real Slack adapter and inspect the returned outcome.
Expected
The adapter reports sent and retains a provider message reference in the expected timestamp form.
Data
One operational provider-test message in the configured development operations channel.
Bound to
services-platform:modules/notifications/tests/provider/slack-system.provider.spec.ts#posts one message to the operations channel and answers its ts
Source
services-platform:modules/notifications/tests/provider/slack-system.provider.spec.ts#posts one message to the operations channel and answers its ts

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.