Skip to content

ATS-CRM-ACT-010Record and maintain a piece of work: Capability Test Specification

Markdown

ATS-CRM-ACT-010

Record and maintain a piece of work: Capability Test Specification

Markdown
  • DocumentProposed

KindAcceptance test setProduct areaCRMModuleActivities, Follow-ups and Task WorkRevision3

Read atservices-crm a8d1364freact-console baf6dae3rhythm-v2-docs 18a49edf

Coverage

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

Test Scenarios

18 scenarios proving CAP-CRM-ACT-010; 12 bound to an existing test.

01 Reject missing or excessive task textboundaryapinegativetest
Proves
BR-CAP-CRM-ACT-010-01
Preconditions
A valid task type exists.
Steps
Create with missing, blank and 501-character titles and a 20,001-character description.
Expected
Each invalid field is identified and no task is created.
Data
Each run creates and isolates the records it needs.
Bound to
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses a create whose title is longer than 500 characters, naming the field
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses a create whose description is longer than 20000 characters, naming the field
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#answers 400 for a task with no title
Source
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses a create whose title is blank, naming the field
02 Require an existing task classificationvalidationapinegativetest
Proves
BR-CAP-CRM-ACT-010-02
Preconditions
The workspace can be addressed for task creation.
Steps
Create without a type and with an unknown type.
Expected
Both requests fail validation.
Data
Each run creates and isolates the records it needs.
Bound to
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#answers 400 for a task with no type, since every task is of some kind
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#answers 400 for a task type the tenant does not have
services-crm:modules/tasks/tests/integration/db/tasks.table.integration.spec.js#refuses a task with no type at all, which Rhythm 1.0 required too
Source
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#answers 400 for a task with no type, since every task is of some kind
03 Prevent creation in a closed statustransitionapinegativetest
Proves
BR-CAP-CRM-ACT-010-03
Preconditions
A valid task type is available.
Steps
Create directly as Completed.
Expected
The refusal points to the closing action.
Data
Each run creates and isolates the records it needs.
Bound to
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses a create in a closed status, naming the operation that does close a task
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#answers 400 for a task created already completed, since a task is created open
Source
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses a create in a closed status, naming the operation that does close a task
04 Apply task defaults and retain task dateruleapitest
Proves
BR-CAP-CRM-ACT-010-04
Preconditions
A task type exists.
Steps
Create without priority or task date, then replace without task date.
Expected
The task starts Open at Normal priority with today’s workspace date, which replacement preserves.
Data
Each run creates and isolates the records it needs.
Bound to
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#dates a task today, in the tenant's calendar, when the create gives no task date
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#opens a task at normal priority when the create says neither
Source
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#dates a task today, in the tenant's calendar, when the create gives no task date
05 Reject impossible due daysvalidationapinegativetest
Proves
BR-CAP-CRM-ACT-010-05
Preconditions
A valid task type is available.
Steps
Create work due on February 30.
Expected
The response identifies the invalid due-date field.
Data
Each run creates and isolates the records it needs.
Bound to
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#answers 400 naming the field for a due date that is not a day of the calendar
Source
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#answers 400 naming the field for a due date that is not a day of the calendar
06 Discard supplied due time while keeping its dayboundarybrowsertest
Proves
BR-CAP-CRM-ACT-010-06
Preconditions
A valid task type is available.
Steps
Submit a due date containing a time component.
Expected
Creation succeeds and the stored due value contains only its calendar day.
Data
Each run creates and isolates the records it needs.
Bound to
Source
react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0712.spec.ts#CRM-ACC-0712
07 Reject local references outside the workspacevalidationapinegativetest
Proves
BR-CAP-CRM-ACT-010-07
Preconditions
Another workspace owns contact, organization, type and queue fixtures.
Steps
Create tasks referencing each fixture.
Expected
Each foreign reference fails and no task is retained.
Data
Each run creates and isolates the records it needs.
Bound to
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses a task of this tenant that would name the other tenant’s task type
Source
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses a contact the tenant does not have
08 Preserve work after related-record deletiontransitionapitest
Proves
BR-CAP-CRM-ACT-010-08
Preconditions
A task refers to a contact and organization.
Steps
Delete both related records.
Expected
The task remains with both local references cleared.
Data
Each run creates and isolates the records it needs.
Bound to
services-crm:modules/tasks/tests/integration/db/tasks.table.integration.spec.js#keeps the task: the work outlives the record it was about
Source
services-crm:modules/tasks/tests/integration/db/tasks.table.integration.spec.js#keeps the task: the work outlives the record it was about
09 Reserve external task references within each workspaceinvariantapinegativetest
Proves
BR-CAP-CRM-ACT-010-09
Preconditions
A task already holds an external reference.
Steps
Reuse that reference locally and in another workspace.
Expected
Local reuse fails and the other workspace can use it.
Data
Each run creates and isolates the records it needs.
Bound to
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses a second task of the tenant with an external id another task holds (DEF-CRM-0719)
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#lets another tenant’s task hold an external id this tenant’s task holds
Source
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses a second task of the tenant with an external id another task holds (DEF-CRM-0719)
10 Preserve partial edits and reject stale replacementconcurrencyapinegativetest
Proves
BR-CAP-CRM-ACT-010-10
Preconditions
A saved task has a current version and optional details.
Steps
Patch one field, replace using an older version and submit a mismatched task reference.
Expected
The patch preserves other fields, stale replacement conflicts and the mismatched reference fails.
Data
Each run creates and isolates the records it needs.
Bound to
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#and leaves what the patch said nothing about as it was
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#then, when the version is off, refuses the change (409)
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#then, when the id is wrong, refuses the change (400)
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses a replacement at a version the row has moved past, and leaves the row as it was
Source
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#and leaves what the patch said nothing about as it was
11 Apply task update and deletion locksfailureapinegativetest
Proves
BR-CAP-CRM-ACT-010-11
Preconditions
Separate tasks have full and deletion-only locks.
Steps
Try prohibited editing and deletion.
Expected
The relevant locks cause refusals and preserve the records.
Data
Each run creates and isolates the records it needs.
Bound to
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#refuses deleting a task locked against deletes
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#refuses changing a task locked against updates
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses the delete of a locked task, and leaves it in the table
Source
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#refuses deleting a task locked against deletes
12 Restrict deletion to administrator API usepermissionbrowsertest
Proves
BR-CAP-CRM-ACT-010-12
Preconditions
A task and Standard User caller are available.
Steps
Inspect console actions and attempt deletion through the API.
Expected
The console exposes no delete action and the API requires deletion authority.
Data
Each run creates and isolates the records it needs.
Bound to
Source
react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0707.spec.ts#CRM-ACC-0707
13 Task progress and routing appear in the related timelineinteractionapiproposed
Proves
BR-CAP-CRM-ACT-010-10 BR-CAP-CRM-ACT-011-03 BR-CAP-CRM-ACT-012-01 BR-CAP-CRM-ACT-005-02
Preconditions
An open task concerns a contact and belongs to a queue.
Steps
Assign a colleague, edit its title, complete it and read the task and both timeline sections.
Expected
The latest title and assignment persist with completion attribution; the task moves from Upcoming to History.
Data
Run-owned records in an isolated workspace; fixed clock for calendar checks.
Source
services-crm:modules/tasks/services/persistence/tasks.ts:updateTask; services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#completes the task, stamping who finished it and when; services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#stamps who holds the task, who gave it to them and when; services-crm:modules/activities/tests/integration/services/persistence/activities.queries.integration.spec.js#lists the upcoming soonest first: the overdue scheduled activity, then open tasks and scheduled activities in time order
14 Persist task from Open to Deletedtransitionapiproposed
Proves
INV-DOM-CRM-ACT-003-02 INV-DOM-CRM-ACT-003-10 INV-DOM-CRM-ACT-003-12
Preconditions
Run-owned task has Open standing. Neither supported lock is set; deletion accepts no read version.
Steps
A caller requests task deletion. Read the resulting record and affected projections after commit.
Expected
The resulting task has Deleted standing. The task row is removed; enabled attention resolves any overdue item within the deletion transaction.
Data
Run-owned records in an isolated workspace; fixed clock for calendar checks.
Source
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#refuses deleting a task locked against deletes
15 Persist task from Completed to Deletedtransitionapiproposed
Proves
INV-DOM-CRM-ACT-003-02 INV-DOM-CRM-ACT-003-10 INV-DOM-CRM-ACT-003-12
Preconditions
Run-owned task has Completed standing. Neither supported lock is set; deletion accepts no read version.
Steps
A caller requests task deletion. Read the resulting record and affected projections after commit.
Expected
The resulting task has Deleted standing. The task row is removed; enabled attention resolves any overdue item within the deletion transaction.
Data
Run-owned records in an isolated workspace; fixed clock for calendar checks.
Source
services-crm:modules/tasks/services/persistence/tasks.ts:deleteTask
16 Persist task from Waiting for someone else to Deletedtransitionapiproposed
Proves
INV-DOM-CRM-ACT-003-02 INV-DOM-CRM-ACT-003-10 INV-DOM-CRM-ACT-003-12
Preconditions
Run-owned task has Waiting for someone else standing. Neither supported lock is set; deletion accepts no read version.
Steps
A caller requests task deletion. Read the resulting record and affected projections after commit.
Expected
The resulting task has Deleted standing. The task row is removed; enabled attention resolves any overdue item within the deletion transaction.
Data
Run-owned records in an isolated workspace; fixed clock for calendar checks.
Source
services-crm:modules/tasks/services/persistence/tasks.ts:deleteTask
17 Persist task from Deferred to Deletedtransitionapiproposed
Proves
INV-DOM-CRM-ACT-003-02 INV-DOM-CRM-ACT-003-10 INV-DOM-CRM-ACT-003-12
Preconditions
Run-owned task has Deferred standing. Neither supported lock is set; deletion accepts no read version.
Steps
A caller requests task deletion. Read the resulting record and affected projections after commit.
Expected
The resulting task has Deleted standing. The task row is removed; enabled attention resolves any overdue item within the deletion transaction.
Data
Run-owned records in an isolated workspace; fixed clock for calendar checks.
Source
services-crm:modules/tasks/services/persistence/tasks.ts:deleteTask
18 Persist task from Cancelled to Deletedtransitionapiproposed
Proves
INV-DOM-CRM-ACT-003-02 INV-DOM-CRM-ACT-003-10 INV-DOM-CRM-ACT-003-12
Preconditions
Run-owned task has Cancelled standing. Neither supported lock is set; deletion accepts no read version.
Steps
A caller requests task deletion. Read the resulting record and affected projections after commit.
Expected
The resulting task has Deleted standing. The task row is removed; enabled attention resolves any overdue item within the deletion transaction.
Data
Run-owned records in an isolated workspace; fixed clock for calendar checks.
Source
services-crm:modules/tasks/services/persistence/tasks.ts:deleteTask

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.