---
id: FAS-PFM-INT-02
title: Provider accounts and credentials acceptance
feature: FEAT-PFM-INT-02
product_area: platform
module: integrations
revision: 2
status: proposed
product_intent: proposed
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
capabilities:
  - CAP-PFM-INT-004
  - CAP-PFM-INT-005
  - CAP-PFM-INT-006
scenarios:
  - id: FAS-PFM-INT-02-01
    title: A verified account has safe operational detail
    kind: behaviour
    exercises:
      - CAP-PFM-INT-004
      - CAP-PFM-INT-005
      - CAP-PFM-INT-006
    relies_on:
      - ATS-PFM-INT-004-01
      - ATS-PFM-INT-005-01
      - ATS-PFM-INT-006-01
    preconditions: An enabled installation supports an entered key.
    steps: >-
      Create an account, enter a valid key, complete verification and inspect credential facts and
      health.
    expected: The usable account and its health are visible without the key value.
    negative: false
    data_needs: 'Run-owned declarations, records and role fixtures in an isolated workspace.'
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/integrations/tests/e2e/integrations.e2e.spec.js#connects a platform
        account, which starts verifying with its job
      - >-
        services-platform:modules/integrations/tests/integration/services/credentials/credential-state.integration.spec.js#answers
        no secret value, secret name or key version
      - >-
        react-console:lib/integrations/connection-dot.test.ts#is grey for suspended and disconnected,
        whatever the last health check said
  - id: FAS-PFM-INT-02-02
    title: Refresh refusal becomes visible account attention
    kind: interaction
    exercises:
      - CAP-PFM-INT-004
      - CAP-PFM-INT-005
      - CAP-PFM-INT-006
    relies_on:
      - ATS-PFM-INT-005-10
      - ATS-PFM-INT-006-03
    preconditions: An active account has a token due for refresh.
    steps: 'Return authorization refusal during refresh and inspect account detail, attention and notices.'
    expected: Re-authorization is required and the visible reason follows the saved provider refusal.
    negative: false
    data_needs: 'Run-owned declarations, records and role fixtures in an isolated workspace.'
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/integrations/tests/integration/services/credentials/refresh.integration.spec.js#makes
        one token request when two refreshes of a connection run at once
      - >-
        services-platform:modules/integrations/tests/integration/services/connections/connection-jobs.integration.spec.js#degrades
        an active connection whose provider is unhealthy
  - id: FAS-PFM-INT-02-03
    title: Disconnect retains safe history and schedules secret cleanup
    kind: lifecycle
    exercises:
      - CAP-PFM-INT-004
      - CAP-PFM-INT-005
      - CAP-PFM-INT-006
    relies_on:
      - ATS-PFM-INT-004-09
      - ATS-PFM-INT-005-04
    preconditions: A verified account has credentials and no current bindings.
    steps: >-
      Disconnect it, inspect its history and credential state, then run maintenance after the recovery
      period.
    expected: >-
      Closure is retained, secret cleanup completes when storage reports deletion and history exposes no
      secret value.
    negative: false
    data_needs: 'Run-owned declarations, records and role fixtures in an isolated workspace.'
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/integrations/tests/integration/services/connections/transition.integration.spec.js#disables
        the connection’s webhook endpoints
      - >-
        services-platform:modules/integrations/tests/integration/services/credentials/credential-lifecycle.integration.spec.js#INT-ACC-0163
        step 5: svc_accounting’s payments.authorize right after the replacement, before the
        re-verification runs, leases the new credential
  - id: FAS-PFM-INT-02-04
    title: Account management does not imply secret authority
    kind: permission
    exercises:
      - CAP-PFM-INT-004
      - CAP-PFM-INT-005
      - CAP-PFM-INT-006
    relies_on:
      - ATS-PFM-INT-005-02
      - ATS-PFM-INT-004-02
    preconditions: A reader and account manager without credential permission inspect one account.
    steps: 'Read account health and credential facts, then attempt key replacement as the manager.'
    expected: >-
      Safe inspection succeeds while the unauthorized replacement leaves the account and credential
      unchanged.
    negative: true
    data_needs: 'Run-owned declarations, records and role fixtures in an isolated workspace.'
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-platform:modules/integrations/tests/e2e/credentials.e2e.spec.js#is refused to a caller
        who manages connections but not their credentials
      - >-
        services-platform:modules/integrations/tests/e2e/integrations.e2e.spec.js#refuses a second
        connection of the tenant whose name derives to a taken id, 409 naming the id
  - id: FAS-PFM-INT-02-05
    title: Correct a refused account credential
    kind: regression
    exercises:
      - CAP-PFM-INT-004
      - CAP-PFM-INT-005
      - CAP-PFM-INT-006
    relies_on:
      - ATS-PFM-INT-004-05
      - ATS-PFM-INT-005-05
      - ATS-PFM-INT-006-01
    preconditions: An initial key is rejected during verification.
    steps: 'Inspect the failure, replace it with a valid key and complete verification.'
    expected: The account recovers to active with features and the expected health indicator.
    negative: true
    data_needs: 'Run-owned declarations, records and role fixtures in an isolated workspace.'
    bound_to: []
    provenance: proposed
    source:
      - FND-PFM-INT-034
      - >-
        services-platform:modules/integrations/services/credentials/credential-store.ts:verification_retried
      - >-
        react-console:lib/integrations/connection-dot.test.ts#is grey for suspended and disconnected,
        whatever the last health check said
evidence:
  - >-
    The feature, its capabilities and the detailed scenarios listed in each reliance are examined at the
    pinned revisions.
---
# Provider accounts and credentials: Feature Acceptance Suite

## What the Feature Must Do as a Whole

The suite follows account setup, verification and recovery alongside health and credential handling. Acceptance inspects the account a person can operate and the safe detail they can read after each change.

## Interactions Between Capabilities

A refresh refusal affects connection eligibility, visible attention and notices. Replacement and disconnection cases inspect those effects together with credential retirement, while the permission case separates account management from authority to replace secrets.

The reliance links identify detailed capability scenarios. None of these composed acceptance sequences has a verified executable binding at the pinned revisions; the corresponding coverage finding remains open.

## Regression Record

| Revision | Change | Scenarios | Reason |
|---|---|---|---|
| 1 | Initial | All | Establish the cumulative acceptance sequences and initial regression cases. |
| 2 | Testing examination continuation | All | Clarify the feature boundary and preserve proposed status for unbound composed sequences. |
