Skip to content

ATS-PFM-INT-017Apply tested customizations where an application allows them: Capability Test Specification

Markdown

ATS-PFM-INT-017

Apply tested customizations where an application allows them: Capability Test Specification

Markdown
  • DocumentProposed

KindAcceptance test setProduct areaPlatformModuleIntegration access, customer extensions and shared workflow configurationRevision3

Read atservices-platform ad3f6a65macroservice-libraries 54536a44react-console baf6dae3

Coverage

  • Rule covered
  • Transition covered
  • Validation covered
  • Permission covered
  • Edge covered
  • Failure gap: FND-PFM-INT-084
  • Boundary covered
  • Concurrency covered
  • Invariant covered
  • Interaction covered

Test Scenarios

15 scenarios proving CAP-PFM-INT-017; 12 bound to an existing test.

01 Unsupported handler configuration saves nothingvalidationapinegativetest
Proves
BR-CAP-PFM-INT-017-01
Preconditions
A workspace can create customization handlers.
Steps
Submit a Lambda target without qualifier, an HTTPS target and a target with unknown properties.
Expected
Lambda defaults to live; HTTPS and extra properties refuse without a record.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/integration/services/persistence/extension-handlers.integration.spec.js#refuses an HTTPS handler as not available, naming decision D-02, and writes nothing
02 Rule authors cannot create code handlerspermissionapinegativetest
Proves
BR-CAP-PFM-INT-017-02
Preconditions
A caller has rule-management authority only.
Steps
Create a function handler and a rule handler.
Expected
The function refuses authorization while the rule is accepted.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/e2e/extensions.e2e.spec.js#refuses a Lambda handler to a caller who may manage only rules
03 Bound handler deletion protects configuration and secretsinvariantapinegativetest
Proves
BR-CAP-PFM-INT-017-03
Preconditions
A Lambda handler owns a secret and has a binding.
Steps
Read it, attempt deletion, remove the binding and delete again.
Expected
No read exposes the secret, the bound delete refuses and the unbound delete schedules secret destruction.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/integration/services/persistence/extension-handlers.integration.spec.js#never stores the secret value anywhere in the row
04 Handler declarations fit every implemented pointboundaryapinegativetest
Proves
BR-CAP-PFM-INT-017-04
Preconditions
Two points have five- and ten-second timeout ceilings.
Steps
Create an eight-second handler for both, use an unknown point, duplicate a name and omit a rule body.
Expected
Each invalid configuration reports its field and is rejected.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/integration/services/persistence/extension-handlers.integration.spec.js#refuses a timeout above the shortest ceiling of the points it implements
05 Rule contracts are checked on save and bindvalidationapinegativetest
Proves
BR-CAP-PFM-INT-017-05 AS-JNY-PFM-INT-005-01
Preconditions
A pricing point exposes a current contract version.
Steps
Save an invalid rule, save a valid one and bind it against an incompatible version.
Expected
Save validation reports each problem, the valid rule persists and incompatible binding identifies its failures.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/integration/services/persistence/extension-handlers.integration.spec.js#refuses a rule that does not fit, naming each problem by its path and code, and writes nothing
06 Binding validation rejects each faulty prerequisitevalidationapinegativetest
Proves
BR-CAP-PFM-INT-017-06
Preconditions
A pricing point and implementing handler are available.
Steps
Vary scope, version, failure policy and effective-window faults, then submit a valid binding.
Expected
Invalid cases identify their fault; only the valid configuration is saved.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/integration/services/persistence/extension-bindings.integration.spec.js#refuses an overriding failure policy without a note, and accepts it with one
07 Binding lifecycle and concurrency remain enforcedconcurrencyunittest
Proves
BR-CAP-PFM-INT-017-07
Preconditions
Bindings exist in every lifecycle state.
Steps
Exercise every transition and attempt a stale replacement.
Expected
Only allowed transitions succeed and the stale replacement refuses.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/unit/lifecycle.spec.js#allows draft to become enabled, shadow or disabled, enabled and shadow to trade places, disabled to return, and orphaned only to be disabled
08 Single-answer configuration permits one winnerinvariantapinegativetest
Proves
BR-CAP-PFM-INT-017-08
Preconditions
A product has an enabled binding for a single-answer point.
Steps
Enable another at the same product scope.
Expected
The second activation conflicts.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/e2e/extensions.e2e.spec.js#refuses a second enabled binding at one scope of a single point as 409
09 Preview explains scope precedence and ambiguityedgeapitest
Proves
BR-CAP-PFM-INT-017-09
Preconditions
Product and workspace bindings exist for one point.
Steps
Preview that product, another product and a tied choice.
Expected
The product wins locally, workspace answers elsewhere and the tie reports both choices as a configuration error.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/unit/resolution.spec.js#lets a product binding beat a tenant binding
10 Rule tests produce recorded outcomesruleapitest
Proves
BR-CAP-PFM-INT-017-10 AS-JNY-PFM-INT-005-02
Preconditions
A pricing rule identifies Northeast members.
Steps
Test a matching member, a member elsewhere and invalid input.
Expected
The match returns fifteen percent off, the non-match returns not-applicable or neutral and invalid input fails before running; completed tests enter history.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/e2e/rule-handlers.e2e.spec.js#records each run as a test invocation of the handler
11 Record facts preserve unknown informationedgeunittest
Proves
BR-CAP-PFM-INT-017-11
Preconditions
Prepare records with true, false and absent values plus an absent record.
Steps
Evaluate the configured record fact.
Expected
Results respectively distinguish true, false, unknown and known record absence as false.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/unit/rule-handlers.spec.js#answers FALSE for a subject no row answered, known absent
12 Invocation reads respect authority and capture settingspermissionapinegativetest
Proves
BR-CAP-PFM-INT-017-12
Preconditions
History contains capturing and non-capturing handler runs.
Steps
Read lists and detail with and without invocation-read.
Expected
Unauthorized reads refuse; permitted reads are newest first and expose payload references only for capturing handlers.
Data
Fixtures establishing the stated accounts, declarations and history in an isolated workspace.
Bound to
Source
services-platform:modules/extensions/tests/e2e/extensions.e2e.spec.js#refuses the invocation history without platform.extension-invocations.read
13 Exercise the complete extension binding lifecycletransitionapinegativeproposed
Proves
BR-CAP-PFM-INT-017-07
Preconditions
Prepare one independent record in each starting state, including absent-record cases where the model defines creation.
Steps
Run each listed transition once with its guard satisfied, then repeat it with the guard denied. Inspect the resulting record and listed side effects after commit.
Expected
Each positive case reaches its listed destination and records its defined side effects. Each denied case preserves the starting record and creates no transition side effects.
Data
Run-owned records and principals in an isolated workspace.
Source
rhythm-v2-docs:specs/platform/integrations/design/state-models/STATE-PFM-INT-013-extension-binding-lifecycle.md#transitions
14 Exercise the complete extension handler standingtransitionapinegativeproposed
Proves
BR-CAP-PFM-INT-017-13
Preconditions
Prepare one independent record in each starting state, including absent-record cases where the model defines creation.
Steps
Run each listed transition once with its guard satisfied, then repeat it with the guard denied. Inspect the resulting record and listed side effects after commit.
Expected
Each positive case reaches its listed destination and records its defined side effects. Each denied case preserves the starting record and creates no transition side effects.
Data
Run-owned records and principals in an isolated workspace.
Source
rhythm-v2-docs:specs/platform/integrations/design/state-models/STATE-PFM-INT-017-extension-handler-standing.md#transitions
15 Registry withdrawal orphans configured workinteractionapiproposed
Proves
BR-CAP-PFM-INT-016-04 BR-CAP-PFM-INT-017-07
Preconditions
Two workspaces have bindings to one registered customization point.
Steps
Omit the point from registration, redeclare it and attempt to activate an orphaned binding.
Expected
Withdrawal retires the point and orphans the bindings; redeclaration does not repair them and only disabling is available.
Data
Run-owned records and principals in an isolated workspace.
Source
services-platform:modules/extensions/tests/integration/services/registration/register-service-extensions.integration.spec.js#orphans every binding of a retired point, in every tenant, whatever its status,services-platform:modules/extensions/tests/unit/lifecycle.spec.js#allows draft to become enabled, shadow or disabled, enabled and shadow to trade places, disabled to return, and orphaned only to be disabled

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.