---
id: ATS-PFM-INT-002
scope: CAP-PFM-INT-002
product_area: platform
module: integrations
revision: 3
status: proposed
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-PFM-INT-002-01
    title: Catalogue audience follows availability
    level: api
    proves:
      - BR-CAP-PFM-INT-002-01
    preconditions: 'Use public, restricted, internal, inactive and unpublished integrations across two workspaces.'
    steps: Read both catalogues as customer staff and as Rhythm staff in workspace context.
    expected: >-
      Public offers appear to both, restricted offers only to the granted workspace, internal offers only
      to Rhythm staff, and inactive or unpublished offers to neither.
    negative: false
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-515
      - TST-PFM-INT-344
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#shows
      a restricted integration only to the tenant granted it
    category: rule
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#shows
        a restricted integration only to the tenant granted it
      - >-
        services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#shows
        a public integration to every tenant
      - >-
        services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#hides
        an internal integration from a customer’s people
      - >-
        services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#shows
        an internal integration to Rhythm’s own people acting in the tenant
      - >-
        services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#hides
        an integration with no published version
      - >-
        services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#hides
        an integration Rhythm has hidden
      - >-
        react-console:acceptance/integrations/playwright/journeys/library/INT-ACC-0003.spec.ts#INT-ACC-0003
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-002-02
    title: Hidden offers look absent at every entry
    level: browser
    proves:
      - BR-CAP-PFM-INT-002-02
    preconditions: A provider is restricted to a different workspace.
    steps: Search for it and open its direct detail address.
    expected: Search omits the provider and direct navigation returns not found.
    negative: true
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-515
      - TST-PFM-INT-437
      - TST-PFM-INT-345
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#answers
      no detail for an integration the tenant may not see
    category: edge
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#answers
        no detail for an integration the tenant may not see
      - >-
        react-console:acceptance/integrations/playwright/journeys/security/INT-ACC-0518.spec.ts#INT-ACC-0518
      - >-
        react-console:acceptance/integrations/playwright/journeys/library/INT-ACC-0004.spec.ts#INT-ACC-0004
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-002-03
    title: Provider detail supports an informed installation
    level: browser
    proves:
      - BR-CAP-PFM-INT-002-03
    preconditions: The test provider is published and available.
    steps: Open its catalogue card and inspect the detail tabs.
    expected: >-
      Overview, capability, access and release information matches the published declaration and
      identifies the current release.
    negative: false
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-515
      - TST-PFM-INT-107
      - TST-PFM-INT-015
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#answers
      the contracts the version implements, with their schemas and feature meanings
    category: rule
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#answers
        the contracts the version implements, with their schemas and feature meanings
      - >-
        services-platform:modules/integrations/tests/integration/services/catalog/catalog.integration.spec.js#answers
        the published versions and what the integration asks to be allowed
      - >-
        react-console:acceptance/integrations/playwright/journeys/catalog/INT-ACC-0080.spec.ts#INT-ACC-0080
      - >-
        react-console:acceptance/integrations/playwright/journeys/adapters/INT-ACC-0449.spec.ts#INT-ACC-0449
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-002-04
    title: Availability changes preserve existing workspace records
    level: api
    proves:
      - BR-CAP-PFM-INT-002-05
    preconditions: An existing installation and account connection remain after an offer is restricted away.
    steps: 'Read provider detail, installation detail, connection detail and their lists.'
    expected: Provider detail returns not found while the workspace’s saved records remain readable.
    negative: false
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-552
      - TST-PFM-INT-490
    provenance: test
    source: >-
      services-platform:modules/integrations/tests/integration/services/installations/narrowed-availability.integration.spec.js#stays
      readable to the tenant that holds it: the installation, the connection and their lists answer, and
      the catalog entry stays hidden
    category: interaction
    binding_evidence:
      - >-
        services-platform:modules/integrations/tests/integration/services/installations/narrowed-availability.integration.spec.js#stays
        readable to the tenant that holds it: the installation, the connection and their lists answer,
        and the catalog entry stays hidden
      - >-
        services-platform:modules/integrations/tests/e2e/narrowed-availability.e2e.spec.js#answers the
        catalog entry 404, as the tenant is no longer offered the integration
      - >-
        services-platform:modules/integrations/tests/e2e/narrowed-availability.e2e.spec.js#answers the
        installation 200
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-002-05
    title: Read-only access is useful without mutation controls
    level: browser
    proves:
      - BR-CAP-PFM-INT-002-06
      - AS-JNY-PFM-INT-001-04
    preconditions: 'Prepare a reader, manager and person without integration permissions.'
    steps: 'Visit the Library, catalogue and account detail as each person.'
    expected: >-
      The reader can inspect the screens without edit controls; the unauthorized person receives the
      access-denied explanation.
    negative: true
    data_needs: 'Fixtures establishing the stated accounts, declarations and history in an isolated workspace.'
    bound_to:
      - TST-PFM-INT-455
      - TST-PFM-INT-454
      - TST-PFM-INT-489
      - TST-PFM-INT-390
      - TST-PFM-INT-391
    provenance: test
    source: >-
      react-console:lib/integrations/access.test.ts#shows a reader every screen, with no change control
      and no secret
    category: permission
    binding_evidence:
      - >-
        react-console:lib/integrations/access.test.ts#shows a reader every screen, with no change control
        and no secret
      - >-
        react-console:lib/integrations/access.test.ts#shows a person with no integration rights the
        no-access page
      - >-
        react-console:components/integrations/__tests__/library-access.test.tsx#shows a person without
        integration rights Access Denied naming the permission, on the home and on a connection
      - >-
        services-platform:modules/integrations/tests/e2e/integrations.e2e.spec.js#is refused the catalog
        (403)
      - >-
        react-console:acceptance/integrations/playwright/journeys/library/INT-ACC-0049.spec.ts#INT-ACC-0049
      - >-
        react-console:acceptance/integrations/playwright/journeys/library/INT-ACC-0050.spec.ts#INT-ACC-0050
    binding_scope: >-
      contributions: the cited tests support their own asserted outcomes. Additional setup, branches
      and combined sequences remain proposed unless the cited assertions exercise them.
  - id: ATS-PFM-INT-002-06
    level: api
    negative: false
    data_needs: Run-owned records and principals in an isolated workspace.
    bound_to: []
    provenance: proposed
    title: Hidden offers preserve an existing adoption
    category: interaction
    proves:
      - BR-CAP-PFM-INT-002-05
      - BR-CAP-PFM-INT-003-01
    exercises:
      - CAP-PFM-INT-002
      - CAP-PFM-INT-003
    preconditions: One workspace already has an installation before its offer is restricted away.
    steps: Read the saved installation and attempt a fresh installation from an ungranted workspace.
    expected: Saved configuration remains readable while new adoption is refused.
    source:
      - >-
        services-platform:modules/integrations/tests/integration/services/installations/narrowed-availability.integration.spec.js#stays
        readable to the tenant that holds it: the installation, the connection and their lists answer,
        and the catalog entry stays hidden
      - >-
        services-platform:modules/integrations/tests/integration/services/installations/installation-lifecycle.integration.spec.js#refuses
        an integration installed already, and writes no second
    workflows: []
evidence:
  - >-
    Each binding identifies an existing source test at the pinned revision; unbound scenarios remain
    proposed proof obligations.
coverage:
  rule: covered
  transition: 'gap: FND-PFM-INT-054'
  validation: 'gap: FND-PFM-INT-054'
  permission: covered
  edge: covered
  failure: 'gap: FND-PFM-INT-054'
  boundary: 'gap: FND-PFM-INT-054'
  concurrency: 'gap: FND-PFM-INT-054'
  invariant: 'gap: FND-PFM-INT-054'
  interaction: covered
coverage_notes:
  covered: A designed scenario exists; executable coverage and a passing run require separate evidence.
  gaps: >-
    The finding records categories without a designed scenario and remaining permission and rule audit
    obligations.
---
# Explore the integrations available to a workspace: Capability Test Specification

## Coverage

| Rule | Proved By |
|---|---|
| `BR-CAP-PFM-INT-002-01` | `ATS-PFM-INT-002-01` |
| `BR-CAP-PFM-INT-002-02` | `ATS-PFM-INT-002-02` |
| `BR-CAP-PFM-INT-002-03` | `ATS-PFM-INT-002-03` |
| `BR-CAP-PFM-INT-002-05` | `ATS-PFM-INT-002-04`, `ATS-PFM-INT-002-06` |
| `BR-CAP-PFM-INT-002-06` | `ATS-PFM-INT-002-05` |

## Interactions With Related Capabilities

Discovery supplies the release detail an administrator reviews before installation. The interaction case checks that the selected access survives that handoff and remains inspectable after adoption.

The structured scenarios name the capabilities and rules involved. A bound test contributes only the outcomes it asserts; proposed transition matrices and composed interactions still require executable proof.
