Analytics
Overview Tab
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-001 | Load Overview tab with default date range (last 7 days) | Logged in as Agent with analytics:read permission, WhatsApp account connected, conversation history exists | 1. Navigate to /analytics 2. Observe Overview tab is active by default 3. Check date range selector shows "7d" preset | Overview tab loads, Hero KPIs widget displays total messages, conversations, and automation stats for last 7 days. Message Volume Chart shows daily breakdown. Conversation Status donut and Automation Wins widget render without errors | High |
| ANA-002 | Load Overview tab with custom date range | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click date range selector 3. Click "Custom" option 4. Enter start date as 2026-01-01 5. Enter end date as 2026-03-31 6. Click Apply | Overview stats refresh to show data only for Jan-Mar 2026. Charts and KPIs update to reflect custom range. Date selector shows custom range label | High |
| ANA-003 | Switch between date presets | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click date range selector 3. Select "Today" preset 4. Observe charts update 5. Click selector again and select "30d" 6. Observe charts update again | Each preset change triggers immediate data refresh. Charts update to reflect selected time period. No loading errors occur | High |
| ANA-004 | Widget visibility toggle persists on Overview tab | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click Settings icon (gear) in Overview tab header 3. Toggle off "Message Volume Chart" widget 4. Close settings panel 5. Refresh page | Message Volume Chart remains hidden after page refresh. Widget Settings panel shows toggle state persists in localStorage. Other widgets remain visible | Medium |
| ANA-005 | Hide all widgets on Overview tab | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click Settings icon 3. Toggle off all 4 widgets (Hero KPIs, Message Volume Chart, Conversation Status, Automation Wins) 4. Close panel | All widgets disappear from Overview tab. Empty state message appears: "No widgets selected. Open Widget Settings to show widgets." | Medium |
| ANA-006 | Re-enable hidden widgets on Overview tab | Logged in as Agent with analytics:read permission, all Overview widgets hidden | 1. Navigate to /analytics 2. Click Settings icon 3. Toggle on "Hero KPIs" widget 4. Toggle on "Message Volume Chart" widget 5. Close panel | Previously hidden widgets reappear in correct positions on Overview tab. Widget Settings panel reflects enabled state with toggle switches | Medium |
| ANA-007 | Overview tab loads with no conversation data | Logged in as Agent with analytics:read permission, no messages sent in date range | 1. Navigate to /analytics 2. Set date range to future dates (e.g., 2026-12-01 to 2026-12-31) 3. Observe Overview tab | Hero KPIs show 0 or "—" for metrics (Total Messages, Active Conversations, Automation Rate). Charts display empty state or flat lines. No error toasts appear | Medium |
| ANA-008 | Permission denied: User without analytics:read cannot access Overview | Logged in as user with no analytics:read permission | 1. Try to navigate to /analytics | Redirected to /dashboard or receive 403 Forbidden error. Toast shows "You don't have permission to view analytics" | High |
Conversations Tab
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-009 | Load Conversations tab with Response Time KPIs | Logged in as Agent with analytics:read permission, conversations with response times logged | 1. Navigate to /analytics 2. Click Conversations tab 3. Set date range to last 30 days | Response Time KPIs widget displays Avg Response Time, 95th Percentile, and SLA Compliance % for selected date range. Conversation Volume Trend chart loads showing status breakdown (open, closed, pending) | High |
| ANA-010 | Agent Performance Table displays all agents | Logged in as Admin with analytics:read permission, 3+ agents in org | 1. Navigate to /analytics 2. Click Conversations tab 3. Scroll to Agent Performance Table 4. Observe table rows | Table shows one row per agent with columns: Agent Name, Total Conversations, Response Time (avg), Conversations Resolved, Resolution Rate (%). Agents sorted by most conversations by default | High |
| ANA-011 | Sort Agent Performance Table by column | Logged in as Agent with analytics:read permission, Agent Performance Table visible | 1. Navigate to /analytics → Conversations tab 2. Click "Response Time (avg)" column header | Agent rows re-sort ascending by response time (lowest first). Click again sorts descending (highest first). Sort indicator arrow appears on column header | Medium |
| ANA-012 | Team Rollup Table shows team-level metrics | Logged in as Agent with analytics:read permission, 2+ teams with assigned agents | 1. Navigate to /analytics 2. Click Conversations tab 3. Scroll to Team Rollup Table | Table displays one row per team with columns: Team Name, Total Conversations, Avg Response Time, Avg Resolution Time. Row totals match sum of agent rows from Agent Performance Table | High |
| ANA-013 | Filter Conversations tab by date range | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click Conversations tab 3. Change date range from "7d" to "30d" 4. Observe tables and charts | Response Time KPIs, SLA Compliance Trend, Conversation Volume Trend, Agent Performance, and Team Rollup all refresh immediately. No page reload required. All data reflects selected 30-day range | High |
| ANA-014 | Resolution Time widget displays histogram | Logged in as Agent with analytics:read permission, resolved conversations exist | 1. Navigate to /analytics 2. Click Conversations tab 3. Scroll to Resolution Time widget | Bar chart renders showing number of conversations resolved in 0-1h, 1-4h, 4-24h, 24h+ buckets. Hover over bar shows exact count | Medium |
| ANA-015 | Conversations tab with no data in date range | Logged in as Agent with analytics:read permission, date range selected with no conversation activity | 1. Navigate to /analytics 2. Click Conversations tab 3. Set date range to future dates | All widgets display empty states or show "—" for metrics. No errors thrown. KPI cards show 0 or blank values | Medium |
| ANA-016 | SLA Compliance Trend line chart updates with date range | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click Conversations tab 3. Set date range to "daily" period for last 7 days 4. Observe SLA Compliance Trend chart | Line chart shows one data point per day with SLA compliance percentage (0–100%). X-axis shows date labels. Trend line color changes based on overall compliance (green >95%, yellow 85–95%, red <85%) | Medium |
Bot Performance (Automation) Tab
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-017 | Load Automation tab with Automation KPIs | Logged in as Agent with analytics:read permission, flows exist and have been executed | 1. Navigate to /analytics 2. Click "Bot Performance" tab 3. Set date range to last 30 days | Automation KPIs widget displays: Total Bot Messages, Flow Completion Rate (%), Total Flows Executed, Automation Win Rate (%). AI vs Human Split donut chart renders showing percentage split | High |
| ANA-018 | Flow Performance Table displays all flows with execution stats | Logged in as Agent with analytics:read permission, 3+ flows with execution history | 1. Navigate to /analytics 2. Click Bot Performance tab 3. Scroll to Flow Performance Table | Table shows one row per flow: Flow Name, Sessions, Completed, Dropped Off, Completion Rate (%). Default sorted by Dropped Off (highest first) to surface problem flows | High |
| ANA-019 | Sort Flow Performance Table by Completion Rate | Logged in as Agent with analytics:read permission, Flow Performance Table visible | 1. Navigate to /analytics 2. Click Bot Performance tab 3. Click "Completion Rate" column header in Flow Performance Table | Flow rows sort by completion rate descending (worst performers first). Sort indicator arrow appears. Click again sorts ascending (best performers first) | Medium |
| ANA-020 | Sort Flow Performance Table alphabetically by flow name | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click Bot Performance tab 3. Click "Flow Name" column header in Flow Performance Table | Flows sort A–Z alphabetically. Click again sorts Z–A. Sort indicator shows direction | Medium |
| ANA-021 | Keyword Rule Leaderboard displays top keywords | Logged in as Agent with analytics:read permission, keyword rules with message matches exist | 1. Navigate to /analytics 2. Click Bot Performance tab 3. Scroll to Keyword Rule Leaderboard | Table shows top 10 keywords by match count: Keyword, Matches, Response Flow, Success Rate (%). Sorted descending by match count | Medium |
| ANA-022 | Nurture Sequence Table shows sequence performance | Logged in as Agent with analytics:read permission, nurture sequences active | 1. Navigate to /analytics 2. Click Bot Performance tab 3. Scroll to Nurture Sequence Table | Table displays: Sequence Name, Total Enrolled, Completed, Dropped, Completion Rate (%). Shows engagement metrics for automated nurture workflows | Medium |
| ANA-023 | Reminders Summary widget shows reminder stats | Logged in as Agent with analytics:read permission, reminders sent in date range | 1. Navigate to /analytics 2. Click Bot Performance tab 3. Scroll to Reminders Summary widget | Widget displays Total Reminders Sent, Sent Rate (%), Completed (contacts who acted after reminder), Completion Rate (%). KPI cards with numeric values | Medium |
| ANA-024 | AI vs Human Split donut shows accurate percentages | Logged in as Agent with analytics:read permission, mixed bot and human messages in history | 1. Navigate to /analytics 2. Click Bot Performance tab 3. Set date range to capture both bot and human traffic 4. Observe donut chart | Donut shows 3 segments: AI (blue), Bot/Flow (green), Human (gray) with percentages adding to 100%. Hover shows exact message counts. Legend identifies each segment | High |
| ANA-025 | Automation tab with no flow executions | Logged in as Agent with analytics:read permission, no flows run in selected date range | 1. Navigate to /analytics 2. Click Bot Performance tab 3. Set date range to future with no activity | Flow Performance Table shows "No flows executed in this period." Keyword Leaderboard empty. Automation KPIs show 0 or "—". No error toast | Medium |
Campaigns Tab
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-026 | Load Campaigns tab with Campaign KPIs | Logged in as Agent with analytics:read permission, broadcast/campaign messages sent | 1. Navigate to /analytics 2. Click Campaigns tab 3. Set date range to last 30 days | Campaign KPIs widget displays: Total Sent, Delivery Rate (%), Read Rate (%), Failed Rate (%). Delivery Funnel visualization shows sent → delivered → read flow with conversion percentages | High |
| ANA-027 | Campaign Performance Table displays all campaigns | Logged in as Agent with analytics:read permission, 3+ campaigns with delivery history | 1. Navigate to /analytics 2. Click Campaigns tab 3. Scroll to Campaign Performance Table | Table shows one row per campaign: Campaign Name, Sent, Delivered, Read, Failed, Delivery Rate (%), Read Rate (%). Campaigns listed in descending order by sent count | High |
| ANA-028 | Delivery Funnel shows conversion percentages | Logged in as Agent with analytics:read permission, campaigns with message stats | 1. Navigate to /analytics 2. Click Campaigns tab 3. Observe Delivery Funnel visualization | Funnel displays 4 stages: Sent (100%), Delivered (e.g., 95%), Read (e.g., 42%), Failed (e.g., 3%). Each stage shows count and percentage of previous stage. Color coding: green for success, red for failed | High |
| ANA-029 | Delivery Trend line chart shows daily delivery performance | Logged in as Agent with analytics:read permission, campaigns sent over 7+ days | 1. Navigate to /analytics 2. Click Campaigns tab 3. Set date range to last 7 days 4. Scroll to Delivery Trend chart | Line chart displays 3 lines: Delivered (green), Read (blue), Failed (red) by date. X-axis shows day labels, Y-axis shows message count. Hover shows exact values | Medium |
| ANA-030 | Template Performance Table ranks templates by engagement | Logged in as Agent with analytics:read permission, 5+ templates used in campaigns | 1. Navigate to /analytics 2. Click Campaigns tab 3. Scroll to Template Performance Table | Table shows: Template Name, Used Count, Delivered, Read, Delivery Rate (%), Read Rate (%). Sorted descending by Read Rate (best performers first) | High |
| ANA-031 | Filter Campaign metrics by date range | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click Campaigns tab 3. Change date range from "7d" to "month" 4. Observe KPIs and tables refresh | All campaign metrics (KPIs, funnel, performance table, trend, template performance) refresh without page reload. Data reflects selected month only | High |
| ANA-032 | Campaigns tab with no campaign activity | Logged in as Agent with analytics:read permission, no campaigns sent in date range | 1. Navigate to /analytics 2. Click Campaigns tab 3. Set date range to future with no activity | Campaign Performance Table shows "No campaigns in this period." Template Performance Table empty. KPIs show 0 or "—". Delivery Funnel shows 0 for all stages | Medium |
| ANA-033 | Sort Campaign Performance Table by Delivery Rate | Logged in as Agent with analytics:read permission, Campaign Performance Table visible | 1. Navigate to /analytics 2. Click Campaigns tab 3. Click "Delivery Rate" column header | Campaigns sort descending by delivery rate (best performers first). Click again sorts ascending. Sort indicator appears on header | Medium |
Contacts Tab
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-034 | Load Contacts tab with Contact KPIs | Logged in as Agent with analytics:read permission, contacts imported/created | 1. Navigate to /analytics 2. Click Contacts tab 3. Set date range to last 30 days | Contact KPIs widget displays: Total Contacts, Active Contacts (opt-in), Opt-out Rate (%), New Contacts (in period). Contact Growth Chart loads showing cumulative contact count over time | High |
| ANA-035 | Contact Growth Chart displays cumulative growth | Logged in as Agent with analytics:read permission, contact history spanning 30+ days | 1. Navigate to /analytics 2. Click Contacts tab 3. Set date range to last 30 days 4. Scroll to Contact Growth Chart | Line chart shows cumulative contact count ascending over time. X-axis shows dates, Y-axis shows total contact count. No data gaps unless no activity on specific days | High |
| ANA-036 | Opt-in/Opt-out Trend chart shows daily changes | Logged in as Agent with analytics:read permission, contacts with opt-in/opt-out history | 1. Navigate to /analytics 2. Click Contacts tab 3. Set date range to 30 days 4. Scroll to Opt-in/Opt-out Trend | Stacked bar chart shows daily opt-in count (green) and opt-out count (red). X-axis shows dates. Tooltip shows exact counts per day. Net growth calculated | Medium |
| ANA-037 | Contact Source Breakdown donut shows channel distribution | Logged in as Agent with analytics:read permission, contacts from multiple sources (manual, import, form, API) | 1. Navigate to /analytics 2. Click Contacts tab 3. Scroll to Contact Source Breakdown | Donut chart segments show: Manual Add, CSV Import, Web Form, API, WhatsApp, etc. with percentages. Hover shows exact contact count per source. Legend identifies sources | High |
| ANA-038 | Tag Distribution widget shows most-used tags | Logged in as Agent with analytics:read permission, contacts tagged with multiple tags | 1. Navigate to /analytics 2. Click Contacts tab 3. Scroll to Tag Distribution widget | Bar chart or list displays top 10 tags by contact count: Tag Name, Contact Count. Sorted descending by usage. Shows tag adoption across database | Medium |
| ANA-039 | Assignment Coverage shows agent-to-contact ratio | Logged in as Agent with analytics:read permission, agents assigned to contacts | 1. Navigate to /analytics 2. Click Contacts tab 3. Scroll to Assignment Coverage widget | Widget displays: Assigned Contacts, Unassigned Contacts, Assignment Coverage (%). Pie chart shows ratio. Identifies coverage gaps if >20% unassigned | Medium |
| ANA-040 | Filter Contacts metrics by date range | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click Contacts tab 3. Change date range to "month" 4. Observe KPIs and charts refresh | Contact KPIs, Growth Chart, Opt-in/Opt-out Trend, and other widgets refresh without reload. Data reflects new date range | High |
| ANA-041 | Contacts tab with no contacts in org | Logged in as Agent with analytics:read permission, zero contacts created | 1. Navigate to /analytics 2. Click Contacts tab | Contact KPIs show 0 for all metrics. Growth Chart flat line at 0. Other charts display empty states. Message appears: "No contacts yet. Import or create contacts to get started." | Medium |
| ANA-042 | Export Contacts analytics (if feature exists) | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click Contacts tab 3. Look for Export button | If export button exists: clicking exports data as CSV or PDF. File downloads with timestamp in filename (e.g., contacts_analytics_2026-04-17.csv). Success toast shown | Low |
Date Range & Refresh Controls
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-043 | Refresh button updates all analytics data | Logged in as Agent with analytics:read permission, on any analytics tab | 1. Navigate to /analytics 2. Wait 30 seconds 3. Click Refresh button (circular arrow icon) if visible | All widgets and charts reload immediately. Loading spinner appears briefly. Data refreshes to latest values. Timestamp shows refresh time | Medium |
| ANA-044 | URL query parameter persists selected tab | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics?tab=campaigns 2. Refresh page | Campaigns tab remains selected after refresh. URL query parameter ?tab=campaigns persists. Browser back/forward works correctly | Medium |
| ANA-045 | URL query parameter persists date range | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics?start=2026-01-01&end=2026-03-31 2. Refresh page | Custom date range persists in URL and UI. Charts show data for specified range. URL parameters remain intact | Low |
| ANA-046 | Preset date change updates all tabs | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Go to Overview tab 3. Change date range to "30d" 4. Click to Conversations tab | Date range "30d" is applied to Conversations tab as well. All tabs share the same date range state. Change in one tab applies globally | High |
| ANA-047 | Manual date picker validates end date after start date | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click date range selector 3. Select Custom 4. Enter start: 2026-03-01 5. Enter end: 2026-02-01 (before start) 6. Click Apply | Error message appears: "End date must be after start date." Apply button remains disabled. Date range not applied | Medium |
| ANA-048 | Manual date picker limits maximum range to 365 days | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click date range selector 3. Select Custom 4. Enter start: 2025-01-01 5. Enter end: 2026-04-17 (>365 days) 6. Click Apply | Warning or info message appears: "Date range is limited to 365 days." Dates auto-adjust to fit limit, or Apply button disables. Final range ≤365 days | Low |
Permission & Multi-Tenancy
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-049 | Agent cannot access analytics if no analytics:read permission | Logged in as user with role lacking analytics:read permission | 1. Try to navigate to /analytics | Page is blocked. Toast or error message: "You don't have permission to view analytics." Redirect to dashboard or home | High |
| ANA-050 | Admin can access all agent/team performance data | Logged in as Admin with analytics:read permission | 1. Navigate to /analytics 2. Click Conversations tab 3. Observe Agent Performance Table and Team Rollup Table | Admin sees all agents and teams in organization. No filtering or redaction. Tables display all rows without access restrictions | High |
| ANA-051 | Only org_id data appears in analytics | Logged in as Agent in Org A, WhatsApp account linked | 1. Navigate to /analytics 2. Check all visible data (messages, campaigns, contacts, conversations) | All metrics reflect only data from Org A. No data leakage from Org B or other orgs. API filters by org_id automatically | High |
| ANA-052 | Agent from Org A cannot see Org B analytics | Logged in as Agent in Org A, Org B exists with different admin | 1. Attempt to access /analytics?org_id= |
Either: (a) URL org_id param is ignored and own org_id used, or (b) 403 Forbidden if different org specified. No Org B data visible | High |
API & Data Validation
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-053 | Overview endpoint returns OverviewStats schema | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Open browser DevTools Network tab 3. Check GET /analytics/overview request | Response status 200. Response body includes: total_messages_sent, total_conversations, automation_rate, active_conversations fields. Schema matches OverviewStats model | Medium |
| ANA-054 | Message volume endpoint accepts period parameter | Logged in as Agent with analytics:read permission | 1. Open browser console or DevTools 2. Call API with ?period=weekly 3. Call again with ?period=monthly | Both requests return 200. Data aggregated by week/month. Invalid period like ?period=yearly returns 400 Bad Request | Medium |
| ANA-055 | Campaign stats endpoint returns zero fields if no campaigns | Logged in as Agent with analytics:read permission, no campaigns sent | 1. Navigate to /analytics 2. Click Campaigns tab 3. Observe CampaignStats response | Response returns CampaignStats with total_sent: 0, total_delivered: 0, total_read: 0, total_failed: 0, no error. Null fields are omitted or set to 0 | Medium |
| ANA-056 | Agent performance endpoint filters by org_id | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click Conversations tab 3. Observe Agent Performance Table data | Agent Performance Table shows only agents in current org_id. No agents from other orgs visible. Query parameters include org_id filter | High |
| ANA-057 | Team performance endpoint returns team rollup data | Logged in as Agent with analytics:read permission, 2+ teams | 1. Navigate to /analytics 2. Click Conversations tab 3. Scroll to Team Rollup Table | Team Rollup Table displays one row per team. API /analytics/teams returns TeamPerformanceResponse with teams array. Each team record includes team_name, total_conversations, avg_response_time | High |
| ANA-058 | Response times endpoint returns trend data | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Click Conversations tab 3. Observe SLA Compliance Trend chart | SLA Compliance Trend chart renders daily/hourly compliance %. API /analytics/response-times returns ResponseTimeTrendResponse with data points. No errors in console | Medium |
Error Handling & Edge Cases
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-059 | Analytics page handles API timeout gracefully | Logged in as Agent with analytics:read permission, API latency >10s | 1. Navigate to /analytics 2. Observe loading state 3. Wait for timeout | Loading spinner shows for up to 30 seconds. If API fails: error toast appears "Failed to load analytics data. Please try again." Retry button appears. Page remains interactive | Medium |
| ANA-060 | Missing WhatsApp account shows empty analytics | Logged in as Agent with analytics:read permission, no WhatsApp account configured | 1. Navigate to /analytics 2. Observe all tabs | All metrics show 0 or "—". Empty state message: "No WhatsApp account connected. Connect an account in Settings to start collecting analytics." Link to Settings provided | Medium |
| ANA-061 | Widget Settings persists across logout/login | Logged in as Agent, widgetized analytics settings saved | 1. Navigate to /analytics 2. Hide a widget via Settings 3. Log out 4. Log in as same user 5. Go to /analytics | Same widget remains hidden. Widget visibility preferences persisted in localStorage and restored on login | Low |
| ANA-062 | Analytics handles special characters in data (campaign names, flow names) | Logged in as Agent with analytics:read permission, campaign/flow with special chars (emoji, quotes, unicode) | 1. Navigate to /analytics 2. Click Campaigns or Bot Performance tab 3. Observe tables with special character names | Names display correctly without encoding errors. Donut charts, tables, and charts render without breaking. No console errors | Low |
| ANA-063 | Large dataset (10,000+ contacts, 1000+ conversations) loads without freezing | Logged in as Agent in large org with 10K+ contacts, 1K+ conversations | 1. Navigate to /analytics 2. Click Contacts tab 3. Observe Contact Growth Chart 4. Click Conversations tab 5. Observe Agent Performance Table | Charts and tables render responsively within 3 seconds. No page freeze or white screen. Lazy loading or pagination used for large tables. Console shows no memory warnings | Low |
| ANA-064 | Analytics respects timezone settings (if implemented) | Logged in as Agent with custom timezone set | 1. Navigate to /analytics 2. Observe date labels on charts 3. Check KPI timestamps | Dates and times on charts match user's timezone setting (not server timezone). Daily/weekly boundaries align with user's midnight/week start. If no timezone setting exists: UTC displayed consistently | Low |
Widget Settings Panel
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-065 | Widget Settings panel opens from gear icon | Logged in as Agent with analytics:read permission, on Overview tab | 1. Navigate to /analytics 2. Look for Settings (gear) icon in tab header 3. Click it | Widget Settings panel slides in from right side. Panel title: "Widget Settings". List of all 4 Overview widgets with toggle switches. Close button (X) in top-right | High |
| ANA-066 | Widget Settings panel shows all tab widgets | Logged in as Agent, on Conversations tab | 1. Navigate to /analytics 2. Click Conversations tab 3. Click Settings icon | Panel lists all 6 Conversations widgets: Response Time KPIs, SLA Compliance Trend, Conversation Volume Trend, Agent Performance Table, Team Rollup Table, Resolution Time. Each has toggle switch | High |
| ANA-067 | Widget toggle persists per tab independently | Logged in as Agent with analytics:read permission | 1. Navigate to /analytics 2. Go to Overview tab 3. Hide "Message Volume Chart" 4. Go to Campaigns tab 5. Hide "Delivery Trend" 6. Return to Overview tab | Message Volume Chart remains hidden on Overview. Go to Campaigns: Message Volume Chart is visible there (independent setting). Settings do not cross-pollinate between tabs | Medium |
| ANA-068 | Minimum one widget must stay visible (if enforced) | Logged in as Agent, on Overview tab with 1 widget enabled | 1. Click Settings icon 2. Attempt to toggle off the last remaining visible widget | Toggle disabled/greyed out OR warning message: "At least one widget must be visible." Last widget cannot be hidden | Low |
| ANA-069 | Widget Settings panel closes on Escape key | Logged in as Agent with Widget Settings panel open | 1. Press Escape key | Panel slides out to the right. Backdrop fades. Focus returns to main tab content | Low |
| ANA-070 | Click outside Widget Settings panel closes it | Logged in as Agent with Widget Settings panel open | 1. Click on backdrop (grey area outside panel) | Panel closes. Backdrop disappears. | Medium |
Real-time Updates (if WebSocket supported)
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-071 | New conversation appears in metrics without refresh | Logged in as Agent on Analytics > Conversations tab, colleague sends/receives message in separate window | 1. Observe Conversation Volume metric 2. Have colleague send message to org's WhatsApp number 3. Wait 2-3 seconds without refreshing | Conversation count updates in real-time. Agent Performance table updates if applicable. No manual refresh needed. Timestamp shows update occurred | Low |
| ANA-072 | Campaign delivery metric updates live | Logged in as Agent on Analytics > Campaigns tab, campaign sending in background | 1. Observe Delivery Rate KPI 2. Trigger campaign send (or observe ongoing campaign) 3. Watch metrics | Delivery Rate, Sent count, Delivered count update in real-time as messages are sent/delivered. Charts refresh without page reload | Low |
Performance & Load Time
| ID | Test Case | Preconditions | Steps | Expected Result | Priority |
|---|---|---|---|---|---|
| ANA-073 | Analytics page loads in <3 seconds on fast network | Logged in as Agent with analytics:read permission, 4G/LTE connection or better | 1. Open DevTools Network tab 2. Navigate to /analytics 3. Observe Time to Interactive (TTI) | Page interactive within 3 seconds. All tabs render within 5 seconds total. Network waterfall shows no slow requests. Hero KPIs visible within 2 seconds | High |
| ANA-074 | Analytics loads gracefully on slow 3G network | Logged in as Agent, browsing on 3G connection | 1. Open DevTools → Network tab → set throttling to Slow 3G 2. Navigate to /analytics | Page begins rendering within 5 seconds. KPI cards visible first (high priority). Charts load after (lower priority). No white screen or stalled loading | Medium |