88
Total
45
High
41
Medium
1
Low

Chatbot Flows

IDTest CasePreconditionsStepsExpected ResultPriority
AUTO-001 List all flows Logged in as Agent, org has 3 active flows 1. Navigate to /automation?tab=flows 2. Wait for page load List of 3 flows appears in descending creation order. No error message shown High
AUTO-002 Create flow with keyword trigger Logged in as Agent with manage_automations permission, at least one WhatsApp account connected 1. Navigate to /automation?tab=flows 2. Click 'New Flow' button 3. Enter name "Pricing Flow" 4. Select trigger type "Keyword" 5. Enter keyword "pricing" 6. Click Save Modal closes. Flow appears in list with status "Draft". Success toast shows "Flow created" High
AUTO-003 Create flow with intent trigger and examples Logged in as Agent with manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Support Flow" 4. Select trigger type "Intent (AI)" 5. Select predefined intent "support_request" 6. Enter examples in text area 7. Click Save Flow created with trigger_intent="support_request" and trigger_intent_examples populated. Flow appears in list High
AUTO-004 Create flow with custom intent Logged in as Agent with manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Select trigger type "Intent (AI)" 4. Select "Custom Intent" from dropdown 5. Enter intent name "refund_request" 6. Enter examples 7. Click Save Flow created with custom intent label. List shows the flow High
AUTO-005 Create flow with new_conversation trigger Logged in as Agent with manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Welcome Flow" 4. Select trigger type "New Conversation" 5. Click Save Flow created with trigger_type="new_conversation". No keyword field required or shown High
AUTO-006 Create flow with new_contact trigger Logged in as Agent with manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Onboarding Flow" 4. Select trigger type "New Contact" 5. Click Save Flow created with trigger_type="new_contact" High
AUTO-007 Create flow with all_messages trigger Logged in as Agent with manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Catch-All Flow" 4. Select trigger type "All Messages" 5. Click Save Flow created with trigger_type="all_messages" High
AUTO-008 Edit flow name and description Logged in as Agent with manage_automations permission, "Pricing Flow" exists as draft 1. Navigate to /automation?tab=flows 2. Click "Pricing Flow" row 3. Click Edit button 4. Change name to "Pricing & Plans Flow" 5. Change description to "Handles pricing queries" 6. Click Save Edit modal closes. Flow list shows updated name. Success toast displays High
AUTO-009 Edit flow trigger keyword Logged in as Agent, "Pricing Flow" exists with keyword "pricing" 1. Navigate to /automation?tab=flows 2. Click "Pricing Flow" 3. Click Edit 4. Change keyword from "pricing" to "price, cost" 5. Click Save Flow updated. Trigger keyword now accepts multiple comma-separated keywords High
AUTO-010 Delete flow with confirmation Logged in as Agent with manage_automations permission, "Test Flow" exists 1. Navigate to /automation?tab=flows 2. Click trash icon on "Test Flow" row 3. Confirmation modal appears asking "Delete flow 'Test Flow'?" 4. Click "Delete" button Flow removed from list immediately. Success toast shows "Flow deleted". API returns 204 High
AUTO-011 Cancel delete operation Logged in as Agent, "Test Flow" exists 1. Navigate to /automation?tab=flows 2. Click trash icon 3. Confirmation modal appears 4. Click "Cancel" button Modal closes without deleting. Flow still in list Medium
AUTO-012 Open flow builder Logged in as Agent, "Pricing Flow" exists as draft 1. Navigate to /automation?tab=flows 2. Click on "Pricing Flow" row (not edit icon) 3. Wait for flow builder to load Flow builder canvas opens showing trigger node. Flow definition is loaded. Back arrow visible in header High
AUTO-013 Save flow changes in builder Logged in as Agent, flow builder is open with a flow 1. Click on empty canvas to add new Send Message node 2. Enter message text "Hello!" 3. Connect trigger node to message node 4. Click Save button in builder header Success toast shows "Flow saved". Updated definition persisted. Flow shows as "Active" or "Draft" depending on state High
AUTO-014 Cannot create flow without manage_automations permission Logged in as Agent without manage_automations permission 1. Navigate to /automation?tab=flows 2. Click 'New Flow' button Button disabled or not visible. No modal opens Medium
AUTO-015 Cannot edit flow without manage_automations permission Logged in as Agent without manage_automations permission, flow exists 1. Navigate to /automation?tab=flows 2. Click flow row 3. Click Edit button Edit button disabled or not visible. No modal opens Medium
AUTO-016 Cannot delete flow without manage_automations permission Logged in as Agent without manage_automations permission 1. Navigate to /automation?tab=flows 2. Hover over flow row Trash icon not visible or disabled. Click has no effect Medium
AUTO-017 Create flow with specific WhatsApp account Logged in as Agent, 2 WhatsApp accounts connected 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Account-Specific Flow" 4. Select trigger type "Keyword" 5. Select first WhatsApp account from dropdown 6. Enter keyword 7. Click Save Flow created with whatsapp_account_id set to selected account. Shown in account filter if present High
AUTO-018 Create flow for all WhatsApp accounts Logged in as Agent, multiple accounts connected 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Leave WhatsApp account selection empty or select "All Accounts" 4. Enter required fields 5. Click Save Flow created with whatsapp_account_id=null. Flow triggers on any connected account High
AUTO-019 Missing required field - flow name Logged in as Agent 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Leave name empty 4. Click Save Error text appears under name field: "Name is required". Save button disabled. Modal stays open Medium
AUTO-020 Missing required field - trigger type and keyword Logged in as Agent 1. Navigate to /automation?tab=flows 2. Click 'New Flow' 3. Enter name "Test" 4. Leave trigger_type as "Keyword" but leave keyword empty 5. Click Save Error text: "Keyword is required for keyword trigger". Save button disabled Medium
AUTO-021 Flow list empty state Logged in as Agent, no flows exist 1. Navigate to /automation?tab=flows Empty state message: "No flows yet. Create your first flow to get started." Create button visible Medium
AUTO-022 Flow list search/filter (future enhancement) Logged in as Agent, 5 flows exist 1. Navigate to /automation?tab=flows 2. Observe list Flows displayed in reverse creation order (newest first). No search box present currently Low
AUTO-023 Activate/deactivate flow toggle Logged in as Agent, "Pricing Flow" exists as draft 1. Navigate to /automation?tab=flows 2. Locate "Pricing Flow" row 3. Click toggle or "Activate" button Flow status changes to "Active". Toggle state reflected in list. Success toast: "Flow activated" Medium
AUTO-024 Deactivate active flow Logged in as Agent, "Pricing Flow" is active 1. Navigate to /automation?tab=flows 2. Click toggle/deactivate button on "Pricing Flow" Flow status changes to "Inactive". Toggle reflected. Success toast: "Flow deactivated" Medium
AUTO-101 Parse WhatsApp Flow response and spread fields as session variables Logged in as Agent, flow is running with a WhatsApp Flows node that collects user input 1. Open flow builder for active flow 2. Add "WhatsApp Flows" node that uses a flow returning JSON response like {"name": "John", "email": "john@example.com"} 3. User completes flow in WhatsApp and response is received 4. Observe subsequent message nodes in the flow Parser extracts JSON fields. Each field (name, email) is stored as a top-level session variable accessible via {{name}}, {{email}}. Reserved keys (flow_token, version, screen, action, source) excluded from top-level spread High
AUTO-102 WhatsApp Flows response parsing with reserved metadata keys Logged in as Agent, flow awaits Flows response with metadata 1. Open flow builder 2. Add WhatsApp Flows node 3. User completes flow returning {"flow_token": "token123", "version": "1.0", "screen": "final", "action": "submit", "source": "user", "order_id": "ORD-123"} 4. Message node after Flows node uses {{order_id}} Parser extracts all fields. Reserved keys (flow_token, version, screen, action, source) stored but NOT spread to top-level session. Only custom field (order_id) available as top-level variable. {{order_id}} resolves to "ORD-123" High
AUTO-103 Empty or missing WhatsApp Flows response Logged in as Agent, flow awaits Flows response 1. Open flow builder 2. Add WhatsApp Flows node 3. User closes flow without completing or response is empty object {} 4. Next node attempts to access parsed variables Parser handles empty response gracefully. No session variables created from response. Following nodes can still execute without error Medium
AUTO-104 Malformed JSON in WhatsApp Flows response Logged in as Agent, flow awaits malformed response 1. Open flow builder 2. Add WhatsApp Flows node that receives malformed JSON 3. Observe flow execution Fallback behavior: parsed set to empty dict {}. Session data updated but no variables extracted. Error logged. Flow continues without crashing Medium
AUTO-105 Session variables initialized with contact data Logged in as Agent, flow starts with a contact 1. Navigate to /automation?tab=flows 2. Open active flow in builder 3. Start a conversation that triggers this flow 4. Observe first node's available session variables Session is seeded with contact_id, contact_phone, contact_name, contact_email, contact_tags from the contact record. Variables accessible via {{contact_name}}, {{contact_email}}, etc. in any message node High
AUTO-106 Contact session variables with missing contact fields Logged in as Agent, contact exists with phone only (no name, email) 1. Start flow for contact with minimal data 2. In first message node, use {{contact_name}} and {{contact_email}} contact_name resolves to empty string "". contact_email resolves to empty string "". contact_tags resolves to empty string "". Flow continues without error Medium
AUTO-107 Contact tags seeded as comma-separated string Logged in as Agent, contact exists with tags ["VIP", "Support"] 1. Start flow for this contact 2. Use {{contact_tags}} in a message node contact_tags resolves to "VIP, Support" (comma and space separated string). Tags are accessible as single variable Medium

Create Contact Node

IDTest CasePreconditionsStepsExpected ResultPriority
AUTO-108 Add create_contact node to flow Logged in as Agent, flow builder is open 1. Open flow builder for a draft flow 2. Click on empty canvas area 3. Select node type dropdown 4. Select "Create Contact" 5. Click to place node on canvas Create Contact node appears on canvas with default configuration. Node has two output handles: "success" and "error" High
AUTO-109 Configure create_contact node with phone session variable Logged in as Agent, flow builder open with create_contact node 1. Click on create_contact node to open config panel 2. In "Phone session key" field, enter "phone" 3. Leave other fields empty 4. Click Save Node config persists. phone_session_key="phone" stored High
AUTO-110 Configure create_contact node with name session variable Logged in as Agent, create_contact node in builder 1. Click node to open config panel 2. In "Name session key" field, enter "user_name" 3. Click Save Node stores name_session_key="user_name" Medium
AUTO-111 Configure create_contact node with email session variable Logged in as Agent, create_contact node in builder 1. Click node 2. Enter "user_email" in "Email session key" field 3. Click Save Node stores email_session_key="user_email" Medium
AUTO-112 Configure create_contact node with tags session variable Logged in as Agent, create_contact node in builder 1. Click node 2. Enter "user_tags" in "Tags session key" field 3. Click Save Node stores tags_session_key="user_tags". Tags can be comma-separated string or JSON array string Medium
AUTO-113 Configure create_contact node output variable Logged in as Agent, create_contact node in builder 1. Click node 2. In "Output Contact ID key" field, enter "created_contact_id" 3. Click Save Node stores output_contact_id_key="created_contact_id". On success, new contact's ID stored in session as this key Medium
AUTO-114 Configure merge_on_duplicate setting Logged in as Agent, create_contact node in builder 1. Click node to open config 2. Check "Merge on duplicate phone" toggle 3. Click Save Node stores merge_on_duplicate=true. If phone exists, contact is updated instead of error High
AUTO-115 Configure contact assignment to user Logged in as Agent, create_contact node in builder 1. Click node 2. Select "Assign to User" from assignment dropdown 3. Select a user from the list 4. Click Save Node stores contact_assignment_mode="user" and assigned_user_id. Created contact assigned to selected user High
AUTO-116 Configure contact assignment to team Logged in as Agent, create_contact node in builder 1. Click node 2. Select "Assign to Team" from assignment dropdown 3. Select a team from the list 4. Click Save Node stores contact_assignment_mode="team" and assigned_team_id. Created contact assigned to team Medium
AUTO-117 Configure contact assignment to conversation agent Logged in as Agent, create_contact node in builder 1. Click node 2. Select "Assign to Conversation Agent" from assignment dropdown 3. Click Save Node stores contact_assignment_mode="conversation_agent". Created contact assigned to whoever is assigned to current conversation Medium
AUTO-118 Create contact node success path Logged in as Agent, flow running with create_contact node 1. Flow receives WhatsApp message with phone number in phone session key 2. Create contact node executes with valid phone and merge_on_duplicate=false 3. New contact created successfully 4. Flow connects success output to next message node Contact created with provided phone, name, email, tags. output_contact_id_key populated with new ID. Flow advances via success path High
AUTO-119 Create contact node missing phone error Logged in as Agent, flow running with create_contact node 1. Flow receives message but phone session key is empty or missing 2. Create contact node executes Node logs warning "create_contact_missing_phone". Flow advances via error path (if connected) High
AUTO-120 Create contact node duplicate phone without merge Logged in as Agent, contact with phone "+1234567890" exists, create_contact node with merge_on_duplicate=false 1. Flow attempts to create contact with existing phone 2. Node executes ValueError raised. Node logs "create_contact_duplicate_phone". Flow advances via error path High
AUTO-121 Create contact node merge on duplicate Logged in as Agent, contact "+1234567890" exists with name "John", merge_on_duplicate=true 1. Flow receives new data: phone="+1234567890", name="Jonathan", tags=["Premium"] 2. Create contact node executes with merge_on_duplicate=true Existing contact updated. Name changed to "Jonathan" (only if contact had no name before, or updated if configured). Tags merged: ["Premium", ...existing tags]. output_contact_id_key set to existing ID. Flow advances via success High
AUTO-122 Create contact node with tags parsing from comma-separated string Logged in as Agent, session contains tags_key="Premium, VIP, Support" 1. Create contact node configured with tags_session_key="tags_key" 2. Node executes Tags parsed as ["Premium", "VIP", "Support"] (whitespace trimmed). Contact created with these tags Medium
AUTO-123 Create contact node with tags parsing from JSON array Logged in as Agent, session contains tags_key='["Early", "Adopter"]' 1. Create contact node with tags_session_key="tags_key" 2. Node executes Tags parsed as ["Early", "Adopter"] from JSON array. Contact created with these tags Medium
AUTO-124 Create contact node with empty tags Logged in as Agent, tags_session_key points to empty string or missing key 1. Create contact node with tags_session_key set 2. Node executes with valid phone Contact created with no tags. Empty tag list handled gracefully Medium
AUTO-125 Create contact node assignment to user succeeds Logged in as Agent, create_contact node with contact_assignment_mode="user", assigned_user_id set 1. Create contact node executes successfully 2. New contact is created Contact created and immediately assigned to specified user. Assignment visible in contact detail view High
AUTO-126 Create contact node assignment to conversation agent Logged in as Agent, conversation assigned to User "Alice", create_contact node with mode="conversation_agent" 1. Create contact node executes in this conversation context 2. New contact created Contact assigned to "Alice" (conversation's assigned user). Assignment copied from conversation context Medium
AUTO-127 Create contact node assignment with invalid UUID Logged in as Agent, create_contact node with contact_assignment_mode="user" but assigned_user_id is invalid format 1. Create contact node executes 2. Invalid UUID cannot be parsed Warning logged "create_contact_assignment_invalid_user_id". Contact created but assignment skipped. Flow continues Medium
AUTO-128 Create contact node assignment mode none Logged in as Agent, contact_assignment_mode="none" 1. Create contact node executes and creates contact Contact created with no assignment. Not assigned to user or team Medium
AUTO-129 Create contact normalizes phone number Logged in as Agent, phone_session_key contains "+1 (234) 567-8900" 1. Create contact node executes with this phone value Phone normalized via conversation_service.normalize_phone(). Variations like spaces, dashes, parentheses standardized Medium
AUTO-130 Create contact skips phone normalization if empty Logged in as Agent, phone_session_key is empty string after strip() 1. Create contact node executes Phone treated as empty. Error path triggered. No contact created Medium
AUTO-131 Create contact name field optional Logged in as Agent, name_session_key set but not populated in session 1. Create contact node with name_session_key but session has no value or empty string 2. Phone is valid 3. Node executes Contact created with name=None (no name set). Email and tags applied if provided. Flow continues on success Medium
AUTO-132 Create contact email field optional Logged in as Agent, email_session_key set but session has no value 1. Create contact node executes with valid phone, no email 2. Node executes Contact created with email=None. Other fields applied. Flow continues Medium
AUTO-133 Create contact exception handling Logged in as Agent, database error or unexpected exception occurs during contact creation 1. Create contact node executes 2. Unhandled exception raised in contact_service.create_contact() Exception logged. Error path triggered. Flow continues on error. User not impacted Medium
AUTO-134 Create contact output variable populated on success Logged in as Agent, output_contact_id_key="new_cid", contact created successfully 1. Create contact node executes 2. Contact created with ID "12345678-abcd-..." 3. Subsequent node uses {{new_cid}} Session variable new_cid set to string UUID of created contact. Subsequent nodes can access via {{new_cid}} High
AUTO-135 Create contact output variable not set on error Logged in as Agent, output_contact_id_key="new_cid", phone is invalid/missing 1. Create contact node executes 2. Error path triggered Session variable new_cid NOT set. Flow advances via error path Medium
AUTO-136 Configure mark_as_lead setting on create_contact node Logged in as Agent, create_contact node in builder 1. Click create_contact node to open config panel 2. Locate "Mark as Lead" checkbox 3. Check the checkbox 4. Click Save Node config persists. mark_as_lead=true stored High
AUTO-137 Create contact with mark_as_lead enabled Logged in as Agent, flow running with create_contact node where mark_as_lead=true 1. Flow receives WhatsApp message with phone number 2. Create contact node executes with valid phone and mark_as_lead=true 3. New contact created successfully Contact created with phone, name, email, tags. Contact automatically marked as lead. Lead record created with source="chatbot". "lead" tag added to contact tags. System logs "create_contact_mark_as_lead" High
AUTO-138 Create contact with mark_as_lead disabled Logged in as Agent, flow running with create_contact node where mark_as_lead=false 1. Flow receives message with valid phone 2. Create contact node executes with mark_as_lead=false or unchecked Contact created without lead record. No "lead" tag automatically added. Contact treated as regular contact High
AUTO-139 Mark as lead on duplicate contact merge Logged in as Agent, existing contact without "lead" tag, create_contact node with merge_on_duplicate=true and mark_as_lead=true 1. Flow attempts to create contact with existing phone 2. Create contact node executes with merge_on_duplicate=true and mark_as_lead=true Existing contact merged with new data. If contact is not already tagged as "lead", "lead" tag added. Lead record created for contact if not already a lead. Flow advances via success High
AUTO-140 Mark as lead on duplicate with existing lead tag Logged in as Agent, existing contact already tagged as "lead", create_contact node with merge_on_duplicate=true and mark_as_lead=true 1. Flow attempts to create contact with existing phone and existing lead tag 2. Create contact node executes Contact updated with merge. No duplicate "lead" tag added (idempotent). Lead record already exists. Flow advances via success Medium
AUTO-141 Flow simulation shows mark_as_lead note Logged in as Agent, flow builder is open with create_contact node configured with mark_as_lead=true 1. Open flow builder with create_contact node 2. Click Simulate or Preview button 3. Observe simulation panel or builder UI showing node details Node configuration description or simulation notes include "; mark as lead" text indicating the option is enabled Medium
AUTO-142 Create contact node with mark_as_lead syncs lead assignees to contact Logged in as Agent, create_contact node with mark_as_lead=true, assigned_user_id="user-123" 1. Flow receives message with valid phone 2. Create contact node executes with mark_as_lead=true and contact assigned to user-123 Contact created and assigned to user-123. Lead record created for contact. Lead's assigned_user_id synchronized to user-123. sync_assignees flag set to true on lead upsert High
AUTO-143 Create contact node with mark_as_lead syncs team assignees to lead Logged in as Agent, create_contact node with mark_as_lead=true, assigned_team_id="team-456" 1. Flow receives message with valid phone 2. Create contact node executes with mark_as_lead=true and contact assigned to team-456 Contact created and assigned to team-456. Lead record created for contact. Lead's assigned_team_id synchronized to team-456. sync_assignees flag set to true on lead upsert High
AUTO-144 Create contact node with mark_as_lead and no assignment Logged in as Agent, create_contact node with mark_as_lead=true, contact_assignment_mode="none" 1. Flow receives message with valid phone 2. Create contact node executes with mark_as_lead=true but no assignment configured Contact created with no assignment. Lead record created. sync_assignees flag set to false. Lead has no assignee sync Medium
AUTO-145 Create contact node mark_as_lead updates existing lead assignees on merge Logged in as Agent, existing contact already a lead assigned to user-A, create_contact node with mark_as_lead=true and assigned_user_id="user-B" 1. Flow attempts to create contact with existing phone 2. Create contact node executes with merge_on_duplicate=true and mark_as_lead=true with new assignment to user-B Contact merged. Lead record exists and updated. Lead's assigned_user_id changed from user-A to user-B via sync_assignees=true. User sees updated assignment in lead detail High

Keyword Rules

IDTest CasePreconditionsStepsExpected ResultPriority
AUTO-025 List all keyword rules Logged in as Agent, org has 4 keyword rules 1. Navigate to /automation?tab=keywords List of 4 rules appears. Each row shows keyword, response type, priority, status toggle High
AUTO-026 Create keyword rule with text response Logged in as Agent, at least one WhatsApp account 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword "hello" 4. Select match type "Exact" 5. Select response type "Text" 6. Enter response text "Hi there!" 7. Click Save Rule created and appears in list. Success toast: "Rule created". Rule ID generated High
AUTO-027 Create keyword rule with multiple keywords Logged in as Agent 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword field: "help, support, assist" 4. Select match type "Exact" 5. Enter text response 6. Click Save Rule created. Keyword field normalized to "help, support, assist". All three keywords trigger this rule High
AUTO-028 Create keyword rule with contains match type Logged in as Agent 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword "promo" 4. Select match type "Contains" 5. Enter response 6. Click Save Rule created with match_type="contains". Any message containing "promo" triggers response High
AUTO-029 Create keyword rule with starts_with match type Logged in as Agent 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword "order" 4. Select match type "Starts With" 5. Enter response 6. Click Save Rule created. Messages starting with "order" trigger rule High
AUTO-030 Create keyword rule with regex match type Logged in as Agent 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword "^(hello\ hi)\\s" 4. Select match type "Regex" 5. Enter response 6. Click Save Rule created with regex pattern. Valid regex accepted. Rule applies regex matching
AUTO-031 Create keyword rule with template response Logged in as Agent, WhatsApp templates exist 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword "invoice" 4. Select response type "WhatsApp Template" 5. Select a template from dropdown 6. Click Save Rule created with response_type="template". Selected template ID stored High
AUTO-032 Create keyword rule with custom template response Logged in as Agent, custom templates exist 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword "receipt" 4. Select response type "My Template" 5. Search and select a custom template 6. Click Save Rule created with response_type="custom_template". Custom template ID stored High
AUTO-033 Set keyword rule priority Logged in as Agent 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword "test" 4. Set priority to 5 5. Enter response 6. Click Save Rule created with priority=5. Rules with higher priority evaluated first Medium
AUTO-034 Edit keyword rule Logged in as Agent, keyword rule "hello" exists 1. Navigate to /automation?tab=keywords 2. Click "hello" rule row 3. Click Edit 4. Change keyword to "hey" 5. Change response text 6. Click Save Rule updated. List shows new keyword. Success toast displayed High
AUTO-035 Delete keyword rule with confirmation Logged in as Agent, rule "hello" exists 1. Navigate to /automation?tab=keywords 2. Click trash icon on "hello" rule 3. Confirmation modal appears 4. Click "Delete" Rule removed from list. Success toast: "Rule deleted" High
AUTO-036 Cancel delete keyword rule Logged in as Agent 1. Navigate to /automation?tab=keywords 2. Click trash icon 3. Confirmation modal appears 4. Click "Cancel" Modal closes. Rule remains in list Medium
AUTO-037 Duplicate keyword validation Logged in as Agent, rule with keyword "hello" exists 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword "hello, hello" 4. Click Save Error shown: "Duplicate keyword found: 'hello'". Save button disabled. Modal stays open Medium
AUTO-038 Empty keyword input validation Logged in as Agent 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Leave keyword empty 4. Click Save Error: "Please add at least one non-empty keyword." Save disabled Medium
AUTO-039 Whitespace-only keyword validation Logged in as Agent 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword " , , " 4. Click Save Error: "Please add at least one non-empty keyword." Save disabled Medium
AUTO-040 Activate/deactivate keyword rule Logged in as Agent, rule "hello" exists as active 1. Navigate to /automation?tab=keywords 2. Click toggle on "hello" rule row Rule status changes to "Inactive". Toggle state reflected. Success toast shown Medium
AUTO-041 Keyword rule empty list state Logged in as Agent, no keyword rules exist 1. Navigate to /automation?tab=keywords Empty state message displayed: "No keyword rules yet. Create your first rule." Create button visible Medium
AUTO-042 Keyword rule for specific WhatsApp account Logged in as Agent, 2 accounts connected 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword "hello" 4. Select first account from dropdown 5. Click Save Rule created with whatsapp_account_id set. Rule only applies to selected account High
AUTO-043 Keyword rule for all WhatsApp accounts Logged in as Agent 1. Navigate to /automation?tab=keywords 2. Click 'New Rule' 3. Enter keyword "hello" 4. Leave account selection empty or select "All Accounts" 5. Click Save Rule created with whatsapp_account_id=null. Rule applies to all accounts High