---
id: TST-PFM-NOT-073
title: notification centre
kind: integration
product_area: platform
module: notifications
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
repository: services-platform
files:
  - >-
    modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js
implements:
  - ATS-PFM-NOT-009-02
  - ATS-PFM-NOT-009-03
  - ATS-PFM-NOT-009-04
  - ATS-PFM-NOT-009-05
  - ATS-PFM-NOT-009-06
  - ATS-PFM-NOT-010-01
  - ATS-PFM-NOT-010-03
  - ATS-PFM-NOT-010-04
  - ATS-PFM-NOT-011-02
  - ATS-PFM-NOT-011-04
  - ATS-PFM-NOT-011-05
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-009-02
    suite: TST-PFM-NOT-073
    assertions:
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#finds
        nothing of another person’s notification, changing nothing
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#never
        lists another person’s notifications
  - scenario: ATS-PFM-NOT-009-03
    suite: TST-PFM-NOT-073
    assertions:
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#lists
        the caller’s own notifications newest first with every element mapped
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#refuses
        a page size outside 1 to 100
  - scenario: ATS-PFM-NOT-009-04
    suite: TST-PFM-NOT-073
    assertions:
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#counts
        the unread, in all and by category
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#leaves
        out a notification that no longer applies
  - scenario: ATS-PFM-NOT-009-05
    suite: TST-PFM-NOT-073
    assertions:
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#archives
        it, taking it out of the default list and into the archived one, and
        brings it back
  - scenario: ATS-PFM-NOT-009-06
    suite: TST-PFM-NOT-073
    assertions:
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#marks
        only the notifications before an instant read
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#marks
        only a category read
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#marks
        everything unread read, the one that no longer applies included, and a
        repeat marks nothing
  - scenario: ATS-PFM-NOT-010-01
    suite: TST-PFM-NOT-073
    assertions:
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#answers
        the lists of a notification’s resolution as lists, whatever the stored
        resolution lacks
  - scenario: ATS-PFM-NOT-010-03
    suite: TST-PFM-NOT-073
    assertions:
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#puts
        the producer’s reason in the words of the rule that reached the person
  - scenario: ATS-PFM-NOT-010-04
    suite: TST-PFM-NOT-073
    assertions:
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#says
        the milestone of a channel not yet available on the delivery summary, as
        the resolution does
  - scenario: ATS-PFM-NOT-011-02
    suite: TST-PFM-NOT-073
    assertions:
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#lists
        every person’s notifications newest first with the person and the
        request
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#narrows
        to one person
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#narrows
        to one definition
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#narrows
        to one category and refuses one that does not exist
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#narrows
        to the notifications that have a delivery on a channel
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#narrows
        to one status and refuses one that does not exist
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#walks
        back through the months while the page is not full, newest first
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#pages
        across the month boundary by keyset
  - scenario: ATS-PFM-NOT-011-04
    suite: TST-PFM-NOT-073
    assertions:
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#reads
        a request with the notifications it made
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#carries
        the why and the deliveries of each notification on the request, as the
        notification’s own chain does
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#reads
        a delivery with its events, its notification and its request
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#answers
        a request without problems as an empty list, never null
  - scenario: ATS-PFM-NOT-011-05
    suite: TST-PFM-NOT-073
    assertions:
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#shows
        nothing of another tenant
      - >-
        services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#finds
        nothing in another tenant or for an id that is nobody’s
evidence:
  - >-
    services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js
  - The file and referenced assertion titles exist at the pinned commit.
dependency_evidence:
  - >-
    Real: PostgreSQL with row-level security on, the real orchestrator that
    makes the notifications, the real reads and mappers.
  - >-
    Doubled: the dispatcher nudge. Never doubled: the database or any read or
    mapping.
---

# notification centre

## 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 confine personal operations to the signed-in user; filter and page the personal inbox; match unread lists to unread totals; update personal read and archive state; limit bulk reading to eligible personal items; read explanation only for an owned item.

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 notification fixtures use real PostgreSQL and module logic. Queue publication, visibility changes, nudges and installed channel adapters are recorded at their seams when the suite needs them. 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.
