Skip to content

ATS-PFM-MTD-017Define Meaningful Record Relationships: Capability Test Specification

Markdown

ATS-PFM-MTD-017

Define Meaningful Record Relationships: Capability Test Specification

Markdown
  • DocumentProposed

KindAcceptance test setProduct areaPlatformModuleMetadata and Organization-defined RecordsRevision2

Read atservices-platform ad3f6a65react-console baf6dae3

Coverage

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

Test Scenarios

9 scenarios proving CAP-PFM-MTD-017; 8 bound to an existing test.

01 Type vocabulary rejects unsupported choicesvalidationapinegativetest
Proves
BR-CAP-PFM-MTD-017-01
Preconditions
Relationship creation is available.
Steps
[ { "do": "Submit unknown cardinality, delete policies, missing labels and invalid keys.", "provenance": "test", "source": "services-platform:modules/associations/tests/e2e/associations.e2e.spec.js#answers 400 to an unknown cardinality, naming the three" } ]
Expected
Each request identifies its invalid choice without storing the type.
Data
Relationship creation is available.
Bound to
services-platform:modules/associations/tests/e2e/associations.e2e.spec.js#answers 400 to a 64-character type id in the service’s id grammar
services-platform:modules/associations/tests/e2e/associations.e2e.spec.js#answers 400 to a blank forward label as required
services-platform:modules/associations/tests/e2e/associations.e2e.spec.js#answers 400 to an unknown cardinality, naming the three
services-platform:modules/associations/tests/e2e/associations.e2e.spec.js#answers 400 to an unknown delete rule, naming the three
Source
services-platform:modules/associations/tests/e2e/associations.e2e.spec.js#answers 400 to an unknown cardinality, naming the three
02 Endpoints must be supported and availableinteractionapinegativetest
Proves
BR-CAP-PFM-MTD-017-02
Preconditions
An active object, a draft and registered Contacts exist.
Steps
[ { "do": "Create types to each and a same-type contact relationship.", "provenance": "test", "source": "services-platform:modules/associations/tests/e2e/associations.e2e.spec.js#answers 400 to a type of a draft custom object, naming it as not active" } ]
Expected
Supported endpoints work, drafts and missing types fail and same-type relationships are accepted.
Data
An active object, a draft and registered Contacts exist.
Bound to
services-platform:modules/associations/tests/e2e/associations.e2e.spec.js#creates a type to an active custom object of the tenant
services-platform:modules/associations/tests/e2e/associations.e2e.spec.js#answers 400 to a type of a draft custom object, naming it as not active
Source
services-platform:modules/associations/tests/e2e/associations.e2e.spec.js#answers 400 to a type of a draft custom object, naming it as not active
03 Cascade definitions cannot delete native recordsvalidationbrowsernegativetest
Proves
BR-CAP-PFM-MTD-017-03 BR-CAP-PFM-MTD-017-10 INV-DOM-PFM-MTD-006-02
Preconditions
API and console relationship editors are available.
Steps
[ { "do": "Define a native-target cascade, missing label and duplicate identity.", "provenance": "test", "source": "react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S02.spec.ts#PLAT-M6-S02: a relationship type with a missing label, a cascade onto contacts or a duplicate id is refused and nothing is saved" } ]
Expected
Each invalid definition fails with an explanation and nothing is saved.
Data
API and console relationship editors are available.
Bound to
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S02.spec.ts#PLAT-M6-S02: a relationship type with a missing label, a cascade onto contacts or a duplicate id is refused and nothing is saved
Source
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S02.spec.ts#PLAT-M6-S02: a relationship type with a missing label, a cascade onto contacts or a duplicate id is refused and nothing is saved
04 Type shape and occupied primary settings are protectedconcurrencyapinegativetest
Proves
BR-CAP-PFM-MTD-017-04 INV-DOM-PFM-MTD-006-01
Preconditions
A type has an open primary link.
Steps
[ { "do": "Change its cardinality, endpoint, dating or primary support and attempt stale relabelling.", "provenance": "test", "source": "services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#refuses a change of cardinality, the shape of a type being immutable, and leaves the row as it was" } ]
Expected
Immutable, occupied and stale changes fail; valid versioned relabelling succeeds.
Data
A type has an open primary link.
Bound to
services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#refuses a change of cardinality, the shape of a type being immutable, and leaves the row as it was
services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#refuses turning the primary off while an open association of the type is primary
Source
services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#refuses a change of cardinality, the shape of a type being immutable, and leaves the row as it was
05 Used types retire without discarding linkstransitionapinegativetest
Proves
BR-CAP-PFM-MTD-017-05
Preconditions
One type has links and another is unused.
Steps
[ { "do": "Remove both and try a new link under the retired type.", "provenance": "test", "source": "services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#deactivates a type an association names instead of deleting it" } ]
Expected
The unused type is deleted, the used type deactivates and new links are refused.
Data
One type has links and another is unused.
Bound to
Source
services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#deactivates a type an association names instead of deleting it
06 Owner dependencies prevent type retirementinteractionbrowsernegativetest
Proves
BR-CAP-PFM-MTD-017-06 INV-DOM-PFM-MTD-006-03
Preconditions
Live and archived custom objects use owner types.
Steps
[ { "do": "Retire them, change the owner settings and retry retirement and revival.", "provenance": "test", "source": "services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#refuses deactivating the type of one object, naming it by its label and what to change first" } ]
Expected
Dependencies identify every affected object; removing ownership allows retirement and revival succeeds.
Data
Live and archived custom objects use owner types.
Bound to
services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#refuses deactivating the type of one object, naming it by its label and what to change first
services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#names every object that uses the type as its owner, whatever its status, by label
services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#deactivates the type once no object names it as its owner, and revives it whatever objects name it
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S09.spec.ts#PLAT-M6-S09: a relationship type is relabelled, retired, revived and removed, and Boat's owner type cannot be retired
Source
services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#refuses deactivating the type of one object, naming it by its label and what to change first
07 Type audit records configuration actionsruleapitest
Proves
BR-CAP-PFM-MTD-017-09
Preconditions
Relationship-type administration is available.
Steps
[ { "do": "Create, relabel, deactivate and delete types and inspect the trail.", "provenance": "test", "source": "services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#records a delete and a deactivation in the security trail, each by its action" } ]
Expected
Audit actions identify changes by field name.
Data
Relationship-type administration is available.
Bound to
services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#records a delete and a deactivation in the security trail, each by its action
Source
services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#records a delete and a deactivation in the security trail, each by its action
08 Ordinary users cannot administer typespermissionbrowsernegativetest
Proves
BR-CAP-PFM-MTD-017-10
Preconditions
Standard and read-only staff use the console.
Steps
[ { "do": "Look for relationship-type configuration.", "provenance": "test", "source": "react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S12.spec.ts#PLAT-M6-S12: a standard user links, ends and removes but has no Relationship Types screen, and a read-only colleague sees no actions" } ]
Expected
Neither receives the administration screen.
Data
Standard and read-only staff use the console.
Bound to
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S12.spec.ts#PLAT-M6-S12: a standard user links, ends and removes but has no Relationship Types screen, and a read-only colleague sees no actions
Source
react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S12.spec.ts#PLAT-M6-S12: a standard user links, ends and removes but has no Relationship Types screen, and a read-only colleague sees no actions
09 A relationship policy controls link creation and deletioninteractionapiproposed
Proves
BR-CAP-PFM-MTD-017-06 BR-CAP-PFM-MTD-018-01 BR-CAP-PFM-MTD-019-01
Preconditions
An active custom object has a restricting relationship type and a compatible endpoint.
Steps
[ { "do": "Create a link, try removing its protected endpoint, retire the used type after clearing any owner dependency and attempt another link.", "provenance": "proposed", "source": [ "services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#refuses deactivating the type of one object, naming it by its label and what to change first", "services-platform:modules/associations/tests/integration/services/persistence/associations.integration.spec.js#refuses a record associated with itself", "services-platform:modules/associations/tests/integration/db/apply-endpoint-deletion.integration.spec.js#answers what endpointDeletionOutcome says for an open association on the to side under restrict" ] } ]
Expected
Compare the deletion refusal, retained connection and new-link refusal.
Data
An active custom object has a restricting relationship type and a compatible endpoint.
Source
services-platform:modules/associations/tests/integration/services/persistence/association-types.integration.spec.js#refuses deactivating the type of one object, naming it by its label and what to change first,services-platform:modules/associations/tests/integration/services/persistence/associations.integration.spec.js#refuses a record associated with itself,services-platform:modules/associations/tests/integration/db/apply-endpoint-deletion.integration.spec.js#answers what endpointDeletionOutcome says for an open association on the to side under restrict

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.