Skip to content

ATS-CRM-DQ-015Keep related records consistent through a merge: Capability Test Specification

Markdown

ATS-CRM-DQ-015

Keep related records consistent through a merge: Capability Test Specification

Markdown
  • DocumentProposed

Planning

Proves capability
CAP-CRM-DQ-015

Design

Executed by
TST-CRM-DQ-176, TST-CRM-DQ-180, TST-CRM-DQ-181, TST-CRM-DQ-184

KindAcceptance test setProduct areaCRMModuleDuplicate Review and Record MergingRevision1

Read atservices-crm a8d1364freact-console baf6dae3

Coverage

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

Test Scenarios

15 scenarios proving CAP-CRM-DQ-015; 11 bound to an existing test.

01 Schema coverage requires a policy for each referenceinvariantapitest
Proves
BR-CAP-CRM-DQ-015-01
Preconditions
Prepare the migrated schema.
Steps
Run coverage checks and add a temporary probe reference.
Expected
All real references have current policies and the probe identifies the missing coverage and remedy.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:tests/integration/db/merge-coverage.integration.spec.ts#declares a policy for every column the catalog holds
02 Unknown references prevent planningvalidationunitnegativetest
Proves
BR-CAP-CRM-DQ-015-02
Preconditions
Provide undeclared registry and live-catalog references.
Steps
Compute their plans.
Expected
The blocker identifies unknown references and the affected counts.
Data
The existing scenario setup supplies the required records.
Bound to
services-crm:modules/merges/tests/unit/services/planning/merge-decisions.spec.js#blocks the merge for a column the registry declares no policy for
services-crm:modules/merges/tests/unit/services/planning/merge-decisions.spec.js#blocks the merge for a column the live catalog holds that nothing answers for
Source
services-crm:modules/merges/tests/unit/services/planning/merge-decisions.spec.js#blocks the merge for a column the registry declares no policy for
03 Duplicate activity connections collapse correctlytransitionapitest
Proves
BR-CAP-CRM-DQ-015-03
Preconditions
One activity links both participants.
Steps
Execute the merge.
Expected
One primary-preserving link remains and the outcome describes Activities.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/merges/tests/integration/services/merges/activity-links-merge.integration.spec.js#collapses a link the survivor already had into the survivor’s own, carrying the primary flag to it
04 Historical references keep their original identityinvariantbrowsertest
Proves
BR-CAP-CRM-DQ-015-04
Preconditions
An absorbed record owns revisions, import receipts and copied-from provenance.
Steps
Merge and read those records.
Expected
Historical identities remain while the integration crosswalk resolves the survivor.
Data
The existing scenario setup supplies the required records.
Bound to
Source
react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0272.spec.ts#CRM-ACC-0272
05 Participants either join the transaction or prevent itfailureapinegativetest
Proves
BR-CAP-CRM-DQ-015-05
Preconditions
Revoke Platform participant access and prepare a refusing participant.
Steps
Plan the inaccessible case and execute the refusal case.
Expected
Unavailable participation blocks planning; refusal leaves the whole merge unapplied.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/merges/tests/integration/services/merges/required-participants.integration.spec.js#blocks it as a participant that is missing, naming the functions it could not call
06 Portal login cardinality controls the previewedgeunittest
Proves
BR-CAP-CRM-DQ-015-06
Preconditions
Prepare one-login and two-login participant snapshots.
Steps
Compute both plans.
Expected
One login produces a relink action and two produce a blocker.
Data
The existing scenario setup supplies the required records.
Bound to
services-crm:modules/merges/tests/unit/services/planning/merge-decisions.spec.js#carries the relink of the one login a participant holds
services-crm:modules/merges/tests/unit/services/planning/merge-decisions.spec.js#is blocked when Platform answers that two participants hold logins
Source
services-crm:modules/merges/tests/unit/services/planning/merge-decisions.spec.js#carries the relink of the one login a participant holds
07 Outside dismissals transfer without overriding survivor decisionstransitionapitest
Proves
BR-CAP-CRM-DQ-015-07
Preconditions
Prepare outside dismissals, internal dismissals and an existing survivor decision.
Steps
Carry the decisions during merging.
Expected
Outside pairs retain attribution and evidence, survivor decisions prevail and internal pairs disappear.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#carries the dismissals about records outside the merge and nothing else
08 Absorption removes detection data and refreshes groupingtransitionapitest
Proves
BR-CAP-CRM-DQ-015-08
Preconditions
A three-record group contains two merging participants.
Steps
Execute their merge.
Expected
The absorbed record's pair is removed and grouping reflects the remaining records.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/merges/tests/integration/services/merges/duplicate-groups-after-merge.integration.spec.js#takes the pair with the record it deleted, the pair being about a record that is gone
09 Related work follows the survivor through the full journeyinteractionbrowsertest
Proves
BR-CAP-CRM-DQ-015-03 BR-CAP-CRM-DQ-015-07
Preconditions
An absorbed contact has tasks, activities and a dismissal against an outsider.
Steps
Merge through the journey.
Expected
Related work and the dismissal follow the survivor, while the old timeline reports the merge destination.
Data
The existing scenario setup supplies the required records.
Bound to
Source
react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0258.spec.ts#CRM-ACC-0258
10 Observe open becoming absent after record deletion or merging removes an open pair’s participanttransitionapiproposed
Proves
BR-CAP-CRM-DQ-015-08 INV-DOM-CRM-DQ-001-06
Preconditions
Arrange open standing with the transition guard satisfied: Record foreign keys cascade the pair.
Steps
Record deletion or merging removes an open pair’s participant.
Expected
Read the absent standing and inspect the associated changes: remove the pair and record keys; carry applicable outside dismissals before merge deletion; refresh surviving groups.
Data
Fixtures for open, the guard and the affected records; a fixed clock for time-dependent changes.
Source
services-crm:modules/merges/tests/integration/services/merges/duplicate-groups-after-merge.integration.spec.js#leaves the group holding the two records that are left, counted as it now stands
11 Observe dismissed becoming absent after record deletion or merging removes a dismissed pair’s participanttransitionapiproposed
Proves
BR-CAP-CRM-DQ-015-07 INV-DOM-CRM-DQ-001-06
Preconditions
Arrange dismissed standing with the transition guard satisfied: Merging first carries eligible outside decisions to the survivor.
Steps
Record deletion or merging removes a dismissed pair’s participant.
Expected
Read the absent standing and inspect the associated changes: carry outside decisions or end internal ones; remove the absorbed pair.
Data
Fixtures for dismissed, the guard and the affected records; a fixed clock for time-dependent changes.
Source
services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#carries the dismissals about records outside the merge and nothing else
12 Observe confirmed becoming absent after deletion or successful merging removes a confirmed participanttransitionapiproposed
Proves
BR-CAP-CRM-DQ-015-08 INV-DOM-CRM-DQ-001-06
Preconditions
Arrange confirmed standing with the transition guard satisfied: Record deletion cascades the comparison.
Steps
Deletion or successful merging removes a confirmed participant.
Expected
Read the absent standing and inspect the associated changes: remove the pair with its participant.
Data
Fixtures for confirmed, the guard and the affected records; a fixed clock for time-dependent changes.
Source
services-crm:modules/merges/tests/integration/services/merges/duplicate-groups-after-merge.integration.spec.js#leaves the group holding the two records that are left, counted as it now stands
13 Absorption removes comparisons naming the deleted participantinvariantapitest
Proves
INV-DOM-CRM-DQ-001-06
Preconditions
A three-record group with an open pair involving the contact being absorbed.
Steps
Execute the merge and read the remaining pair and group.
Expected
No pair names the absorbed contact and the remaining group counts its two live records.
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/merges/duplicate-groups-after-merge.integration.spec.js#leaves the group holding the two records that are left, counted as it now stands
14 An unclassified reference blocks preparationinvariantunittest
Proves
INV-DOM-CRM-DQ-003-11
Preconditions
A participant with an inbound reference not declared by the merge registry.
Steps
Compute its preview.
Expected
The preview includes a non-overridable unknown-reference blocker.
Data
Records, versions and caller contexts owned by the run; transaction failure injection when the invariant concerns rollback.
Bound to
services-crm:modules/merges/tests/unit/services/planning/merge-decisions.spec.js#blocks the merge for a column the registry declares no policy for
Source
services-crm:modules/merges/tests/unit/services/planning/merge-decisions.spec.js#blocks the merge for a column the registry declares no policy for
15 Absorption carries review decisions only with a committed mergeinteractionapiproposed
Proves
BR-CAP-CRM-DQ-015-01 BR-CAP-CRM-DQ-015-02 BR-CAP-CRM-DQ-015-03 BR-CAP-CRM-DQ-015-04 BR-CAP-CRM-DQ-015-05 BR-CAP-CRM-DQ-015-06 BR-CAP-CRM-DQ-015-07 BR-CAP-CRM-DQ-015-08
Preconditions
Run-owned contact and organization records, the relevant staff permissions and the related state described by the sequence.
Steps
Dismiss an outside comparison, execute a merge with related tasks and activity links, then repeat with a refusing application participant.
Expected
Committed relationships and carried decisions follow the survivor; the refusing attempt leaves prior records intact.
Data
An isolated workspace with related records and fixed timestamps; owned participant failure injection where requested.
Source
CAP-CRM-DQ-015; CAP-CRM-DQ-008; CAP-CRM-DQ-016; WF-CRM-DQ-005; WF-CRM-DQ-006

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.