Test Scenarios
23 scenarios proving CAP-CRM-ENT-001; 14 bound to an existing test.
01 a contact needs a first or a last namevalidationapinegativetest
- Proves
BR-CAP-CRM-ENT-001-01 INV-DOM-CRM-ENT-001-01 - Preconditions
- Prepare a workspace and a caller with crm.contacts.create.
- Steps
- POST a contact with blank first and last names.
- Expected
- 400 naming first_name; no contact written.
- Data
- No additional fixtures.
- Bound to
- Source
- services-crm:modules/entities/tests/e2e/contacts-names.e2e.spec.js#answers 400 for a contact with neither a first nor a last name, naming the rule
02 the computed names are built from the partsruleapitest
- Proves
BR-CAP-CRM-ENT-001-02 INV-DOM-CRM-ENT-001-02 - Preconditions
- No additional setup is required.
- Steps
- POST a contact with every name part.
- Expected
- Name, full_name and name_last_first as the rule builds them.
- Data
- Use a contact with all seven name parts.
- Bound to
- Source
- services-crm:modules/entities/tests/e2e/contacts-names.e2e.spec.js#builds the full name from every part in order, trimmed and singly spaced
03 a computed name cannot be sent and is never parsedvalidationapinegativetest
- Proves
BR-CAP-CRM-ENT-001-03 - Preconditions
- No additional setup is required.
- Steps
- POST a contact with full_name and no parts; POST one with a name beside parts.
- Expected
- 400 each time; no parts derived.
- Data
- No additional fixtures.
- Bound to
- Source
- services-crm:modules/entities/tests/e2e/contacts-names.e2e.spec.js#answers 400 for a full name sent instead of name parts, and never splits it into parts
06 Client ids are preserved, minted ids are UUIDv7, taken ids are rejectedboundaryapinegativetest
- Proves
BR-CAP-CRM-ENT-001-06 - Preconditions
- No additional setup is required.
- Steps
- Create without an id, with a free id and with a taken id.
- Expected
- UUIDv7; the named id; 400.
- Data
- No additional fixtures.
- Bound to
- Source
- services-crm:modules/entities/tests/e2e/contacts.e2e.spec.js#keeps the id the body named, which is no UUIDv7
09 the type is optional and must be the workspace’svalidationapinegativetest
- Proves
BR-CAP-CRM-ENT-001-09 INV-DOM-CRM-ENT-001-14 - Preconditions
- Prepare a workspace with one contact type.
- Steps
- Create with that type, with none and with an unknown one.
- Expected
- Saved; saved with no type; 409 and nothing saved.
- Data
- No additional fixtures.
- Bound to
- Source
- services-crm:modules/entities/tests/e2e/contacts.e2e.spec.js#answers 409 for a type the tenant does not have, and saves no contact
11 Spouse links are reciprocal and guardedinvariantapinegativetest
- Proves
BR-CAP-CRM-ENT-001-11 INV-DOM-CRM-ENT-001-09 - Preconditions
- Three contacts exist; two are already a spouse pair. A separate pair is available for a valid link.
- Steps
- Create a reciprocal link in the free pair; try to claim a member of the existing pair; clear one side of the free pair; link it again and delete one spouse.
- Expected
- The free pair links in both directions. The occupied spouse is refused without changing either pair. Clearing or deleting a spouse clears the surviving reference.
- Data
- No additional fixtures.
- Bound to
- Source
- services-crm:modules/entities/tests/integration/services/persistence/contacts.spouse.integration.spec.js#links the other spouse back when a contact is created naming it
12 Duplicate confirmation needs authorized overridepermissionbrowsernegativetest
- Proves
BR-CAP-CRM-ENT-001-12 - Preconditions
- Prepare a workspace whose e-mail match rule is set to block.
- Steps
- Attempt the blocked create as a non-holder with confirmation and a reason, then as an override holder with both.
- Expected
- The non-holder receives 409, and the override holder creates the contact.
- Data
- Use seeded duplicate rules.
- Bound to
- Source
- react-console:acceptance/crm/playwright/journeys/contacts/CRM-ACC-0042.spec.ts#CRM-ACC-0042
13 a photo that cannot be saved rejects the createfailureapinegativetest
- Proves
BR-CAP-CRM-ENT-001-13 - Preconditions
- No additional setup is required.
- Steps
- POST a contact naming a staged upload that is not there.
- Expected
- 400 naming image_url and no contact.
- Data
- No additional fixtures.
- Bound to
- Source
- services-crm:modules/entities/tests/e2e/contacts.e2e.spec.js#answers 400 for a photo whose upload is not there, naming the field that failed
14 an override holder creates a blocked contact with a reason, and the override is recordedpermissionapiproposed
- Proves
BR-CAP-CRM-ENT-001-12 - Preconditions
- Prepare a caller holding crm.contacts.create-despite-duplicate-block; a blocking rule.
- Steps
- Create the blocked contact with duplicate_override_reason, then without a reason.
- Expected
- Created and an override row recorded; rejected without a reason.
- Data
- Use seeded duplicate rules.
- Source
- services-crm:modules/entities/services/contacts/contact-create.ts:createRequestedContact
16 Create each supported contact statustransitionapiproposed
- Proves
BR-CAP-CRM-ENT-001-10 - Preconditions
- Four valid person requests have distinct primary addresses.
- Steps
- Create one contact with each supported status and read every saved record.
- Expected
- Each saved status matches its request; the default-status request reads active.
- Data
- Run-owned records and configuration in an isolated workspace.
- Source
- services-crm:modules/entities/tests/integration/db/contacts.table.integration.spec.js#refuses a status outside the closed list by contacts_status_check
23 Exercise every declared authority independentlypermissionapinegativeproposed
- Proves
BR-CAP-CRM-ENT-003-07 BR-CAP-CRM-ENT-003-09 - Preconditions
- An eligible record and configuration fixture exist for each operation; the caller can reach only the run’s workspace.
- Steps
- For each declared permission, execute its matching operation with that permission, then without it while retaining the other required grants. Read affected records after every refused mutation.
- Expected
- The authorized case reaches the operation; the missing-grant case is refused and preserves saved data. Record access alone does not authorize the other declared actions.
- Data
- Run-owned records and configuration in an isolated workspace.
- Source
- services-crm:aws/crm.service.ts:ApplicationPermissions; services-crm:modules/entities/aws/api/entities.routes.ts