---
id: TST-PFM-INT-491
title: reader access
kind: api-lifecycle
product_area: platform
module: integrations
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repository: services-platform
files:
  - modules/integrations/tests/e2e/reader-access.e2e.spec.js
implements:
  - ATS-PFM-INT-003-11
  - ATS-PFM-INT-005-01
  - ATS-PFM-INT-011-01
  - ATS-PFM-INT-011-02
  - ATS-PFM-INT-013-05
  - ATS-PFM-INT-013-08
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 5
isolation: >-
  Use the suite-owned database fixtures and its declared cleanup; prepare the test database before
  integration or lifecycle execution.
evidence:
  - 'services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js'
test_cases:
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#include an execution, a
      delivery and a webhook event, so that no list is read empty by accident
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#every tenant GET route
      is declared with platform.integrations.read and nothing else
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#every tenant GET route
      is one the reader walk below knows how to read
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#is answered 200 by every
      tenant GET route
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#reads the records that
      exist, not empty pages
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#reads a connector’s
      notice on the list and on the connection, with the connection and setting it is about
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#reads no field whose
      name looks like a secret, in any answer
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#reads the key’s last
      four characters and no more, in any answer
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#reads the key’s last
      four characters in the credential facts
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#reads no webhook signing
      secret in any answer
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#leaves the
      administrator’s one reading of the signing secret unused
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#is followed by an
      administrator who reads the signing secret once, and then never again
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#is refused every route
      that changes something (403)
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#is refused every tenant
      route (403)
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#is refused every tenant
      route of this tenant, by id as by list (403)
    provenance: test
  - source: >-
      services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js#is refused every change
      of this tenant (403)
    provenance: test
dependency_evidence:
  provenance: test
  source: 'services-platform:modules/integrations/tests/e2e/reader-access.e2e.spec.js'
  reviewed:
    - Suite introduction
    - Fixture setup
    - Client substitutions
    - Assertions and cleanup
---
# reader access

## Verification Boundary

This database and service suite exercises reader access. Its registration records the executable definition; no run result is asserted.

## What This Suite Proves

The bindings identify the detailed outcomes asserted by this suite. Test-level evidence retains the individual checks, including cases where several suites contribute to one scenario.

## What It Does Not Prove

In-process execution does not establish deployed infrastructure or a real provider response. Several bindings can supply different parts of a detailed scenario; no single-file completeness is implied.

## Real Dependencies and Test Doubles

The suite definition identifies its database fixtures and replaced clients, hooks, clocks or executors. Integration runs use the prepared database; lifecycle runs exercise the in-process route or adapter path.

## Must Not Be Doubled

The database constraints, transactions and service behavior claimed by an integration binding must execute. Replaced external seams cannot establish live provider or infrastructure behavior.
