112
Total
50
High
53
Medium
9
Low

List Conversations

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-001 Load conversation list on Chat view mount Logged in as Agent, at least one conversation exists, WebSocket initialized 1. Navigate to /chat 2. Wait for initial load 3. Observe conversation list Conversation list displays with all conversations; each row shows contact name, phone, last message, and unread count badge High
CONV-002 Filter conversations by status "open" Logged in as Agent, conversations with multiple statuses exist 1. Click "Open" filter button 2. Observe list update Only conversations with status "open" display; total count updates High
CONV-003 Filter conversations by status "pending" Logged in as Agent, conversations with multiple statuses exist 1. Click "Pending" filter button 2. Observe list update Only conversations with status "pending" display High
CONV-004 Filter conversations by status "resolved" Logged in as Agent, conversations with multiple statuses exist 1. Click "Resolved" filter button 2. Observe list update Only conversations with status "resolved" display High
CONV-005 Filter conversations assigned to current user Logged in as Agent, conversations assigned to self and others exist 1. Click "Mine" filter button 2. Observe list update Only conversations assigned to logged-in user display High
CONV-006 Filter conversations unassigned Logged in as Agent, unassigned conversations exist 1. Click "Unassigned" filter button 2. Observe list update Only conversations with no assigned_user_id and no assigned_team_id display High
CONV-007 View all conversations filter Logged in as Agent, filter applied 1. Click "All" filter button 2. Observe list update All conversations in organization display; all statuses shown High
CONV-008 Search conversations by contact name Logged in as Agent, conversation with contact name "John Smith" exists 1. Type "john" in search box 2. Observe list update Only conversations where contact name contains "john" (case-insensitive) display High
CONV-009 Search conversations by contact phone Logged in as Agent, conversation with phone "+1234567890" exists 1. Type "1234567890" in search box 2. Observe list update Only conversations where contact phone contains search term display High
CONV-010 Clear search query Logged in as Agent, search active with filtered results 1. Clear search box text 2. Observe list update All conversations (respecting other active filters) display again High
CONV-011 Pagination: navigate to page 2 Logged in as Agent, more than 50 conversations exist 1. Scroll to bottom of list 2. Click page 2 or next button 3. Observe new set of conversations Page 2 conversations load; total count remains accurate Medium
CONV-012 Pagination: page size limit enforced Logged in as Agent 1. Open browser dev tools 2. Attempt to fetch /conversations with page_size=200 API returns error or caps page_size at 100; UI default is 50 Low
CONV-013 Conversation list empty state Logged in as Agent, no conversations exist in organization 1. Navigate to /chat 2. Observe list area Empty state message displays (e.g., "No conversations yet") Medium
CONV-014 Filter by account (WhatsApp account dropdown) Logged in as Agent, multiple WhatsApp accounts connected, conversations exist for each 1. Click account dropdown in conversation list header 2. Select specific account 3. Observe list update Only conversations linked to selected WhatsApp account display Medium
CONV-015 Account filter resets on "All" selection Logged in as Agent, account filter active 1. Click account filter dropdown 2. Select "All" 3. Observe list update All conversations display regardless of account; filter badge clears Medium

Create Conversation

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-016 Open new conversation dialog Logged in as Agent, at least one WhatsApp account active 1. Click "+" or "New Chat" button in conversation list header 2. Observe dialog open Modal opens with fields: Phone, Name (optional), WhatsApp Account dropdown High
CONV-017 Create conversation with new contact via phone Logged in as Agent, one active WhatsApp account exists 1. Click "New Chat" button 2. Enter phone "+1234567890" 3. Leave Name empty 4. Account auto-selected 5. Click "Create Conversation" 6. Observe result New conversation created and navigated to; contact created with phone only; conversation appears in list with "unknown" or blank name High
CONV-018 Create conversation with new contact name and phone Logged in as Agent, one active WhatsApp account exists 1. Click "New Chat" button 2. Enter phone "+1234567890" 3. Enter name "John Smith" 4. Click "Create Conversation" New conversation and contact created; contact displays name "John Smith"; conversation appears in list High
CONV-019 Create conversation: contact picker from existing contacts Logged in as Agent, existing contacts "Alice" and "Bob" exist 1. Click "New Chat" button 2. Click contact picker / search contacts field 3. Type "Alice" 4. Click "Alice" from dropdown 5. Click "Create Conversation" Conversation opens with Alice; her existing phone and name pre-filled; no duplicate contact created High
CONV-020 Create conversation: WhatsApp account required Logged in as Agent, no WhatsApp accounts exist or all inactive 1. Click "New Chat" button 2. Attempt to create conversation Error message displays: "Please connect at least one WhatsApp account first" or "WhatsApp account not found or inactive" High
CONV-021 Create conversation: invalid phone format Logged in as Agent, one active WhatsApp account exists 1. Click "New Chat" button 2. Enter phone "invalid-phone" 3. Attempt to create conversation Error message displays: "Invalid phone number format"; conversation not created Medium
CONV-022 Create conversation: phone number required Logged in as Agent, one active WhatsApp account exists 1. Click "New Chat" button 2. Leave phone empty 3. Click "Create Conversation" Form validation error shows "Phone is required"; dialog remains open Medium
CONV-023 Create conversation: duplicate contact phone Logged in as Agent, contact with phone "+1234567890" already exists 1. Click "New Chat" button 2. Enter phone "+1234567890" 3. Enter name "Different Name" 4. Click "Create Conversation" Conversation created linked to existing contact; existing contact's data unchanged (name not updated); no duplicate contact Medium
CONV-024 Create conversation: account selection single account Logged in as Agent, only one WhatsApp account active 1. Click "New Chat" button 2. Observe account field Account field auto-selected to the single active account or disabled; user cannot change Medium
CONV-025 Create conversation: account selection multiple accounts Logged in as Agent, three WhatsApp accounts active 1. Click "New Chat" button 2. Click account dropdown 3. Select second account Dropdown shows all active accounts; selection updates form Medium
CONV-026 Create conversation: inactive account not available Logged in as Agent, one active account and one inactive account exist 1. Click "New Chat" button 2. Open account dropdown Inactive account does not appear in dropdown Low
CONV-027 Create conversation dialog closes on success Logged in as Agent, new conversation created successfully After clicking "Create Conversation" and conversation loads Dialog closes automatically; user navigated to new conversation's detail view High
CONV-028 Create conversation dialog cancel button Logged in as Agent, "New Chat" dialog open with partial form data 1. Click "Cancel" or X button 2. Observe dialog close Dialog closes without creating conversation; form data discarded Medium

View Conversation Detail & Messages

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-029 Click conversation in list opens detail Logged in as Agent, conversation exists 1. In conversation list, click conversation row for "John" 2. Observe detail panel load Right panel (ConversationPanel) opens; header shows "John" and phone; messages load; contact info panel visible High
CONV-030 Conversation detail displays last message preview Logged in as Agent, conversation with messages exists In conversation list, observe last_message text in row tooltip or preview Last message text, sender initials, and timestamp display in conversation row Medium
CONV-031 URL route updates on conversation selection Logged in as Agent, conversation selected 1. Click conversation in list 2. Observe URL URL changes to /chat/{conversation_id} High
CONV-032 Back navigation restores conversation list Logged in as Agent, conversation detail open 1. Click browser back button or click conversation list area 2. Observe navigation List view returns; active conversation selection clears or persists depending on route design Medium
CONV-033 Load messages on conversation open Logged in as Agent, conversation with 10+ messages exists 1. Click conversation in list 2. Wait for messages panel to load Messages load in scrollable area (page 1, up to 50 messages); auto-scroll to bottom High
CONV-034 Messages display in chronological order Logged in as Agent, conversation with messages from different timestamps View messages in conversation detail Messages display oldest first (top) to newest (bottom) High
CONV-035 Message bubble shows sender, content, timestamp Logged in as Agent, message visible in detail View individual message bubble Bubble displays: sender name or "You", message content, timestamp (e.g., "2:34 PM"), direction indicator (inbound/outbound) High
CONV-036 Pagination: load more messages on scroll up Logged in as Agent, conversation with 100+ messages exists, page 1 visible 1. Scroll to top of messages 2. Observe pagination Previous page of messages loads above current; total count updates Medium
CONV-037 Empty messages state Logged in as Agent, conversation with no messages View conversation detail Message area shows placeholder text: "No messages yet. Send the first message!" Medium
CONV-038 Mark conversation as read on open Logged in as Agent, conversation with unread_count > 0 1. Click conversation with badge showing unread count 2. Observe detail load unread_count resets to 0; badge disappears from list row; WebSocket broadcasts update to other users High
CONV-039 Contact info panel loads contact details Logged in as Agent, conversation with contact "John Smith" open 1. View right panel (ContactPanel) 2. Observe contact info Panel displays: contact name, phone, email (if set), tags, assigned user/team, created_at High
CONV-040 Contact panel shows other conversations with same contact Logged in as Agent, contact "John" has 3 conversations total, one open In contact panel, under "Other conversations" All other conversations with this contact display as clickable links; can switch between them Medium
CONV-041 Click other conversation in contact panel switches conversation Logged in as Agent, contact panel showing other conversations 1. In contact panel, click another conversation 2. Observe main panel update Active conversation switches to selected one; messages load; URL updates Medium

Conversation Header & Status

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-042 Conversation header displays contact name and phone Logged in as Agent, conversation with contact "John +1234567890" open View conversation header (ConversationHeader) Header displays: contact name "John", phone formatted as "+1234567890" High
CONV-043 Conversation status badge displays current status Logged in as Agent, conversation with status "open" View conversation header status indicator Badge displays: "Open" (or appropriate status text: Pending, Resolved, Snoozed) High
CONV-044 Status icon reflects conversation state Logged in as Agent, conversation with status "resolved" View status icon in header Icon displays checkmark or resolved indicator Low
CONV-045 Conversation header menu button opens action menu Logged in as Agent, conversation open 1. Click "⋮" (more vertical) button in header 2. Observe menu Dropdown menu opens with actions: Assign, Snooze, Mark as Resolved, etc. High
CONV-046 Window expires timestamp displays when active Logged in as Agent, conversation with window_expires_at in future View conversation header "Message window active" indicator or timer displays; shows expiration time Medium
CONV-047 Window expires indication when expired Logged in as Agent, conversation with window_expires_at in past View conversation header "Message window expired" indicator displays; informs user template/window messages may not be available Medium

Assign Conversation

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-048 Open assign menu in conversation header Logged in as Agent, conversation open 1. Click header menu ("⋮") 2. Click "Assign" or similar option 3. Observe dialog/dropdown Assign modal or dropdown opens showing team and user options High
CONV-049 Assign conversation to team Logged in as Agent, at least one team exists, conversation unassigned or assigned to user 1. Open assign menu 2. Click "Teams" or team section 3. Select "Sales Team" 4. Confirm Conversation updated; assigned_team_id set to "Sales Team"; header shows "Assigned to Sales Team"; list updates High
CONV-050 Assign conversation to specific user Logged in as Agent, multiple active users exist, conversation open 1. Open assign menu 2. Click "Agents" or user section 3. Select "Alice Smith" 4. Confirm Conversation updated; assigned_user_id set to Alice's ID; header shows "Assigned to Alice Smith"; unread badge clears for other users High
CONV-051 Self-assign conversation (assign to me) Logged in as Agent "John", conversation unassigned or assigned to another user 1. Click "Assign to Me" button or select self from assign menu 2. Confirm Conversation assigned to John; header shows "Assigned to You"; list highlights as "Mine" High
CONV-052 Unassign conversation Logged in as Agent, conversation assigned to a user 1. Open assign menu 2. Select "Unassign" or deselect current user 3. Confirm Conversation unassigned; assigned_user_id and assigned_team_id cleared; conversation appears in "Unassigned" filter High
CONV-053 Cannot assign to inactive user Logged in as Agent, user "Bob" marked inactive 1. Open assign menu 2. Search or filter for users 3. Observe list Inactive user "Bob" does not appear in assignable users list; only active users shown Medium
CONV-054 Assign menu shows team and user names Logged in as Agent 1. Open assign menu 2. Observe dropdown/modal All active teams and users display with their names; UI clearly distinguishes teams from users Medium
CONV-055 Assign action broadcasts WebSocket update Logged in as Agent, second agent in same org viewing same conversation 1. First agent assigns conversation to second agent 2. Second agent observes their view Conversation instantly updates for second agent; assignment reflects without page refresh via WebSocket High
CONV-056 Assign clears previous assignment Logged in as Agent, conversation assigned to "Alice" 1. Open assign menu 2. Assign to "Bob" 3. Confirm Alice's assignment removed; conversation now assigned only to Bob Medium

Snooze Conversation

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-057 Open snooze menu in conversation header Logged in as Agent, conversation open 1. Click header menu ("⋮") 2. Click "Snooze" option 3. Observe snooze time options Snooze menu or modal opens with time options (e.g., 1 hour, 4 hours, Tomorrow, Next Monday) High
CONV-058 Snooze conversation for 1 hour Logged in as Agent, conversation open 1. Open snooze menu 2. Click "1 hour" 3. Observe conversation status Conversation status changes to "snoozed"; header shows "Snoozed until [time]"; conversation moves out of active view or marked differently High
CONV-059 Snooze conversation for 4 hours Logged in as Agent, conversation open 1. Open snooze menu 2. Click "4 hours" 3. Observe conversation Conversation marked snoozed; snooze expiry timestamp set to 4 hours from now High
CONV-060 Snooze conversation until tomorrow Logged in as Agent, conversation open 1. Open snooze menu 2. Click "Tomorrow" 3. Observe conversation Conversation marked snoozed; expiry time set to start of next business day or 9 AM tomorrow Medium
CONV-061 Custom snooze time via datetime picker Logged in as Agent, snooze menu open 1. Click "Custom" or calendar icon 2. Select date and time 3. Click "Snooze" Conversation snoozed until selected datetime; header displays snooze expiry time Medium
CONV-062 Snoozed conversations hidden from list Logged in as Agent, conversation snoozed, filters set to "Open" or "Mine" View conversation list Snoozed conversation does not appear in list unless viewing "All" or filtering by "Snoozed" status High
CONV-063 Unsnoozed conversation reappears in list Logged in as Agent, conversation snoozed, snooze time expired 1. Wait for snooze time to expire (or manually mark unsnoozed via API) 2. View conversation list Conversation reappears in "Open" or appropriate status filter Medium
CONV-064 Snooze action broadcasts WebSocket update Logged in as Agent, second agent viewing same conversation list 1. First agent snoozes a conversation 2. Second agent observes list Conversation instantly disappears from second agent's view (or marked snoozed) via WebSocket update High

Mark as Resolved

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-065 Mark conversation as resolved Logged in as Agent, conversation with status "open" 1. Click header menu ("⋮") 2. Click "Mark as Resolved" 3. Confirm Conversation status changes to "resolved"; header updates with resolved badge; conversation moves to "Resolved" filter view High
CONV-066 Resolved conversation disappears from "Open" filter Logged in as Agent, conversation marked resolved 1. Filter list to "Open" 2. Observe previous conversation Resolved conversation no longer appears in "Open" filter; appears in "Resolved" filter High
CONV-067 Resolved conversation shows in "Resolved" filter Logged in as Agent, multiple resolved conversations exist 1. Click "Resolved" filter 2. Observe list All resolved conversations display with resolved badge Medium
CONV-068 Resolved status persists on page reload Logged in as Agent, conversation marked resolved 1. Mark conversation as resolved 2. Refresh page (F5) 3. Navigate back to conversation Conversation status still shows "resolved" after reload; data persisted Medium
CONV-069 Mark as resolved action broadcasts update Logged in as Agent, second agent viewing conversation 1. First agent marks conversation resolved 2. Second agent observes Conversation status instantly updates to "resolved" for second agent via WebSocket High
CONV-070 Reopen resolved conversation Logged in as Agent, conversation marked resolved 1. Click header menu 2. Click "Reopen" or "Mark as Open" 3. Confirm Conversation status changes back to "open"; header updates; conversation reappears in appropriate filters Medium

Send Text Message

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-071 Open message composer at bottom of conversation Logged in as Agent, conversation open View bottom of ConversationPanel Message input field (MessageComposer) visible with text box and "Send" button High
CONV-072 Type message in composer Logged in as Agent, message composer visible 1. Click text input field 2. Type "Hello, this is a test message" 3. Observe text Text appears in input field; message length indicator may show character count High
CONV-073 Send text message successfully Logged in as Agent, message typed in composer, WhatsApp account active 1. Type message "Hi John" 2. Click "Send" button 3. Observe message area Message appears in chat as outbound bubble from user; status shows "sent"; input field clears; message broadcasted via WebSocket to other agents High
CONV-074 Outbound message displays sender info Logged in as Agent "Alice", message just sent View outbound message bubble Bubble shows: "You" or "Alice", message content, timestamp, sent status (checkmark or "sent") High
CONV-075 Send message clears composer field Logged in as Agent, message sent After clicking "Send" Composer text field clears and is ready for next message High
CONV-076 Send empty message validation Logged in as Agent, message composer visible 1. Leave text field empty 2. Click "Send" Error or disabled state; message not sent; validation message shows "Message cannot be empty" Medium
CONV-077 Send message while WhatsApp account inactive Logged in as Agent, message typed, WhatsApp account becomes inactive 1. Type message 2. Deactivate WhatsApp account via settings 3. Click "Send" Error message displays: "WhatsApp account not active"; message not sent; composer retains text Medium
CONV-078 Send message contact not found error Logged in as Agent, conversation contact deleted externally 1. Type message 2. Click "Send" 3. Observe error Error displays: "Contact not found"; message not sent Low
CONV-079 Message status progression: sending → sent → delivered Logged in as Agent, message sent Watch message bubble after sending Message shows: "sending" (spinner), then "sent" (checkmark), then "delivered" (double checkmark) as WhatsApp updates status High
CONV-080 Message timestamp displays in local timezone Logged in as Agent in PST, message sent at 2 PM PST View message timestamp Timestamp displays "2:00 PM" or similar in user's local timezone Medium
CONV-081 Long message text wraps in composer Logged in as Agent, message > 100 characters 1. Type long message in composer 2. Observe text field Text wraps to multiple lines in composer; input expands or scrolls Low
CONV-082 Message delivery failure shows error Logged in as Agent, invalid phone or WhatsApp API failure 1. Send message 2. Observe message status Message shows "failed" status with red icon; error tooltip available (e.g., "Invalid phone format") Medium

Send Template Message

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-083 Open template selector in composer Logged in as Agent, conversation open, templates created 1. Click template button or "Templates" tab in composer 2. Observe dropdown/modal Template selection modal or dropdown opens; list of available templates displays Medium
CONV-084 Select and send template message Logged in as Agent, template "Welcome" exists with variables {name} 1. Open template selector 2. Select "Welcome" template 3. Fill variable "name" with "John" 4. Click "Send" Template sends with variables filled; message appears in chat as "Welcome, John"; status shows "sent" Medium
CONV-085 Template message shows in conversation Logged in as Agent, template sent to contact View message in conversation detail Template message displays as outbound bubble; content shows filled variables; type indicates "template" Medium
CONV-086 Template variable validation required Logged in as Agent, template with required variable {email} 1. Open template selector 2. Select template with required var 3. Leave var empty 4. Attempt to send Error message shows: "Field {email} is required"; send button disabled Medium
CONV-087 Template send fails if window expired Logged in as Agent, conversation window_expires_at in past 1. Attempt to send template message 2. Observe error Error displays: "Message window expired. Template messages cannot be sent outside the message window." Medium

Send Media Message

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-088 Open media upload in composer Logged in as Agent, conversation open 1. Click attachment/media button in composer 2. Observe file dialog File picker opens; user can select image, video, or document Medium
CONV-089 Send image message Logged in as Agent, image file (JPEG) selected 1. Click attachment button 2. Select image.jpg (100 KB) 3. Click "Send" Image uploads and sends; appears in conversation as media bubble with thumbnail; status shows "sent" Medium
CONV-090 Send video message Logged in as Agent, video file (MP4) selected 1. Click attachment button 2. Select video.mp4 (5 MB) 3. Click "Send" Video uploads; appears in conversation as playable media bubble; status shows "sent" Medium
CONV-091 Send document message Logged in as Agent, document file (PDF) selected 1. Click attachment button 2. Select document.pdf 3. Click "Send" Document uploads; appears as downloadable file bubble in conversation; status shows "sent" Medium
CONV-092 Media upload shows progress bar Logged in as Agent, large file (10 MB) uploading 1. Select large file 2. Observe composer area Progress bar appears during upload; shows percentage (0-100%); can cancel upload Medium
CONV-093 Media file size validation Logged in as Agent, file > 100 MB selected 1. Attempt to upload oversized file 2. Observe error Error message displays: "File size exceeds maximum (100 MB)"; upload blocked Medium
CONV-094 Media file type validation Logged in as Agent, executable file (.exe) selected 1. Attempt to upload .exe file 2. Observe error Error message displays: "File type not allowed"; upload rejected Low

Reply to Message

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-095 Reply to message option in bubble context menu Logged in as Agent, message visible in conversation 1. Right-click or long-press on message bubble 2. Observe context menu Menu appears with "Reply" option; other options may include "Copy", "Delete" Medium
CONV-096 Click reply option shows reply preview Logged in as Agent, message context menu open 1. Click "Reply" option 2. Observe composer Composer shows a quoted/replied message preview above text input (e.g., "John: Hello" in gray box) Medium
CONV-097 Send reply with quoted message Logged in as Agent, replying to message "Hello" from John 1. Click Reply on John's message 2. Type "Hi back!" 3. Click Send Message sent with reply_to reference; appears in conversation with quoted message visible; WhatsApp shows as reply thread Medium
CONV-098 Clear reply and send regular message Logged in as Agent, reply preview active 1. Click X on reply preview 2. Type new message 3. Send Reply context cleared; message sent as regular (non-reply) message Medium

Contact Info Panel

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-099 Contact panel displays contact information Logged in as Agent, conversation with contact "John Smith" open View right panel (ContactPanel) Panel displays: name "John Smith", phone "+1234567890", email (if set), tags, assigned user/team, created_at timestamp High
CONV-100 Contact panel shows all tags for contact Logged in as Agent, contact with tags ["VIP", "Sales"] View contact panel tags section Tags display as badges: "VIP" and "Sales" Medium
CONV-101 Contact metadata displays in contact panel Logged in as Agent, contact with custom metadata {industry: "Tech"} View contact panel metadata section Custom fields display (e.g., "Industry: Tech") Low
CONV-102 Click contact name in panel opens contact edit Logged in as Agent, contact panel visible 1. Click contact name "John Smith" or edit icon 2. Observe navigation Contact detail page opens (/contacts/{id}); contact info form displays Medium
CONV-103 Contact assigned user shows in panel Logged in as Agent, contact assigned to "Alice" View contact panel assignment section Assigned user displays as "Alice" or with avatar Medium
CONV-104 Contact assigned team shows in panel Logged in as Agent, contact assigned to team "Sales" View contact panel assignment section Assigned team displays as "Sales" Medium
CONV-105 Other conversations section in contact panel Logged in as Agent, contact with 3 total conversations, one active View "Other Conversations" in contact panel Lists other 2 conversations with this contact; shows last message preview and timestamp High
CONV-106 Click other conversation switches active conversation Logged in as Agent, contact panel showing other conversations 1. Click another conversation link in panel 2. Observe main panel Active conversation switches; messages load; URL updates to new conversation_id High
CONV-107 Contact audit log in panel Logged in as Agent, contact panel visible Scroll contact panel to view audit section Audit log shows historical changes (e.g., "Name updated", "Tag added"), who made changes, and timestamps Low

Contact Reminders

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-108 Display contact reminders in panel Logged in as Agent, contact with 2 reminders set View contact panel reminders section List shows reminders with due date, note, and status (pending/completed) Medium
CONV-109 Open reminder creation form Logged in as Agent, contact panel visible 1. Click "Add Reminder" or "+" in reminders section 2. Observe form Form appears with fields: due_at (datetime), note (text area); can set reminder for any future date Medium
CONV-110 Create reminder for contact Logged in as Agent, reminder form visible 1. Set due_at to tomorrow at 10 AM 2. Enter note "Follow up on proposal" 3. Click "Save" Reminder created; appears in reminders list; notification may trigger at due time Medium
CONV-111 Reminder due notification Logged in as Agent, reminder due_at time reached At reminder due time Browser notification or UI indicator shows "Reminder: Follow up on proposal for John"; sound/badge alert Low

Real-time Updates (WebSocket)

IDTest CasePreconditionsStepsExpected ResultPriority
CONV-112 Receive inbound message in real-time Logged in as Agent, conversation open in chat view, external inbound message sent Contact sends message to WhatsApp number 1. Agent observes chat view Message appears in conversation instantly without page refresh; WebSocket broadcasts NEW_MESSAGE event; message bubble shows contact's text High