Skip to content

ATS-CRM-DQ-004Check drafts and account for block overrides: Capability Test Specification

Markdown

ATS-CRM-DQ-004

Check drafts and account for block overrides: Capability Test Specification

Markdown
  • DocumentProposed

Planning

Proves capability
CAP-CRM-DQ-004

Design

Executed by
TST-CRM-DQ-176, TST-CRM-DQ-180, TST-CRM-DQ-182

KindAcceptance test setProduct areaCRMModuleDuplicate Review and Record MergingRevision1

Read atservices-crm a8d1364freact-console baf6dae3

Coverage

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

Test Scenarios

12 scenarios proving CAP-CRM-DQ-004; 10 bound to an existing test.

01 Draft results honor confidence and exclude the edited recordboundaryapitest
Proves
BR-CAP-CRM-DQ-004-01 BR-CAP-CRM-DQ-004-02
Preconditions
Prepare many draft look-alikes, its own saved record and a very-high rule floor.
Steps
Request the draft check.
Expected
No more than five ranked matches appear, excluding self and below-floor candidates.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/duplicates/tests/integration/services/detection/duplicate-checks.integration.spec.js#answers at most the five a form shows, however many the tenant holds
02 Checking does not create review workinvariantapitest
Proves
BR-CAP-CRM-DQ-004-04
Preconditions
A draft resembles an existing contact.
Steps
Check the draft and read candidates afterwards.
Expected
The review queue retains its earlier contents.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#writes nothing: the draft is not a record, so the queue is as it was
03 Draft checking requires duplicate-read authoritypermissionapinegativetest
Proves
BR-CAP-CRM-DQ-004-05
Preconditions
Use a caller with no duplicate permission.
Steps
Submit a check request.
Expected
Access is denied.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#answers 403 to a caller with no duplicates permission at all
04 Overrides validate reasons and commit with creationfailureapinegativetest
Proves
BR-CAP-CRM-DQ-004-06 BR-CAP-CRM-DQ-004-07
Preconditions
A blocking rule refuses the intended create.
Steps
Try absent and blank reasons, no rule, a failing audit write and then a valid override.
Expected
Invalid fields are named, an audit failure leaves no contact and the valid create retains one attributed override record.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-block-overrides.integration.spec.js#refuses an override with no reason, naming the field
05 Override records cannot be duplicated or updatedinvariantapinegativetest
Proves
BR-CAP-CRM-DQ-004-07 BR-CAP-CRM-DQ-004-08
Preconditions
A record already has a block override.
Steps
Insert another override and attempt an application update.
Expected
Both writes are refused.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-block-overrides.integration.spec.js#refuses a second override of the same record, a record being created once
06 Organization exceptions use the same accountable boundarypermissionapitest
Proves
BR-CAP-CRM-DQ-004-10
Preconditions
Configure an organization blocker and an existing match.
Steps
Create ordinarily, then override with authority and a reason.
Expected
Ordinary creation identifies the blocking match; the authorized exception creates an audited organization.
Data
The existing scenario setup supplies the required records.
Bound to
Source
services-crm:modules/duplicates/tests/e2e/organization-block-rules.e2e.spec.js#refuses an ordinary user’s create 409 possible_duplicate, naming the held organization
07 The form displays suggestions only for a useful draftrulebrowsertest
Proves
BR-CAP-CRM-DQ-004-01 BR-CAP-CRM-DQ-004-04
Preconditions
Prepare an existing member.
Steps
Enter matching details, then remove the name.
Expected
Up to five suggestions appear without writes, and the nameless form shows no suggestions.
Data
The existing scenario setup supplies the required records.
Bound to
Source
react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0243.spec.ts#CRM-ACC-0243
08 Unsupported check record types are rejectedvalidationapinegativetest
Proves
BR-CAP-CRM-DQ-004-13
Preconditions
Use an authorized duplicate reader.
Steps
Request a draft check for an unsupported record type.
Expected
The API returns an invalid-request refusal naming the type.
Data
Use the records and caller described in this scenario.
Bound to
Source
services-crm:modules/duplicates/aws/api/duplicates.routes.ts:objectTypeOf
09 Checking a draft leaves the review queue emptyinvariantapitest
Proves
INV-DOM-CRM-DQ-001-09
Preconditions
One stored contact and a matching unsaved draft without any review comparisons.
Steps
Check the draft and read comparisons for the existing contact.
Expected
The draft has a suggestion but the stored comparison list is still empty.
Data
Records, versions and caller contexts owned by the run; transaction failure injection when the invariant concerns rollback.
Bound to
Source
services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#writes nothing: the draft is not a record, so the queue is as it was
10 Exception-write failure removes the attempted new contactinvariantapitest
Proves
INV-DOM-CRM-DQ-001-10
Preconditions
A blocked creation that is authorized for an exception; fail its exception write.
Steps
Attempt creation and inspect contacts and exception rows after failure.
Expected
Neither the new contact nor its exception record remains.
Data
Records, versions and caller contexts owned by the run; transaction failure injection when the invariant concerns rollback.
Bound to
Source
services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-block-overrides.integration.spec.js#leaves no contact behind, the record and its audit sharing one transaction
11 The override form follows the server’s authority decisionpermissionbrowsernegativeproposed
Proves
BR-CAP-CRM-DQ-004-11
Preconditions
The same blocked draft viewed by an ordinary creator and the appropriate override holder.
Steps
Submit the draft in each context; inspect the available action and attempt confirmation with an empty reason.
Expected
Only the override holder receives Create Anyway, and an empty explanation prevents authorized confirmation.
Data
Run-owned records and caller permissions that distinguish the two cases.
Source
react-console:components/records/create/duplicate-block-refusal.tsx:onCreateAnyway
12 Creation and its exception share a decision boundaryinteractionapiproposed
Proves
BR-CAP-CRM-DQ-004-01 BR-CAP-CRM-DQ-004-02 BR-CAP-CRM-DQ-004-04 BR-CAP-CRM-DQ-004-05 BR-CAP-CRM-DQ-004-06 BR-CAP-CRM-DQ-004-07 BR-CAP-CRM-DQ-004-08 BR-CAP-CRM-DQ-004-10 BR-CAP-CRM-DQ-004-13 BR-CAP-CRM-DQ-004-11
Preconditions
Run-owned contact and organization records, the relevant staff permissions and the related state described by the sequence.
Steps
Try blocked contact and organization creates as an ordinary creator, then as the respective override holder with a reason. Inject an exception-write failure on another attempt.
Expected
Refusal, authorized creation and rollback match the named rules; the exception identifies the record created.
Data
An isolated workspace with related records and fixed timestamps; owned participant failure injection where requested.
Source
CAP-CRM-DQ-004; CAP-CRM-ENT-001; CAP-CRM-ENT-002; WF-CRM-DQ-003; 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.