QA test plan covering real-time messaging, notifications, file uploads, search, link previews, suggestions, infinite scroll, empty states, and error handling.
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| RT-M-001 | Send message in a room | Logged in; member of a room | 1. Open room 2. Type message 3. Send | Message appears in room instantly for all members | P0 |
| RT-M-002 | Receive message in real-time | Logged in; in a room; another user sends message | 1. Stay in room view | Incoming message appears without page refresh | P0 |
| RT-M-003 | Send direct message | Logged in; DM permissions allow | 1. Open DM with another user 2. Type message 3. Send | Message delivered to recipient in real-time | P0 |
| RT-M-004 | Receive DM in real-time | Logged in; another user sends DM | 1. Have DM conversation open | Message appears without refresh; notification if not in conversation | P0 |
| RT-M-005 | Typing indicator shown | Logged in; in conversation | 1. Other user starts typing | Typing indicator visible (e.g., “User is typing…”) | P1 |
| RT-M-006 | Typing indicator disappears | Logged in; in conversation | 1. Other user stops typing | Typing indicator disappears after timeout | P2 |
| RT-M-007 | Presence — online status | Logged in; contacts online | 1. View contact list or conversation | Online users show active/online indicator | P1 |
| RT-M-008 | Presence — offline status | Logged in; contact goes offline | 1. View contact list | User’s status changes to offline/last seen | P1 |
| RT-M-009 | Message persistence after reconnect | Logged in; messages sent while offline | 1. Disconnect from network 2. Reconnect | Missed messages load upon reconnection | P1 |
| RT-M-010 | Send message in DM when recipient has DMs restricted | Logged in; recipient restricts DMs to followers only; not a follower | 1. Attempt to send DM | Error: cannot message this user; DM blocked | P1 |
Route: /notifications
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| RT-N-001 | Display notifications | Logged in; notifications exist | 1. Navigate to /notifications | List of notifications displayed with type, content, timestamp | P0 |
| RT-N-002 | Mark single notification as read | Logged in; unread notification exists | 1. Click on a notification | Notification marked as read; visual indicator changes | P0 |
| RT-N-003 | Mark all notifications as read | Logged in; multiple unread notifications | 1. Click “Mark All as Read” | All notifications marked as read; badges cleared | P0 |
| RT-N-004 | Delete a notification | Logged in | 1. Click delete on a notification 2. Confirm | Notification removed from list | P1 |
| RT-N-005 | Unread badge count | Logged in; unread notifications exist | 1. View navigation bar | Badge shows correct unread count | P0 |
| RT-N-006 | Badge updates in real-time | Logged in; new notification arrives | 1. Stay on any page | Badge count increments without page refresh | P0 |
| RT-N-007 | Empty notifications state | Logged in; no notifications | 1. Navigate to /notifications | ”No notifications” empty state displayed | P1 |
| RT-N-008 | Notification links to source | Logged in; notification for a comment | 1. Click notification | Navigated to the relevant content (post, message, etc.) | P1 |
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| RT-FU-001 | Upload document within size limit | Logged in | 1. Select a file under 50MB 2. Upload | File uploaded successfully; preview or link shown | P0 |
| RT-FU-002 | Reject document exceeding 50MB | Logged in | 1. Select a file over 50MB 2. Attempt upload | Error: file exceeds maximum size of 50MB | P0 |
| RT-FU-003 | Reject unsupported file type | Logged in | 1. Select a disallowed file type (e.g., .exe) 2. Attempt upload | Error: file type not supported | P0 |
| RT-FU-004 | Upload multiple product images | Logged in as business user; creating/editing product | 1. Select multiple image files 2. Upload | All images uploaded; displayed in product gallery | P0 |
| RT-FU-005 | Upload chat attachment | Logged in; in a conversation | 1. Click attachment icon 2. Select file 3. Send | File sent as message attachment; downloadable by recipient | P1 |
| RT-FU-006 | Upload room media | Logged in; in a room | 1. Attach media file 2. Send | Media shared in room; viewable by all members | P1 |
| RT-FU-007 | Upload progress indicator | Logged in | 1. Upload a larger file | Progress bar or spinner shown during upload | P2 |
| RT-FU-008 | Cancel upload in progress | Logged in | 1. Start uploading a file 2. Click cancel | Upload cancelled; no file saved | P2 |
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| RT-SR-001 | Search for users | Logged in | 1. Open search 2. Enter username or name | Matching users displayed in results | P0 |
| RT-SR-002 | Search for products | Logged in | 1. Open search 2. Enter product keyword | Matching products displayed | P0 |
| RT-SR-003 | Search for jobs | Logged in | 1. Open search 2. Enter job keyword | Matching jobs displayed | P1 |
| RT-SR-004 | Admin search users | Logged in as admin | 1. Navigate to /admin/users 2. Search by name or email | Matching users shown in admin context | P0 |
| RT-SR-005 | Search with empty query | Logged in | 1. Submit search with empty input | No results or prompt to enter a search term | P2 |
| RT-SR-006 | Search result navigation | Logged in | 1. Search and get results 2. Click a result | Navigated to the correct detail page | P1 |
Endpoint: /api/link-preview
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| RT-LP-001 | Generate link preview for valid URL | Logged in; in a message context | 1. Paste a URL with Open Graph metadata | Link preview card shows title, description, and image | P1 |
| RT-LP-002 | Handle URL without metadata | Logged in | 1. Paste a URL with no OG tags | Basic preview with URL displayed; no error | P2 |
| RT-LP-003 | Handle invalid URL | Logged in | 1. Paste an invalid URL | No preview generated; no error thrown | P2 |
| RT-LP-004 | Handle unreachable URL | Logged in | 1. Paste a URL to a non-existent domain | Graceful failure; URL displayed as plain text | P2 |
Endpoint: /api/suggestions
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| RT-SG-001 | Display suggested users | Logged in; not following many users | 1. View suggestions section (feed sidebar or discover) | Relevant user suggestions displayed | P1 |
| RT-SG-002 | Display suggested products | Logged in | 1. View marketplace or feed | Suggested products shown based on interests | P1 |
| RT-SG-003 | Display suggested rooms | Logged in | 1. View rooms or discover section | Suggested rooms displayed | P2 |
| RT-SG-004 | Follow from suggestion | Logged in | 1. Click “Follow” on a suggested user | User followed; suggestion removed or updated | P1 |
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| RT-IS-001 | Feed infinite scroll | Logged in; following users with many posts | 1. Scroll to bottom of feed | Next batch of posts loads automatically | P0 |
| RT-IS-002 | Marketplace infinite scroll | Logged in; many products | 1. Scroll to bottom of marketplace grid | Next batch of products loads | P0 |
| RT-IS-003 | Scroll loading indicator | Logged in | 1. Scroll to trigger next page load | Loading spinner or skeleton shown while fetching | P1 |
| RT-IS-004 | End of content reached | Logged in; scrolled to last page | 1. Scroll past all content | ”No more content” indicator or scroll stops | P1 |
| RT-IS-005 | Scroll position preserved on back navigation | Logged in; scrolled down in feed | 1. Click on a post 2. Navigate back | Feed scroll position restored | P2 |
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| RT-ES-001 | No search results | Logged in | 1. Search for non-matching term | ”No results found” with optional suggestions | P1 |
| RT-ES-002 | No posts in feed | Logged in; not following anyone | 1. View feed | Empty state with prompt to follow users or explore | P1 |
| RT-ES-003 | No messages | Logged in; no conversations | 1. Navigate to messages | Empty state: “No messages yet” with prompt to start one | P1 |
| RT-ES-004 | No notifications | Logged in; no notifications | 1. Navigate to /notifications | Empty state: “No notifications” | P1 |
| RT-ES-005 | No products in marketplace | Logged in; no approved products | 1. Navigate to /marketplace | Empty state displayed | P2 |
| RT-ES-006 | No jobs available | Logged in; no approved jobs | 1. Navigate to /jobs | Empty state: “No jobs available” | P2 |
| ID | Description | Preconditions | Steps | Expected Result | Priority |
|---|
| RT-EH-001 | Network error during API call | Logged in; network disconnected | 1. Perform any action requiring API call | Error message: “Network error” or retry prompt; no crash | P0 |
| RT-EH-002 | 401 Unauthorized — expired session | Session token expired | 1. Perform any authenticated action | Redirected to login page; session cleared | P0 |
| RT-EH-003 | 404 Not Found — invalid route | Logged in | 1. Navigate to /nonexistent-page | Custom 404 page displayed with navigation options | P0 |
| RT-EH-004 | 404 Not Found — deleted resource | Logged in; resource previously existed | 1. Navigate to URL of deleted post/product | ”Not found” or “This content has been removed” message | P1 |
| RT-EH-005 | Expired session automatic refresh | Session approaching expiry | 1. Continue using the app | Token silently refreshed; no interruption to user | P0 |
| RT-EH-006 | Server error (500) | Logged in; server returns 500 | 1. Trigger server error | User-friendly error message; option to retry | P1 |
| RT-EH-007 | Rate limiting | Logged in; rapid repeated requests | 1. Send many requests in quick succession | Rate limit error shown; requests throttled; no crash | P2 |
| RT-EH-008 | Offline mode indicator | Network disconnected | 1. Lose network connection while using app | Offline banner or indicator shown to user | P1 |