Skip to content

ATS-CRM-DQ-018Resolve identities absorbed by a merge: Capability Test Specification

Markdown

ATS-CRM-DQ-018

Resolve identities absorbed by a merge: Capability Test Specification

Markdown
  • DocumentProposed

Planning

Proves capability
CAP-CRM-DQ-018

Design

Executed by
TST-CRM-DQ-176, TST-CRM-DQ-181, TST-CRM-DQ-183

KindAcceptance test setProduct areaCRMModuleDuplicate Review and Record MergingRevision1

Read atservices-crm a8d1364freact-console baf6dae3

Coverage

  • Rule covered
  • Transition covered
  • Validation gap: FND-CRM-DQ-069
  • Permission gap: FND-CRM-DQ-069
  • Edge gap: FND-CRM-DQ-069
  • Failure gap: FND-CRM-DQ-069
  • Boundary covered
  • Concurrency gap: FND-CRM-DQ-069
  • Invariant covered
  • Interaction covered

Test Scenarios

18 scenarios proving CAP-CRM-DQ-018; 12 bound to an existing test.

01 Absorbed participants create distinct aliasesinvariantapitest
Proves
BR-CAP-CRM-DQ-018-01
Preconditions
Prepare a four-contact merge.
Steps
Execute and inspect each alias, then duplicate one.
Expected
Three aliases retain survivor, merge and original numbers and the repeated alias is refused.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/merges/tests/integration/services/merges/worked-example.integration.spec.js#writes one alias per deleted id, each naming the survivor
02 Alias chains resolve directly to the final survivortransitionapitest
Proves
BR-CAP-CRM-DQ-018-02
Preconditions
Merge a first record into a second and then the second into a third.
Steps
Write the later aliases.
Expected
Both old identities point to the third survivor.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/merges/tests/integration/services/persistence/merged-record-aliases.integration.spec.js#answers the alias it repointed, which is A’s
03 Absorbed identities cannot be recreatedinvariantapinegativetest
Proves
BR-CAP-CRM-DQ-018-03
Preconditions
Prepare contact and organization aliases.
Steps
Create records under their absorbed identities and under fresh ones.
Expected
Absorbed identities fail for their own type while fresh identities succeed.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/merges/tests/integration/db/merged-id-reuse.integration.spec.js#refuses a contact under it, naming the id and what became of it
04 Alias lookup distinguishes absorbed and unused identitiesruleapitest
Proves
BR-CAP-CRM-DQ-018-04
Preconditions
A merge has completed.
Steps
Resolve an absorbed identity and an identity never merged.
Expected
The first returns survivor, merge and time and the second is not found.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/merges/tests/e2e/merges.e2e.spec.js#says where an id the merge took away went, and through which merge
05 Workspace isolation applies to aliasesboundaryapinegativetest
Proves
BR-CAP-CRM-DQ-018-05
Preconditions
An identity was absorbed in another workspace.
Steps
Read it locally and try writing an alias into that workspace.
Expected
Local lookup returns not found and the foreign write is rejected.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/merges/tests/e2e/merged-records.e2e.spec.js#answers 404 in this tenant for an id merged away in another, whose merge is not ours to disclose
06 Numbers and origins retrieve their aliasesruleapitest
Proves
BR-CAP-CRM-DQ-018-06
Preconditions
Prepare aliases with original numbers and source pairs.
Steps
Look up valid and unknown numbers and source pairs.
Expected
Valid lookups return their alias; unknown numbers and mismatched origin services return none.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/merges/tests/integration/services/persistence/merged-record-aliases.queries.integration.spec.js#answers the alias of the record that had that number, whole
07 Alias mutation is limited to survivor redirectioninvariantapinegativetest
Proves
BR-CAP-CRM-DQ-018-07
Preconditions
Prepare an existing alias.
Steps
As the application, change identity, delete, truncate and redirect its survivor.
Expected
Only survivor redirection succeeds.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/merges/tests/integration/db/merged-record-aliases.table.integration.spec.js#repoints the survivor, which chain compression does when a survivor is itself merged away
08 Stale console entry points resolve or report failureinteractionbrowsertest
Proves
BR-CAP-CRM-DQ-018-08
Preconditions
Retain explorer, recent, bookmark, search and saved-view links to an absorbed member.
Steps
Open each link.
Expected
Each reaches the survivor with an explanation or reports its failure accurately.
Data
The existing scenario setup supplies the required records.
Bound to
Source
react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0267.spec.ts#CRM-ACC-0267
09 Observe live record becoming absorbed after a successful merge removes this participanttransitionapiproposed
Proves
BR-CAP-CRM-DQ-018-01
Preconditions
Arrange live record standing with the transition guard satisfied: The alias is written in the committing merge transaction.
Steps
A successful merge removes this participant.
Expected
Read the absorbed standing and inspect the associated changes: retain destination and merge attribution with prior integration identity; deny later identity reuse.
Data
Fixtures for live record, the guard and the affected records; a fixed clock for time-dependent changes.
Source
services-crm:modules/merges/tests/integration/db/merged-record-aliases.table.integration.spec.js#refuses a second alias of the same merged id, so following one is never a choice
10 Observe absorbed becoming absorbed after a later merge absorbs the existing survivortransitionapiproposed
Proves
BR-CAP-CRM-DQ-018-02
Preconditions
Arrange absorbed standing with the transition guard satisfied: The later merge transaction applies alias compression.
Steps
A later merge absorbs the existing survivor.
Expected
Read the absorbed standing and inspect the associated changes: redirect the alias while retaining its original merge attribution.
Data
Fixtures for absorbed, the guard and the affected records; a fixed clock for time-dependent changes.
Source
services-crm:modules/merges/tests/integration/services/persistence/merged-record-aliases.integration.spec.js#leaves C holding both aliases, so the survivor can say what it is made of
11 Observe absorbed becoming dangling after ordinary deletion removes the survivortransitionapinegativeproposed
Proves
BR-CAP-CRM-DQ-018-09
Preconditions
Arrange absorbed standing with the transition guard satisfied: No implemented destination-liveness guard prevents this.
Steps
Ordinary deletion removes the survivor.
Expected
Read the dangling standing and inspect the associated changes: retain a pointer to a missing destination.
Data
Fixtures for absorbed, the guard and the affected records; a fixed clock for time-dependent changes.
Source
FND-CRM-DQ-022
12 Observe absorbed becoming purged after workspace lifecycle removes absorbed identity historytransitionapiproposed
Proves
BR-CAP-CRM-DQ-018-07
Preconditions
Arrange absorbed standing with the transition guard satisfied: Privileged purge capability performs the deletion.
Steps
Workspace lifecycle removes absorbed identity history.
Expected
Read the purged standing and inspect the associated changes: remove aliases before their merge history.
Data
Fixtures for absorbed, the guard and the affected records; a fixed clock for time-dependent changes.
Source
services-crm:modules/merges/tests/integration/db/merged-record-aliases.table.integration.spec.js#may not erase an alias, which would make a merged id answerable and reusable again
13 Observe dangling becoming purged after workspace lifecycle removes a dangling aliastransitionapiproposed
Proves
BR-CAP-CRM-DQ-018-07
Preconditions
Arrange dangling standing with the transition guard satisfied: Deletion requires the privileged workspace capability.
Steps
Workspace lifecycle removes a dangling alias.
Expected
Read the purged standing and inspect the associated changes: remove the retained pointer.
Data
Fixtures for dangling, the guard and the affected records; a fixed clock for time-dependent changes.
Source
services-crm:modules/merges/tests/integration/db/merged-record-aliases.table.integration.spec.js#may not erase an alias, which would make a merged id answerable and reusable again
14 An absorbed identity cannot receive a second aliasinvariantapitest
Proves
INV-DOM-CRM-DQ-004-06
Preconditions
A stored alias for one absorbed identity.
Steps
Attempt a second alias for that same identity in the same workspace and record type.
Expected
The duplicate alias is refused.
Data
Records, versions and caller contexts owned by the run; transaction failure injection when the invariant concerns rollback.
Bound to
Source
services-crm:modules/merges/tests/integration/db/merged-record-aliases.table.integration.spec.js#refuses a second alias of the same merged id, so following one is never a choice
15 A second absorption redirects the oldest aliasinvariantapitest
Proves
INV-DOM-CRM-DQ-004-07
Preconditions
A contact absorbed into a survivor that is later absorbed into a third contact.
Steps
Insert the later merge’s aliases and read the final survivor’s incoming aliases.
Expected
Both absorbed contacts resolve directly to the third contact.
Data
Records, versions and caller contexts owned by the run; transaction failure injection when the invariant concerns rollback.
Bound to
Source
services-crm:modules/merges/tests/integration/services/persistence/merged-record-aliases.integration.spec.js#leaves C holding both aliases, so the survivor can say what it is made of
16 Chosen contact identity cannot reuse an absorbed identityinvariantapitest
Proves
INV-DOM-CRM-DQ-004-08
Preconditions
A contact identity already recorded as absorbed in this workspace.
Steps
Create another contact explicitly naming that identity.
Expected
Creation is refused without another live contact at the old identity.
Data
Records, versions and caller contexts owned by the run; transaction failure injection when the invariant concerns rollback.
Bound to
Source
services-crm:modules/merges/tests/integration/db/merged-id-reuse.integration.spec.js#refuses the contact a client asks to create under it, which is the path a chosen id arrives by
17 An application cannot erase an aliasinvariantapitest
Proves
INV-DOM-CRM-DQ-004-09
Preconditions
A retained alias and the ordinary application database role.
Steps
Attempt deletion through that role.
Expected
The alias remains and the operation is refused.
Data
Records, versions and caller contexts owned by the run; transaction failure injection when the invariant concerns rollback.
Bound to
Source
services-crm:modules/merges/tests/integration/db/merged-record-aliases.table.integration.spec.js#may not erase an alias, which would make a merged id answerable and reusable again
18 Old identities reach readable records and retained historyinteractionapiproposed
Proves
BR-CAP-CRM-DQ-018-01 BR-CAP-CRM-DQ-018-02 BR-CAP-CRM-DQ-018-03 BR-CAP-CRM-DQ-018-04 BR-CAP-CRM-DQ-018-05 BR-CAP-CRM-DQ-018-06 BR-CAP-CRM-DQ-018-07 BR-CAP-CRM-DQ-018-08
Preconditions
Run-owned contact and organization records, the relevant staff permissions and the related state described by the sequence.
Steps
Merge a contact twice, open the oldest link, query by its former number and inspect its lineage under record-read authority.
Expected
Each identity resolves as specified and the reader sees the corresponding retained history.
Data
An isolated workspace with related records and fixed timestamps; owned participant failure injection where requested.
Source
CAP-CRM-DQ-018; CAP-CRM-ENT-003; CAP-CRM-ENT-014; CAP-CRM-ENT-016; WF-CRM-DQ-006; WF-CRM-DQ-009

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.