Skip to content

ATS-PFM-TNL-007Account for each application’s lifecycle responsibilities: Capability Test Specification

Markdown

ATS-PFM-TNL-007

Account for each application’s lifecycle responsibilities: Capability Test Specification

Markdown
  • DocumentProposed

Planning

Proves capability
CAP-PFM-TNL-007

Design

Executed by
TST-PFM-TNL-075, TST-PFM-TNL-098

KindAcceptance test setProduct areaPlatformModuleWorkspace Lifecycle Across ApplicationsRevision3

Read atservices-platform ad3f6a65services-crm a8d1364fservices-commerce c8b66a98services-committees 36129c24services-membership 5994c270services-submissions 64236c19services-websites 5fc6823cservices-marketing d071a159rhythm-v2-docs d318a948

Coverage

  • Rule gap: FND-PFM-TNL-072
  • Transition gap: FND-PFM-TNL-072
  • Validation covered
  • Permission not-applicable
  • Edge gap: FND-PFM-TNL-072
  • Failure gap: FND-PFM-TNL-072
  • Boundary covered
  • Concurrency gap: FND-PFM-TNL-072
  • Invariant covered
  • Interaction gap: FND-PFM-TNL-072

Test Scenarios

8 scenarios proving CAP-PFM-TNL-007; 7 bound to an existing test.

01 Description does not require a workspaceboundaryunitnegativetest
Proves
BR-CAP-PFM-TNL-007-01
Preconditions
The applications’ lifecycle interfaces are available.
Steps
Describe participants, then exercise a workspace operation without its workspace argument.
Expected
Description succeeds and the missing-workspace request refuses.
Data
Use the run-owned records and caller contexts created by the cited tests; use their provider and clock seams only where declared.
Bound to
services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#answers describe without reaching a tenant, so Platform can ask before a tenant exists
Source
services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#answers describe without reaching a tenant, so Platform can ask before a tenant exists
02 CRM rejects malformed lifecycle inputsvalidationunitnegativetest
Proves
BR-CAP-PFM-TNL-007-02
Preconditions
CRM requests exercise invalid operation, participant, run and batch inputs.
Steps
Dispatch each malformed request.
Expected
Validation refuses before participant execution and explains the invalid input.
Data
Use the run-owned records and caller contexts created by the cited tests; use their provider and clock seams only where declared.
Bound to
services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses a batch larger than the largest the batched delete accepts
Source
services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#refuses an operation it does not have
03 Removal reverses dependency orderruleunittest
Proves
BR-CAP-PFM-TNL-007-03
Preconditions
Participant manifests contain application dependencies.
Steps
Compute build and removal plans.
Expected
Build places prerequisites first; removal places dependents first and the workspace last.
Data
Use the run-owned records and caller contexts created by the cited tests; use their provider and clock seams only where declared.
Bound to
services-crm:modules/tenant-lifecycle/tests/unit/participants/deletion-order.spec.js#provisions the tenant row, then regions, merges and data jobs, then entities, then tasks and duplicates, then activities
services-crm:modules/tenant-lifecycle/tests/unit/participants/deletion-order.spec.js#purges activities, then tasks and duplicates, then entities, then regions, merges and data jobs, then the tenant row
services-crm:modules/tenant-lifecycle/tests/unit/participants/deletion-order.spec.js#leaves the tenant row until last, in a stage of its own
services-membership:modules/tenant-lifecycle/tests/unit/participants.spec.ts#plans the structure before the memberships at provisioning and after them at deletion
services-submissions:modules/tenant-lifecycle/tests/unit/participants/manifests.spec.js#is provisioned by the planner in that order, and deleted in the reverse, one participant per wave
Source
services-crm:modules/tenant-lifecycle/tests/unit/participants/deletion-order.spec.js#provisions the tenant row, then regions, merges and data jobs, then entities, then tasks and duplicates, then activities
04 Declarations account for the migrated schemainvariantapitest
Proves
BR-CAP-PFM-TNL-007-04
Preconditions
Each application test database is migrated.
Steps
Compare workspace-keyed tables with participant ownership declarations.
Expected
Every discovered table is declared exactly once and declarations name existing tables.
Data
Use the run-owned records and caller contexts created by the cited tests; use their provider and clock seams only where declared.
Bound to
services-platform:modules/tenants/tests/integration/db/tenant-declaration-completeness.integration.spec.js#declares no table twice, so a plan can say which participant removes it
services-committees:modules/tenant-lifecycle/tests/integration/db/tenant-declaration-completeness.integration.spec.ts#finds every tenant-keyed table declared once, and every declared table present
services-marketing:modules/tenant-lifecycle/tests/integration/db/tenant-declaration-completeness.integration.spec.ts#finds every tenant-keyed table declared once, and every declared table present
Source
services-platform:modules/tenants/tests/integration/db/tenant-declaration-completeness.integration.spec.js#declares every tenant-keyed table the database holds
05 Disabled remote applications receive no callsinteractionunittest
Proves
BR-CAP-PFM-TNL-007-05
Preconditions
Platform’s test registry disables an application.
Steps
Compute plans and ask for live descriptions.
Expected
The disabled participant set is absent and the remote application is not contacted.
Data
Use the run-owned records and caller contexts created by the cited tests; use their provider and clock seams only where declared.
Bound to
services-platform:modules/tenants/tests/unit/services/lifecycle/remote-participants.spec.js#leaves the provisioning plan exactly as it was without Accounting’s declaration once it is switched off (the negative control)
services-platform:modules/tenants/tests/unit/services/lifecycle/remote-participants.spec.js#never asks Accounting to describe itself while Platform enables none of its participants
services-platform:modules/tenants/tests/unit/services/lifecycle/remote-participants.spec.js#keeps Platform’s switch when a described service answers a participant Platform declares disabled
Source
services-platform:modules/tenants/tests/unit/services/lifecycle/remote-participants.spec.js#leaves the provisioning plan exactly as it was without Accounting’s declaration once it is switched off (the negative control)
06 Unsupported reset fails before removalvalidationapinegativetest
Proves
BR-CAP-PFM-TNL-007-06
Preconditions
A selected remote participant omits reset support.
Steps
Request workspace reset.
Expected
The refusal identifies the application before any record removal.
Data
Use the run-owned records and caller contexts created by the cited tests; use their provider and clock seams only where declared.
Bound to
services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#names reset among the operations of every participant it describes, which is how Platform knows it may reset the tenant
services-platform:modules/tenants/tests/integration/services/reset/reset-tenant.integration.spec.js#refuses the reset, naming the service and the contract it has to implement
Source
services-crm:modules/tenant-lifecycle/tests/unit/lifecycle/tenant-lifecycle-operations.spec.js#names reset among the operations of every participant it describes, which is how Platform knows it may reset the tenant
07 Resource registration adopts an existing rowinvariantapitest
Proves
BR-CAP-PFM-TNL-007-07
Preconditions
An external resource was registered by an earlier run.
Steps
Register its stable identity during retry.
Expected
The existing row is returned with no duplicate resource registration.
Data
Use the run-owned records and caller contexts created by the cited tests; use their provider and clock seams only where declared.
Bound to
services-platform:modules/tenants/tests/integration/services/persistence/tenant-resources.integration.spec.js#answers the row that was already there rather than refusing the uniqueness rule
Source
services-platform:modules/tenants/tests/integration/services/persistence/tenant-resources.integration.spec.js#answers the row that was already there rather than refusing the uniqueness rule
08 Remote reset support is checked before participant workinteractionapinegativeproposed
Proves
BR-CAP-PFM-TNL-007-06
Preconditions
An import workspace has selected local and remote reset participants; one remote description omits reset.
Steps
Plan reset, inspect invocation logs and compare selected resource counts before and after the refusal.
Expected
The unsupported declaration stops planning before any selected participant removes records.
Data
Create a separate run-owned workspace for each decision branch and an unaffected comparison workspace. Use a controlled clock, paused task or injected fault at the boundary named in the scenario.
Source
rhythm-v2-docs:specs/platform/tenant-lifecycle/planning/capabilities/CAP-PFM-TNL-007-register-each-application-s-part-in-a-workspace-s-life.md; rhythm-v2-docs:specs/platform/tenant-lifecycle/planning/capabilities/CAP-PFM-TNL-012-empty-a-loading-workspace-so-it-can-be-loaded-again.md; rhythm-v2-docs:specs/platform/tenant-lifecycle/planning/capabilities/CAP-PFM-TNL-002-open-a-new-workspace-only-when-every-application-reports-it.md; rhythm-v2-docs:specs/platform/tenant-lifecycle/planning/capabilities/CAP-PFM-TNL-017-remove-everything-a-workspace-owned-and-prove-it-is-gone.md

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.