Skip to content

ATS-PFM-OPS-015Prepare and operate workspace applications: Capability Test Specification

Markdown

ATS-PFM-OPS-015

Prepare and operate workspace applications: Capability Test Specification

Markdown
  • DocumentProposed

Planning

Proves capability
CAP-PFM-OPS-015

Design

Executed by
TST-PFM-OPS-081, TST-PFM-OPS-087, TST-PFM-OPS-104

KindAcceptance test setProduct areaPlatformModuleOperational RecordsRevision2

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

Coverage

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

Test Scenarios

15 scenarios proving CAP-PFM-OPS-015; 6 bound to an existing test.

01 Retain a failed preparation and allow another attempttransitionapiproposed
Proves
BR-CAP-PFM-OPS-015-01
Preconditions
A declared participant first fails and later succeeds.
Steps
Prepare the application with a refusing participant, then request another preparation attempt.
Expected
The failure explanation names the participant and repeated refusal remains recorded as failed preparation; successful recovery still requires its own complete executable proof.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Source
services-platform:modules/licensing/tests/integration/services/enablement/provision-tenant-application.integration.spec.js#says which participant could not run, in the reason an operator reads
02 Refuse invalid operational transitionsvalidationapinegativetest
Proves
BR-CAP-PFM-OPS-015-02
Preconditions
Applications are enabled, suspended, failed and absent.
Steps
Attempt retry, suspend and resume against each state.
Expected
Only valid starting states permit the requested transitions.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
services-platform:modules/licensing/tests/integration/services/enablement/provision-tenant-application.integration.spec.js#refuses every move for an application the tenant has never been provisioned for
03 Reject unexplained suspensionvalidationapinegativetest
Proves
BR-CAP-PFM-OPS-015-03 INV-DOM-PFM-OPS-004-02
Preconditions
An application is enabled.
Steps
Suspend without an explanation.
Expected
Validation refuses the request.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
services-platform:modules/licensing/tests/e2e/licensing.e2e.spec.js#refuses a suspension with no reason, with 400
04 Preserve data and original activation timeinvariantapiproposed
Proves
BR-CAP-PFM-OPS-015-04
Preconditions
An enabled application has data and a first-enabled timestamp.
Steps
Suspend and resume it.
Expected
Data remains and the original activation timestamp is retained.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Source
specs/platform/operations/planning/capabilities/CAP-PFM-OPS-015-bring-an-application-into-service-for-a-workspace-and-keep-it.md#rules
05 Separate state writes from later audit and invalidationfailureapiproposed
Proves
BR-CAP-PFM-OPS-015-05
Preconditions
Staff actions include valid transitions, repeated setup failure and a refusal.
Steps
Execute the actions and inject later failures.
Expected
Committed state survives later failure, completed actions request invalidation and rejected transitions do not.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Source
services-platform:modules/licensing/tests/integration/services/enablement/provision-tenant-application.integration.spec.js#asks for a flush when provisioning is retried, even for a retry that failed again
06 Backfill missing core states without resetting decisionsedgeapitest
Proves
BR-CAP-PFM-OPS-015-06 INV-DOM-PFM-OPS-004-06
Preconditions
New and existing workspaces include missing and suspended core application rows.
Steps
Activate provisioning and run release backfill.
Expected
Missing states are enabled and suspended rows remain unchanged.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
services-platform:modules/licensing/tests/integration/services/persistence/tenant-applications.integration.spec.js#leaves a suspended row suspended, so a redeploy never undoes an operational decision
07 Refuse operational changes to readerspermissionapinegativetest
Proves
BR-CAP-PFM-OPS-015-07
Preconditions
A staff reader lacks licensing-management authority.
Steps
Request suspension.
Expected
The route refuses without an invalidation request.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
services-platform:modules/licensing/tests/e2e/licensing.e2e.spec.js#refuses a staff member who may only read, with 403
08 Remove workspace-owned licensing resourcestransitionapiproposed
Proves
BR-CAP-PFM-OPS-015-09
Preconditions
A retiring workspace has override and application-state rows.
Steps
Run the licensing participant purge.
Expected
Its declared licensing resources are removed.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Source
services-platform:modules/licensing/services/maintenance/tenant-participant.ts:licensingParticipant
09 Keep a commercial grant when preparation failsinteractionapiproposed
Proves
BR-CAP-PFM-OPS-011-05 BR-CAP-PFM-OPS-015-01
Preconditions
The application has no operational record and a participant refuses initialization.
Steps
Create a grant and inspect the commercial decision and preparation result.
Expected
The grant remains recorded while the application presents its failed readiness.
Data
Isolated workspace records and caller contexts for both sides of the interaction.
Source
services-platform:modules/licensing/tests/integration/services/enablement/provision-tenant-application.integration.spec.js#leaves the operational row exactly as it was, because the licence does not decide the state; services-platform:modules/licensing/tests/integration/services/enablement/provision-tenant-application.integration.spec.js#says which participant could not run, in the reason an operator reads; CAP-PFM-OPS-011; WF-PFM-OPS-009; WF-PFM-OPS-010; WF-PFM-OPS-011; WF-PFM-OPS-012; WF-PFM-OPS-016
10 Separate licensing from operational resumptioninteractionapiproposed
Proves
BR-CAP-PFM-OPS-014-01 BR-CAP-PFM-OPS-015-02
Preconditions
A licensed application is enabled, then suspended by staff.
Steps
Resolve it before suspension, during suspension and after resumption.
Expected
The commercial standing remains traceable while availability follows the operational change.
Data
Isolated workspace records and caller contexts for both sides of the interaction.
Source
services-platform:modules/licensing/tests/unit/availability/application-availability.spec.ts#answers the available ones, and only those, from the same resolution; services-platform:modules/licensing/tests/integration/services/enablement/provision-tenant-application.integration.spec.js#refuses every move for an application the tenant has never been provisioned for; CAP-PFM-OPS-014; WF-PFM-OPS-009; WF-PFM-OPS-010; WF-PFM-OPS-011; WF-PFM-OPS-012; WF-PFM-OPS-016
11 Retain lifecycle failure evidenceinteractionapiproposed
Proves
BR-CAP-PFM-OPS-015-01
Preconditions
A workspace lifecycle run reaches an interrupted execution outcome.
Steps
Reconcile it and inspect the lifecycle record alongside the job record.
Expected
Both records identify the failed work without silently reopening its final history.
Data
Isolated workspace records and caller contexts for both sides of the interaction.
Source
services-platform:modules/licensing/tests/integration/services/enablement/provision-tenant-application.integration.spec.js#says which participant could not run, in the reason an operator reads; CAP-PFM-SEC-003; WF-PFM-OPS-009; WF-PFM-OPS-010; WF-PFM-OPS-011; WF-PFM-OPS-012; WF-PFM-OPS-016
12 Preserve retirement scopeinteractionapiproposed
Proves
BR-CAP-PFM-OPS-015-09
Preconditions
A workspace is deleting and its deletion jobs must remain inspectable.
Steps
Purge operational resources and inspect the retained deletion runs.
Expected
Retirement removes owned resources while its retained work still explains the deletion.
Data
Isolated workspace records and caller contexts for both sides of the interaction.
Source
services-platform:modules/licensing/services/maintenance/tenant-participant.ts:licensingParticipant; CAP-PFM-SEC-004; WF-PFM-OPS-009; WF-PFM-OPS-010; WF-PFM-OPS-011; WF-PFM-OPS-012; WF-PFM-OPS-016
13 Resolve competing first-row writersconcurrencyapitest
Proves
BR-CAP-PFM-OPS-015-08 INV-DOM-PFM-OPS-004-01
Preconditions
An isolated workspace has no operational row for the application.
Steps
Run two provisioning-state writes concurrently.
Expected
Both writes finish and one operational row remains with its version advanced twice.
Data
Run-owned records and controlled clocks or dependency responses named in the preconditions.
Bound to
Source
services-platform:modules/licensing/tests/integration/services/persistence/tenant-applications.integration.spec.js#lets both finish with one row, never a unique violation (a new workspace provisioning beside a development seed)
14 Retain state reasons through valid operational movestransitionapitest
Proves
BR-CAP-PFM-OPS-015-01 BR-CAP-PFM-OPS-015-02 BR-CAP-PFM-OPS-015-03
Preconditions
An application can be prepared without participants and then deliberately suspended.
Steps
Prepare it, suspend it with a reason, then resume it.
Expected
The service records each result and the resumed row clears the suspension explanation.
Data
Run-owned records and controlled clocks or dependency responses named in the preconditions.
Bound to
Source
services-platform:modules/licensing/tests/integration/services/enablement/provision-tenant-application.integration.spec.js#the staff moves between operational states
15 Remove readiness and exceptions while retaining purge evidenceinteractionapiproposed
Proves
BR-CAP-PFM-OPS-015-09
Preconditions
A deleting workspace has both staff exception rows and operational application states.
Steps
Run licensing resource removal alongside jobs and activity purge, then inspect the declared remaining inventory.
Expected
The removed workspace has no licensing-owned operational resources while retained deletion history remains inspectable.
Data
Isolated workspace and run-owned lifecycle records, with a second linked workspace where shared company evidence is checked.
Source
services-platform:modules/jobs/services/persistence/tenant-purges.ts:JOB_PURGE_RESOURCES; services-platform:modules/audit/tests/integration/services/persistence/audit-events.integration.spec.js#is refused by the database, so the purger is never a delete-by-tenant tool; services-platform:modules/licensing/services/maintenance/tenant-participant.ts:licensingParticipant

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.