Skip to content

ATS-PFM-DJE-006Preserve intervening edits during bulk changes: Capability Test Specification

Markdown

ATS-PFM-DJE-006

Preserve intervening edits during bulk changes: Capability Test Specification

Markdown
  • DocumentProposed

KindAcceptance test setProduct areaPlatformModuleData Job EngineRevision2

Read atmacroservice-libraries 54536a44services-crm a8d1364freact-console baf6dae3

Coverage

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

Test Scenarios

10 scenarios proving CAP-PFM-DJE-006; 6 bound to an existing test.

01 An intervening edit survives approvalconcurrencyapinegativetest
Proves
BR-CAP-PFM-DJE-006-01
Preconditions
Validate a three-contact change and then edit one contact as a colleague.
Steps
[ { "do": "Approve the job.", "expect": "The edited contact is reported as a conflict and preserved; the others change.", "provenance": "test", "source": "services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-versions.integration.spec.js#freezes the version of each of the three contacts on the validated job, by item position" } ]
Expected
The edited contact is reported as a conflict and preserved; the others change.
Data
No additional fixture is needed.
Bound to
Source
services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-versions.integration.spec.js#freezes the version of each of the three contacts on the validated job, by item position
02 The dialog supports reviewed conflict correctioninteractionbrowsertest
Proves
BR-CAP-PFM-DJE-006-01 BR-CAP-PFM-DJE-006-04
Preconditions
Select 35 contacts and edit one between preview and approval.
Steps
[ { "do": "Apply, choose Revalidate Conflicts and approve the new preview.", "expect": "The first run reports 34 applied and a named, timed conflict; the reviewed correction then applies.", "provenance": "test", "source": "react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0103.spec.ts#DJE-ACC-0103" } ]
Expected
The first run reports 34 applied and a named, timed conflict; the reviewed correction then applies.
Data
A prepared contact collection.
Bound to
Source
react-console:acceptance/data-jobs/playwright/journeys/dialogs/DJE-ACC-0103.spec.ts#DJE-ACC-0103
03 Explicit expected versions govern writesvalidationapinegativeproposed
Proves
BR-CAP-PFM-DJE-006-02
Preconditions
Prepare input with an expected version older than its record.
Steps
[ { "do": "Process the change.", "expect": "The version conflict identifies the last editor and time without exposing field values.", "provenance": "proposed", "source": "services-crm:docs/data-jobs.md#What each contact's outcome can be" } ]
Expected
The version conflict identifies the last editor and time without exposing field values.
Data
No additional fixture is needed.
Source
services-crm:docs/data-jobs.md#What each contact's outcome can be
04 Matching values do not become conflictsedgeapitest
Proves
BR-CAP-PFM-DJE-006-03
Preconditions
Have a colleague set the exact value the job requests.
Steps
[ { "do": "Apply the saved job.", "expect": "The contact reports applied with unchanged detail.", "provenance": "test", "source": "services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-versions.integration.spec.js#applies the contact whose colleague made the very change the job asks for, rather than calling it a conflict" } ]
Expected
The contact reports applied with unchanged detail.
Data
No additional fixture is needed.
Bound to
Source
services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-versions.integration.spec.js#applies the contact whose colleague made the very change the job asks for, rather than calling it a conflict
05 Conflict correction creates a separate validationtransitionapinegativetest
Proves
BR-CAP-PFM-DJE-006-04
Preconditions
Complete a job with one conflict.
Steps
[ { "do": "Revalidate it, attempt revalidation of the unfinished correction, and retry the original.", "expect": "The first call creates a linked single-record validation; the other calls are refused.", "provenance": "test", "source": "services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-versions.integration.spec.js#makes the revalidation a new validation of the one conflicted contact, linked to the job it corrects" } ]
Expected
The first call creates a linked single-record validation; the other calls are refused.
Data
No additional fixture is needed.
Bound to
Source
services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-versions.integration.spec.js#makes the revalidation a new validation of the one conflicted contact, linked to the job it corrects
06 The delivery policy governs staff-edit protectionruleapinegativetest
Proves
BR-CAP-PFM-DJE-006-05
Preconditions
Edit a keyed record after its previous producer delivery.
Steps
[ { "do": "Send new input under reject and then overwrite policies.", "expect": "Reject preserves the edit as a conflict; overwrite applies the producer’s input.", "provenance": "test", "source": "macroservice-libraries:packages/data-jobs/src/tests/integration/keyed-data-jobs.integration.spec.ts#refuses the delivery as a conflict and leaves the record alone" } ]
Expected
Reject preserves the edit as a conflict; overwrite applies the producer’s input.
Data
A keyed record fixture.
Bound to
Source
macroservice-libraries:packages/data-jobs/src/tests/integration/keyed-data-jobs.integration.spec.ts#refuses the delivery as a conflict and leaves the record alone
07 Patch revision ordering supports a second passboundaryapinegativetest
Proves
BR-CAP-PFM-DJE-006-06
Preconditions
Prepare a keyed record at producer revision 10.
Steps
[ { "do": "Deliver patches at revision 9 and at revision 10.", "expect": "The older patch is stale; the equal-revision patch can apply another part of that revision.", "provenance": "test", "source": "macroservice-libraries:packages/data-jobs/src/tests/integration/keyed-patches.integration.spec.ts#skips a late patch file whose revision is older than the one applied, and writes nothing; macroservice-libraries:packages/data-jobs/src/tests/integration/keyed-patches.integration.spec.ts#applies a patch of the revision already applied, which is a further part of that revision (a second pass)" } ]
Expected
The older patch is stale; the equal-revision patch can apply another part of that revision.
Data
A keyed record fixture.
Bound to
Source
macroservice-libraries:packages/data-jobs/src/tests/integration/keyed-patches.integration.spec.ts#skips a late patch file whose revision is older than the one applied, and writes nothing; macroservice-libraries:packages/data-jobs/src/tests/integration/keyed-patches.integration.spec.ts#applies a patch of the revision already applied, which is a further part of that revision (a second pass)
08 A later edit changes the approved job's resultinteractionapinegativeproposed
Proves
BR-CAP-PFM-DJE-002-01 BR-CAP-PFM-DJE-002-02 BR-CAP-PFM-DJE-006-01
Preconditions
Prepare two contacts and a validated title change.
Steps
[ { "do": "Edit one contact after preview and approve the original fingerprint.", "expect": "The edited contact remains intact with a conflict while the other receives the saved title.", "provenance": "proposed", "source": "services-crm:modules/data-jobs/tests/integration/services/jobs/contact-data-jobs.integration.spec.js#changes nothing while it is validating; services-crm:modules/data-jobs/tests/integration/services/jobs/contact-data-jobs.integration.spec.js#refuses an apply of the validated update whose digest is not the one the validation answered; services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-versions.integration.spec.js#skips the contact that changed after the validation as a named conflict; services-crm:modules/data-jobs/services/operations/contact-update.ts:prevalidate" } ]
Expected
The edited contact remains intact with a conflict while the other receives the saved title.
Data
Prepare two contacts and a validated title change.
Source
services-crm:modules/data-jobs/tests/integration/services/jobs/contact-data-jobs.integration.spec.js#changes nothing while it is validating; services-crm:modules/data-jobs/tests/integration/services/jobs/contact-data-jobs.integration.spec.js#refuses an apply of the validated update whose digest is not the one the validation answered; services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-versions.integration.spec.js#skips the contact that changed after the validation as a named conflict; services-crm:modules/data-jobs/services/operations/contact-update.ts:prevalidate
09 An edit after restoration planning remains protectedinteractionapinegativeproposed
Proves
BR-CAP-PFM-DJE-006-01 BR-CAP-PFM-DJE-008-02 BR-CAP-PFM-DJE-008-03
Preconditions
Complete an update and plan its restoration using current versions.
Steps
[ { "do": "Edit a reversible contact after planning and approve the restoration.", "expect": "The later edit survives as a changed-since conflict while other reversible contacts are restored.", "provenance": "proposed", "source": "services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-versions.integration.spec.js#skips the contact that changed after the validation as a named conflict; services-crm:modules/data-jobs/services/operations/contact-update.ts:prevalidate; services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-rollback.integration.spec.js#says which field changed since the job and when, without saying what it was changed to; macroservice-libraries:packages/data-jobs/src/tests/integration/rollback-and-retry.integration.spec.ts#refuses a rollback plan with an unversioned item, and writes no rollback job" } ]
Expected
The later edit survives as a changed-since conflict while other reversible contacts are restored.
Data
Complete an update and plan its restoration using current versions.
Source
services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-versions.integration.spec.js#skips the contact that changed after the validation as a named conflict; services-crm:modules/data-jobs/services/operations/contact-update.ts:prevalidate; services-crm:modules/data-jobs/tests/integration/services/jobs/contact-update-rollback.integration.spec.js#says which field changed since the job and when, without saying what it was changed to; macroservice-libraries:packages/data-jobs/src/tests/integration/rollback-and-retry.integration.spec.ts#refuses a rollback plan with an unversioned item, and writes no rollback job
10 Reject policy preserves a staff correction in a later deliveryinteractionapinegativeproposed
Proves
BR-CAP-PFM-DJE-006-05 BR-CAP-PFM-DJE-006-07 BR-CAP-PFM-DJE-012-01 BR-CAP-PFM-DJE-012-03
Preconditions
Import a revisioned keyed record and make a staff correction.
Steps
[ { "do": "Send a newer producer revision under reject policy and inspect its mapping and record.", "expect": "The delivery conflicts and preserves the staff correction; the producer-written version does not adopt the staff version.", "provenance": "proposed", "source": "macroservice-libraries:packages/data-jobs/src/tests/integration/keyed-data-jobs.integration.spec.ts#refuses the delivery as a conflict and leaves the record alone; macroservice-libraries:packages/data-jobs/README.md#Keyed writes and the ID crosswalk; services-crm:modules/data-jobs/tests/integration/services/operations/record-imports.integration.spec.js#skips every record of the same file delivered a second time, rather than making a second organization; macroservice-libraries:packages/data-jobs/src/tests/integration/keyed-data-jobs.integration.spec.ts#writes no crosswalk row for an item it refused, so the corrected delivery of that key is a create" } ]
Expected
The delivery conflicts and preserves the staff correction; the producer-written version does not adopt the staff version.
Data
Import a revisioned keyed record and make a staff correction.
Source
macroservice-libraries:packages/data-jobs/src/tests/integration/keyed-data-jobs.integration.spec.ts#refuses the delivery as a conflict and leaves the record alone; macroservice-libraries:packages/data-jobs/README.md#Keyed writes and the ID crosswalk; services-crm:modules/data-jobs/tests/integration/services/operations/record-imports.integration.spec.js#skips every record of the same file delivered a second time, rather than making a second organization; macroservice-libraries:packages/data-jobs/src/tests/integration/keyed-data-jobs.integration.spec.ts#writes no crosswalk row for an item it refused, so the corrected delivery of that key is a create

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.