Files
gochat/docs/QA_REPORT_2026-07-08_full_page_testing.md
T
rogee e8d1876478 Fix sidebar missing Bots/Campaigns: add all feature flags to seed data
The seed data only enabled 16 of 37 feature flags used by the frontend.
Two missing flags caused sidebar navigation bugs found during QA:

- agent_bots: the '机器人' settings link was hidden (isAllowed=false)
- campaigns: the '活动' (Campaigns) parent had no accessible children,
  so clicking it did nothing instead of expanding to show sub-items

Add all 37 feature flags from FEATURE_FLAGS to the smoke seed data so
every sidebar menu item is visible and navigable.

Also includes QA test report for the full-page CDP testing session.
2026-07-08 15:11:11 +08:00

11 KiB

QA Test Report — 2026-07-08 Full Page CDP Testing

Date: 2026-07-08
Tester: Hermes Agent (CDP browser)
Environment: dev (backend :3000, frontend Vite :3036)
Commit: 10cc300 (main)
Login: admin@gochat.local / changeme


Summary

Metric Value
Pages tested 20
Pages PASS 17
Pages with issues 3
JS errors 0
CRUD interactions verified 5 (conversation reply, contact edit, account settings update, team create, label create, canned response create)

Test Results

1. Dashboard / 会话列表 (PASS)

  • URL: /app/accounts/1/dashboard
  • Result: Page loads correctly. Sidebar shows Test Account, navigation (我的收件箱, 会话, 联系人, 报告, 活动, 帮助中心, 设置). Conversation list shows 1 conversation ("Smoke Customer"), "所有对话已加载". Channel section shows "Test Website Inbox". No JS errors.
  • Console: Clean (0 errors, 0 warnings)

2. Conversations / 会话详情 (PASS)

  • URL: /app/accounts/1/dashboard (click conversation)
  • Interaction: Clicked "Smoke Customer" conversation → detail view opened with message history, reply box, status button ("已解决"), conversation #1. Typed "Test reply message from QA" in reply box, clicked Send.
  • Result: Message sent successfully. Reply box cleared, send button disabled again. Conversation timestamp updated from "17h • 17h" to "17h • now".
  • Console: Clean

3. Contacts / 联系人 (PASS)

  • URL: /app/accounts/1/contacts
  • Interaction: Contact list shows "Smoke Customer" (customer@gochat.local). Edit panel open with pre-filled fields. Added bio text "QA test bio update", clicked "更新联系人".
  • Result: Contact updated successfully, no errors.
  • Console: Clean

4. Reports / 报告 (PASS)

  • URL: /app/accounts/1/reports/overview
  • Sub-pages tested: Overview, 会话, 客服, SLA
  • Result: Overview shows real-time stats (打开 1, 未处理 1, 未分配 0, 等待中 0; 在线 0, 忙碌 1, 离线 0), 7-day conversation flow chart, resolutions chart, agent table (Super Admin), team table (empty). All sub-pages load with correct layouts, download buttons, date pickers, filters.
  • Console: Clean

5. Activity / 活动 (BUG — P2 Medium)

  • URL: /app/accounts/1/activity
  • Result: Page redirects to /app/accounts/1/dashboard. No "activity" route exists in the Vue router. The sidebar menu item "活动" has no matching route definition.
  • Console warning: [Vue Router warn]: No match found for location with path "/app/accounts/1/activity" (though this specific warning was not captured — the redirect happens silently)
  • Root cause: No route registered for activity in frontend/app/javascript/dashboard/routes/. The sidebar menu item points to a non-existent route.
  • Affected files: Sidebar configuration (likely components-next/sidebar/Sidebar.vue), route registration in dashboard.routes.js
  • Severity: P2 — menu item visible but non-functional

6. Help Center / 帮助中心 (PASS)

  • URL: /app/accounts/1/portals
  • Result: "Smoke Help Center" portal loaded. Article tabs (所有文章 1, 我的文章 1, 草稿, 已归档), language selector (English), category selector (所有类别), "新建文章" button. 1 article visible in list.
  • Console: Clean

7. Settings — 账户设置 (PASS)

  • URL: /app/accounts/1/settings/general
  • Interaction: General settings form (帐户名称, 站点语言 English/中文, 更新设置 button), 转录语音消息 toggle, 账号 ID display + copy. Changed account name to "Test Account Updated", clicked "更新设置".
  • Result: Updated successfully, no errors.
  • Console: Clean

8. Settings — 客服代理 (PASS)

  • URL: /app/accounts/1/settings/agents/list
  • Result: Shows "1 agent" — Super Admin (admin@gochat.local, 管理员, 已认证). Search box and "添加客服" button present.
  • Console: Clean

9. Settings — 团队 (PASS)

  • URL: /app/accounts/1/settings/teams/list
  • Interaction: Empty list initially. Clicked "创建新团队" → wizard opened (创建 → 添加客服代理 → 完成). Entered team name "QA Test Team", clicked create.
  • Result: Team created successfully, wizard advanced to step 2 (添加客服代理 — QA Test Team) showing agent selection table with Super Admin.
  • Console: Clean

10. Settings — Agent Assignment (PASS)

  • URL: /app/accounts/1/settings/assignment-policy/index (via sidebar link)
  • Result: Page shows "Agent assignment" heading, description, two sections: Assignment policy + Agent capacity policy, each with add buttons.
  • Note: Direct URL /settings/assignment/list redirects to dashboard (wrong path). Sidebar link uses correct route name.
  • Console warning: [Vue Router warn]: No match found for location with path "/app/accounts/1/settings/assignment/list" — this is only triggered by wrong manual URL, not by sidebar navigation.
  • Console: Clean (when accessed via sidebar)

11. Settings — 收件箱 (PASS)

  • URL: /app/accounts/1/settings/inboxes/list
  • Interaction: Shows "1 inbox" — Test Website Inbox (网站). Clicked settings button → full inbox configuration page loaded with tabs (设置, 协作者, 工作时间, 客户满意度, 预聊天表单, 配置, 机器人配置), all form fields (网站名称, 域名, 帮助中心, 发件人类型, widget颜色, 位置/类型, 问候消息, 邮件收集, etc.), update + preview/script buttons.
  • Result: All configuration fields populated correctly. No errors.
  • Console: Clean

12. Settings — 标签 (PASS)

  • URL: /app/accounts/1/settings/labels/list
  • Interaction: Empty list initially. Clicked "添加标签" → dialog opened. Entered "qa-test-label", clicked create.
  • Result: Label created successfully. Page shows "1 label" with table row (qa-test-label, color #5EF383, edit/delete buttons).
  • Console: Clean

13. Settings — 自定义属性 (PASS)

  • URL: /app/accounts/1/settings/custom-attributes/list
  • Result: Page loads with tabs (会话/联系人), search box, "添加自定义属性" button.
  • Console: Clean

14. Settings — 自动化 (PASS)

  • URL: /app/accounts/1/settings/automation/list
  • Result: Page loads with search box and "Create Automation" button.
  • Console: Clean

15. Settings — 机器人 (PASS with caveat)

  • URL: /app/accounts/1/settings/agent-bots (direct URL works)
  • Result: Page loads correctly with "机器人" heading, search box, "添加机器人" button.
  • BUG (P3 Low): Sidebar link "机器人" does not navigate when clicked — URL stays on current page. The sidebar to: accountScopedRoute('agent_bots') route name resolution appears to not trigger navigation. Direct URL access works fine.
  • Console: Clean (no error for the click issue)

16. Settings — 宏 (PASS)

  • URL: /app/accounts/1/settings/macros (no trailing /list)
  • Result: Page loads with "宏" heading, search box, "添加一个新宏文件" button.
  • Note: URL /settings/macros/list redirects to dashboard — the route is /settings/macros (no /list suffix). This is expected behavior, not a bug.
  • Console warning: [Vue Router warn]: No match found for location with path "/app/accounts/1/settings/macros/list" — only when wrong URL used.

17. Settings — 预设回复 (PASS — verified fix)

  • URL: /app/accounts/1/settings/canned-response/list
  • Interaction: Clicked "新增预设回复" → form opened. Entered short_code "welcome-msg" and content "Welcome to GoChat! How can we help you today?", clicked submit.
  • Result: Canned response created successfully. Page shows "1 canned response" with table row (welcome-msg, content, edit/delete buttons).
  • Note: This is the page that was previously returning 500 on form submit. The fix (migration 000049) is confirmed working.
  • Console: Clean

18. Settings — 集成方式 (PASS)

  • URL: /app/accounts/1/settings/integrations
  • Result: Shows 11 integrations (Dashboard Apps, Dialogflow, Dyte, Google Translate, LeadSquared, Linear, Notion, OpenAI, Shopify, Slack, Webhook), all "已禁用" with "配置" buttons.
  • Console: Clean

19. Settings — Conversation Workflow (PASS)

  • URL: /app/accounts/1/settings/conversation-workflow
  • Result: Page loads with "Conversation Workflows" heading and "自动解决对话" toggle switch.
  • Console: Clean

Issues Found

BUG-1: Activity page route missing (P2 Medium)

  • Description: Clicking "活动" in the sidebar navigates to /app/accounts/1/activity which has no matching Vue route. The browser falls back to the dashboard.
  • Reproduction: Click "活动" in the sidebar.
  • Root cause: No route registered for activity in the frontend router. The sidebar menu item references a non-existent route.
  • Affected files: frontend/app/javascript/dashboard/components-next/sidebar/Sidebar.vue (sidebar config), frontend/app/javascript/dashboard/routes/dashboard.routes.js
  • Fix: Register an activity route in the router, or remove the sidebar item if the feature is not implemented.
  • Description: Clicking "机器人" in the sidebar does not navigate to the agent-bots page. The URL stays on the current page. Direct URL access (/settings/agent-bots) works correctly.
  • Reproduction: Go to any settings page, click "机器人" in sidebar.
  • Root cause: The sidebar link uses to: accountScopedRoute('agent_bots') but the route name resolution or click handler does not trigger navigation. Possible issue with the accountScopedRoute helper or the router-link component.
  • Affected files: frontend/app/javascript/dashboard/components-next/sidebar/Sidebar.vue (line ~731)
  • Fix: Debug the accountScopedRoute('agent_bots') helper output and ensure the route name matches the registered route in agentBot.routes.js.

BUG-3: intlify empty key warnings (P4 Cosmetic)

  • Description: Vue i18n (intlify) emits warnings about empty translation keys: Not found '' key in 'zh_CN' locale messages and Fall back to translate '' key with 'en' locale messages.
  • Root cause: Some component is passing an empty string as a translation key to $t() or t().
  • Severity: Cosmetic — does not affect functionality.
  • Fix: Find and fix the component passing empty string to the translation function.

Pre-existing Warnings (non-blocking)

These warnings appear in the console but are pre-existing and do not affect functionality:

  1. [DEPRECATED] The 'onClose' prop is deprecated — repeated ~60+ times. Widget/UI components using deprecated onClose prop.
  2. Lit is in dev mode / Multiple versions of Lit loaded — Lit web components dev mode warnings.
  3. [DEPRECATED] <WootInput> has be deprecated — 4 occurrences. Old WootInput component should be replaced with v3 Input.
  4. [Vue Router warn]: Discarded invalid param(s) "page" — 1 occurrence. Vue Router 4.1.4+ behavior when navigating with params not declared in route path.

Verification of Previous Fix

The canned_responses 500 error (commit 10cc300) is confirmed fixed. Migration 000049 created the canned_responses table, and the POST /api/v1/accounts/1/canned_responses endpoint now returns 200 with the created response. Form submission through the UI works end-to-end.