Skip to content

ATS-PFM-TNL-001Request a complete customer workspace: Capability Test Specification

Markdown

ATS-PFM-TNL-001

Request a complete customer workspace: Capability Test Specification

Markdown
  • DocumentProposed

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-066
  • Transition gap: FND-PFM-TNL-066
  • Validation covered
  • Permission covered
  • Edge gap: FND-PFM-TNL-066
  • Failure covered
  • Boundary gap: FND-PFM-TNL-066
  • Concurrency gap: FND-PFM-TNL-066
  • Invariant covered
  • Interaction gap: FND-PFM-TNL-066

Test Scenarios

9 scenarios proving CAP-PFM-TNL-001; 8 bound to an existing test.

01 Customer authority cannot provisionpermissionapinegativetest
Proves
BR-CAP-PFM-TNL-001-01
Preconditions
A working workspace has a customer administrator.
Steps
Submit a creation request with that identity.
Expected
The request is refused without recording a workspace or build job.
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/e2e/tenant-provisioning.e2e.spec.js#leaves the tenant exactly as it was after all of those refusals
Source
services-platform:modules/tenants/tests/e2e/tenant-provisioning.e2e.spec.js#may not ask for a tenant at all
02 Identifiers are validated and normalizedvalidationapinegativetest
Proves
BR-CAP-PFM-TNL-001-02
Preconditions
Creation requests exercise missing, generated-looking, reserved and mixed-case identifiers.
Steps
Submit each identifier variant.
Expected
Invalid variants identify the rejected field; valid mixed-case input is stored lowercase.
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/e2e/tenants.e2e.spec.js#refuses a create that names no id as 400 tenant_id_required, naming id
services-platform:modules/tenants/tests/e2e/tenants.e2e.spec.js#refuses a UUID-shaped id as 400 tenant_id_invalid, nothing generating ids any more
services-platform:modules/tenants/tests/e2e/tenants.e2e.spec.js#refuses a reserved id as 400 tenant_id_reserved
services-platform:modules/tenants/tests/e2e/tenants.e2e.spec.js#stores an id normalized, trimmed and lowercase
Source
services-platform:modules/tenants/tests/e2e/tenants.e2e.spec.js#refuses a create that names no id as 400 tenant_id_required, naming id
03 Submission replay retains identityinvariantapitest
Proves
BR-CAP-PFM-TNL-001-03
Preconditions
The original submission has been accepted.
Steps
Resubmit its identical payload and submission identity.
Expected
Both responses refer to one workspace and one build job.
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/provisioning/provision-tenant.integration.spec.js#answers the same tenant and the same job when the same submission is sent twice
Source
services-platform:modules/tenants/tests/integration/services/provisioning/provision-tenant.integration.spec.js#answers the same tenant and the same job when the same submission is sent twice
04 Identifier collision preserves the originalvalidationapinegativetest
Proves
BR-CAP-PFM-TNL-001-04
Preconditions
A workspace already holds the chosen identifier.
Steps
Submit a new request with that identifier.
Expected
Creation reports the collision without modifying the existing record.
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/provisioning/provision-tenant.integration.spec.js#refuses a different submission that names a tenant id somebody already has
services-platform:modules/tenants/tests/e2e/tenants.e2e.spec.js#refuses an id another tenant has as 409 tenant_id_taken
Source
services-platform:modules/tenants/tests/integration/services/provisioning/provision-tenant.integration.spec.js#refuses a different submission that names a tenant id somebody already has
05 Sender refusal rolls back creationinvariantapinegativetest
Proves
BR-CAP-PFM-TNL-001-05
Preconditions
A request includes an invalid sender choice.
Steps
Submit the whole workspace request.
Expected
The refusal retains no new customer, workspace, job or provider resource.
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/provisioning/tenant-email-strategy.integration.spec.js#creates no tenant at all when the strategy is refused: the request is rejected whole
Source
services-platform:modules/tenants/tests/integration/services/provisioning/tenant-email-strategy.integration.spec.js#creates no tenant at all when the strategy is refused: the request is rejected whole
06 Request acceptance precedes readinesstransitionapitest
Proves
BR-CAP-PFM-TNL-001-06
Preconditions
A new workspace request is ready to submit.
Steps
Inspect the returned workspace before and after running its build.
Expected
It begins provisioning and becomes active with a recorded opening time.
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/e2e/tenant-provisioning.e2e.spec.js#answers a tenant that is not usable yet, because the work has only been asked for
Source
services-platform:modules/tenants/tests/e2e/tenant-provisioning.e2e.spec.js#answers a tenant that is not usable yet, because the work has only been asked for
07 Execution-start failure preserves the requestfailureapitest
Proves
BR-CAP-PFM-TNL-001-07
Preconditions
The job starter is configured to fail.
Steps
Submit the provisioning request.
Expected
The response returns the committed workspace and pending job without an execution handle.
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/provisioning/provision-tenant.integration.spec.js#answers the tenant it created and the job it submitted, as a successful request does
services-platform:modules/tenants/tests/integration/services/provisioning/provision-tenant.integration.spec.js#leaves the job pending and without a handle, which is what the reconciler settles
Source
services-platform:modules/tenants/tests/integration/services/provisioning/provision-tenant.integration.spec.js#answers the tenant it created and the job it submitted, as a successful request does
08 Provisioning distinguishes inherited and explicitly cleared company linksruleapitest
Proves
BR-CAP-PFM-TNL-001-10
Preconditions
The existing customer has a commercial company link; the provisioning caller is authorized staff.
Steps
Create one workspace without a company field, another with an explicit company and a third with an explicitly cleared company.
Expected
The three workspaces respectively inherit the customer company, use the supplied company and retain no company link.
Data
Use separate run-owned target and comparison workspace records created by the cited suite.
Bound to
services-platform:modules/tenants/tests/integration/services/provisioning/tenant-hubspot-link.integration.spec.js#links a tenant to no company when the request says so explicitly, though the customer has one
Source
services-platform:modules/tenants/tests/integration/services/provisioning/tenant-hubspot-link.integration.spec.js#takes the customer\u2019s company when the request says nothing about one; services-platform:modules/tenants/tests/integration/services/provisioning/tenant-hubspot-link.integration.spec.js#stores the company the request names, in place of the customer\u2019s; services-platform:modules/tenants/tests/integration/services/provisioning/tenant-hubspot-link.integration.spec.js#links a tenant to no company when the request says so explicitly, though the customer has one
09 Accepted construction changes access only after readinessinteractionapinegativeproposed
Proves
BR-CAP-PFM-TNL-001-06
Preconditions
A new customer workspace is requested and one remote readiness check reports a missing resource.
Steps
Submit the request, run construction through the failing readiness check, inspect ordinary access, repair the resource and retry.
Expected
The accepted identity remains the same; access stays closed on failure and opens only after the repaired attempt succeeds.
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-001-ask-for-a-new-workspace-and-have-every-application-build-it.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-003-follow-a-provisioning-retry-it-and-hear-how-it-ended.md; rhythm-v2-docs:specs/platform/tenant-lifecycle/planning/capabilities/CAP-PFM-TNL-005-keep-people-and-background-work-out-of-a-workspace-that-is.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.