---
id: ATS-CRM-ACT-016
scope: CAP-CRM-ACT-016
product_area: crm
module: activities-tasks
revision: 2
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-CRM-ACT-016-01
    title: Reject configuration maintenance without authority
    level: api
    proves:
      - BR-CAP-CRM-ACT-016-01
    preconditions: The caller may read task types only.
    steps: Submit a reorder.
    expected: The API returns Forbidden.
    negative: true
    data_needs: Each run creates and isolates the records it needs.
    bound_to:
      - >-
        services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#answers 403 to a
        caller who may only read task types
    provenance: test
    source: >-
      services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#answers 403 to a
      caller who may only read task types
  - id: ATS-CRM-ACT-016-02
    title: Derive configuration references and reject invalid forms
    level: api
    proves:
      - BR-CAP-CRM-ACT-016-02
    preconditions: Task configuration creation is available.
    steps: >-
      Omit the reference and try malformed, reserved and trailing-underscore
      references.
    expected: The valid name derives a reference; invalid requests create nothing.
    negative: true
    data_needs: Each run creates and isolates the records it needs.
    bound_to:
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#derives
        the id from the name when the create names none
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#refuses
        an id that is not a configuration id, saying what an id may hold
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#refuses
        an id that is reserved
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#writes
        no type at all for an id it refused
      - >-
        services-crm:modules/tasks/tests/integration/db/task-configurations.table.integration.spec.js#refuses
        an id ending in an underscore, which a configuration id may not
      - >-
        services-crm:modules/tasks/tests/integration/db/task-configurations.table.integration.spec.js#refuses
        an id under the prefix Rhythm keeps for itself
    provenance: test
    source: >-
      services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#derives
      the id from the name when the create names none
  - id: ATS-CRM-ACT-016-03
    title: Reject invalid names in task configuration
    level: api
    proves:
      - BR-CAP-CRM-ACT-016-03
    preconditions: An existing type reserves a name.
    steps: 'Submit its name again, spaces only and a 101-character name.'
    expected: Each request reports the name failure.
    negative: true
    data_needs: Each run creates and isolates the records it needs.
    bound_to:
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#refuses
        a create whose name another type of the tenant already has
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#refuses
        a create whose name is nothing but spaces
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#refuses
        a create whose name is longer than 100 characters, naming the field
      - >-
        services-crm:modules/tasks/tests/integration/db/task-configurations.table.integration.spec.js#refuses
        a second row of the tenant with the same name
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.queries.integration.spec.js#answers
        the tenant’s types in display order, then by id
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-queues.queries.integration.spec.js#lists
        the tenant’s queues in display order, and no task type among them
    provenance: test
    source: >-
      services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#refuses
      a create whose name another type of the tenant already has
  - id: ATS-CRM-ACT-016-04
    title: Protect task configuration while referenced
    level: api
    proves:
      - BR-CAP-CRM-ACT-016-04
    preconditions: A task names a type and queue.
    steps: Delete each referenced configuration record.
    expected: Both requests conflict and retain the referenced record.
    negative: true
    data_needs: Each run creates and isolates the records it needs.
    bound_to:
      - >-
        services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#refuses the
        delete of a task type a task is of (409)
      - >-
        services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#refuses the
        delete of a task queue a task waits in (409)
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#is
        refused, naming the task type that is in use
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-queues.integration.spec.js#is
        refused, naming the task queue that is in use
    provenance: test
    source: >-
      services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#refuses the delete
      of a task type a task is of (409)
  - id: ATS-CRM-ACT-016-05
    title: Reorder the complete list including locked entries
    level: api
    proves:
      - BR-CAP-CRM-ACT-016-05
    preconditions: Several task types include a locked entry.
    steps: 'Send complete, omitted-entry, repeated-entry and foreign-entry lists.'
    expected: The valid list moves every entry; invalid lists move none.
    negative: true
    data_needs: Each run creates and isolates the records it needs.
    bound_to:
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#answers
        every type of the tenant, in its new order, each as the API returns it
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#refuses
        a list that leaves a type out, naming it, and moves no type at all
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#refuses
        a list that names a type twice, and moves no type at all
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#moves
        every type to its new place, the locked one included
      - >-
        services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#refuses a reorder
        that leaves the tenant’s other types out (400), and moves the one it
        names nowhere
    provenance: test
    source: >-
      services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#answers
      every type of the tenant, in its new order, each as the API returns it
  - id: ATS-CRM-ACT-016-06
    title: Preserve current configuration on stale or locked edits
    level: api
    proves:
      - BR-CAP-CRM-ACT-016-07
    preconditions: A type has advanced and another is fully locked.
    steps: >-
      Replace those records and separately omit description in a valid
      replacement.
    expected: Invalid edits fail and valid omission clears description.
    negative: true
    data_needs: Each run creates and isolates the records it needs.
    bound_to:
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#is
        refused as a stale object
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#refuses
        a replacement of a type locked against updates
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#clears
        the description the replacement omitted
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-queues.integration.spec.js#refuses
        a replacement at a version the row has moved past
    provenance: test
    source: >-
      services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#is
      refused as a stale object
  - id: ATS-CRM-ACT-016-07
    title: Accept work under inactive configuration
    level: browser
    proves:
      - BR-CAP-CRM-ACT-016-08
    preconditions: A task type and queue have been deactivated.
    steps: Create work referring to both.
    expected: The task is accepted and earlier references remain valid.
    negative: false
    data_needs: Each run creates and isolates the records it needs.
    bound_to:
      - >-
        react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0713.spec.ts#CRM-ACC-0713
    provenance: test
    source: >-
      react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0713.spec.ts#CRM-ACC-0713
  - id: ATS-CRM-ACT-016-08
    title: Adopt task type seeds without overwriting customization
    level: api
    proves:
      - BR-CAP-CRM-ACT-016-09
    preconditions: The customer changed the Follow-up type.
    steps: Apply the baseline repeatedly.
    expected: >-
      Missing types are inserted, later application preserves customer values
      and no queue seed is supplied.
    negative: false
    data_needs: Each run creates and isolates the records it needs.
    bound_to:
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#writes
        the type the first time
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#adopts
        the tenant’s own the second time, rather than writing it again
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#adopts
        a record the tenant edited, which is what makes a seed a starting point
      - >-
        services-crm:modules/tasks/tests/integration/services/persistence/task-queues.integration.spec.js#has
        no provisioning seed of its own: the service offers no insert-if-absent
        for a queue
      - >-
        react-console:acceptance/crm/playwright/journeys/cross-application/CRM-ACC-0728.spec.ts#CRM-ACC-0728
    provenance: test
    source: >-
      services-crm:modules/tasks/tests/integration/services/persistence/task-types.integration.spec.js#writes
      the type the first time
evidence:
  - >-
    Pinned service assertions and proposed proof cases are identified in the
    scenario sources and bindings.
  - >-
    Pinned console assertions and proposed proof cases are identified in the
    scenario sources and bindings.
---

# Maintain task classifications and shared queues: Acceptance Test Set

## Coverage

Bound scenarios identify existing assertions; unbound scenarios remain proposed proof. Static inspection does not establish a passing execution.

| Rule | Proof Scenario Or Gap |
|---|---|
| `BR-CAP-CRM-ACT-016-01` | `ATS-CRM-ACT-016-01` |
| `BR-CAP-CRM-ACT-016-02` | `ATS-CRM-ACT-016-02` |
| `BR-CAP-CRM-ACT-016-03` | `ATS-CRM-ACT-016-03` |
| `BR-CAP-CRM-ACT-016-04` | `ATS-CRM-ACT-016-04` |
| `BR-CAP-CRM-ACT-016-05` | `ATS-CRM-ACT-016-05` |
| `BR-CAP-CRM-ACT-016-06` | no scenario: `FND-CRM-ACT-028` |
| `BR-CAP-CRM-ACT-016-07` | `ATS-CRM-ACT-016-06` |
| `BR-CAP-CRM-ACT-016-08` | `ATS-CRM-ACT-016-07` |
| `BR-CAP-CRM-ACT-016-09` | `ATS-CRM-ACT-016-08` |
