依照 📖 平台操作說明 逐項實測每個功能的操作流程、輸入與輸出
🎯 測試目的(依操作說明):依說明「點導覽列進入 首頁」— 頁面能正常載入
GET /HTTP 200,頁面含「胖爹英文」,大小 20.0 KB
🎯 測試目的(依操作說明):依說明「點導覽列進入 Nibbles 短影音」— 頁面能正常載入
GET /nibblesHTTP 200,頁面含「Nibbles」,大小 8.8 KB
🎯 測試目的(依操作說明):依說明「點導覽列進入 影音圖書館」— 頁面能正常載入
GET /libraryHTTP 200,頁面含「圖書館」,大小 9.5 KB
🎯 測試目的(依操作說明):依說明「點導覽列進入 Pro 教學專區」— 頁面能正常載入
GET /proHTTP 200,頁面含「Pro」,大小 11.2 KB
🎯 測試目的(依操作說明):依說明「點導覽列進入 學習專區」— 頁面能正常載入
GET /studyHTTP 200,頁面含「學習專區」,大小 25.3 KB
🎯 測試目的(依操作說明):依說明「點導覽列進入 英霸對戰」— 頁面能正常載入
GET /battleHTTP 200,頁面含「對戰」,大小 13.5 KB
🎯 測試目的(依操作說明):依說明「點導覽列進入 AI 學習工具」— 頁面能正常載入
GET /aiHTTP 200,頁面含「AI」,大小 12.8 KB
🎯 測試目的(依操作說明):依說明「點導覽列進入 教師管理平台」— 頁面能正常載入
GET /teacherHTTP 200,頁面含「教師」,大小 10.5 KB
🎯 測試目的(依操作說明):依說明「點導覽列進入 社群互動」— 頁面能正常載入
GET /communityHTTP 200,頁面含「社群」,大小 10.6 KB
🎯 測試目的(依操作說明):依說明「點導覽列進入 合作與公益」— 頁面能正常載入
GET /partnersHTTP 200,頁面含「合作」,大小 12.6 KB
🎯 測試目的(依操作說明):依說明「點導覽列進入 小斗英 APP」— 頁面能正常載入
GET /appHTTP 200,頁面含「小斗英」,大小 11.6 KB
🎯 測試目的(依操作說明):依說明「點導覽列進入 平台操作說明」— 頁面能正常載入
GET /guideHTTP 200,頁面含「操作說明」,大小 132.1 KB
🎯 測試目的(依操作說明):品牌 Logo 正常提供
GET /static/logo.pngHTTP 200, Content-Type=image/png
🎯 測試目的(依操作說明):學習專區「vocab」模組資料檔可載入且為合法 JSON
GET /static/study/vocab.jsonHTTP 200,JSON 頂層鍵: levels(270 KB)
🎯 測試目的(依操作說明):學習專區「grammar」模組資料檔可載入且為合法 JSON
GET /static/study/grammar.jsonHTTP 200,JSON 頂層鍵: junior, senior(53 KB)
🎯 測試目的(依操作說明):學習專區「exam」模組資料檔可載入且為合法 JSON
GET /static/study/exam.jsonHTTP 200,JSON 頂層鍵: gsat, cloze, reading, translate(25 KB)
🎯 測試目的(依操作說明):學習專區「listening」模組資料檔可載入且為合法 JSON
GET /static/study/listening.jsonHTTP 200,JSON 頂層鍵: dictation, cloze, mcq, sound, stress(38 KB)
🎯 測試目的(依操作說明):學習專區「games」模組資料檔可載入且為合法 JSON
GET /static/study/games.jsonHTTP 200,JSON 頂層鍵: sentence, cloze, daily(8 KB)
🎯 測試目的(依操作說明):學習專區「essay_library」模組資料檔可載入且為合法 JSON
GET /static/study/essay_library.jsonHTTP 200,JSON 頂層鍵: pastPrompts, patterns(10 KB)
🎯 測試目的(依操作說明):說明「首頁 → 即時統計」— 提供會員/影音/互動數
GET /api/stats{"videos":19,"likes":26726,"views":114863,"members":28,"donation_total":4100}
🎯 測試目的(依操作說明):說明「Nibbles → 瀏覽短影音牆」
GET /api/videosHTTP 200,共 19 部影音
🎯 測試目的(依操作說明):社群與合作頁的公開資料
GET /api/stars|announcements|partners|schools/api/stars ✓ | /api/announcements ✓ | /api/partners ✓ | /api/schools ✓
🎯 測試目的(依操作說明):說明「社群 → 課程許願池」
GET /api/wishesHTTP 200,共 10 個願望
🎯 測試目的(依操作說明):說明「Pro 專區 → 瀏覽課程」— 5 大分類
GET /api/pro/coursesHTTP 200,共 18 門課程
🎯 測試目的(依操作說明):說明「Pro 專區 → 預約直播」場次清單
GET /api/pro/liveHTTP 200,共 4 場直播
🎯 測試目的(依操作說明):說明「對戰 → 週排行榜」
GET /api/battle/leaderboard{"top":[{"user_id":23,"display_name":"QA測試學生","avatar_emoji":"🦊","total_score":768,"games":2,"wins":0},{"user_id":19,"display_name":"QA測試學生","avatar_emoji":"🤓","total_score":668,"games":2,"wins":0},{"user_id":26,"display_name":"QA測試學生","avatar_emoji":"🙂","total_score":468,"games":2,"wins":0},{"us …(截斷)
🎯 測試目的(依操作說明):安全性 — 說明指出上傳需登入
POST /api/videos(無登入)HTTP 401 ✓ 正確拒絕:「請先登入會員才能發表影音喔!」
🎯 測試目的(依操作說明):說明「會員系統 → 註冊」:Email 驗證碼 → 手機簡訊驗證碼 → 填居住地/學區 → 註冊成功自動登入
send-code(email) → verify-code → send-code(sms) → verify-code → POST /api/auth/register {email:qa_stu_bnjste@test.tupalish.com, phone, city:臺北市, district:大安區, school_district}歡迎加入 Tupalish,QA測試學生!🍊(Email+簡訊雙驗證 ✓,手機 0948399907,已取得 Cookie)
🎯 測試目的(依操作說明):註冊安全:必須先通過 Email + 簡訊 OTP 驗證
POST /api/auth/register(未先 verify-code)HTTP 400 ✓「請先完成 Email 驗證」
🎯 測試目的(依操作說明):註冊驗證:新必填欄位
POST /api/auth/register(缺 phone)HTTP 400 ✓「請輸入有效的手機號碼(09 開頭 10 碼)」
🎯 測試目的(依操作說明):OTP 安全:驗證碼錯誤回 400 並累計嘗試次數
POST /api/auth/verify-code(錯誤碼)HTTP 400 ✓「驗證碼錯誤(還可試 4 次)」
🎯 測試目的(依操作說明):OTP 防濫發:冷卻 60 秒
POST /api/auth/send-code ×2(同目標)HTTP 429 ✓「請稍候 60 秒後再重新發送」
🎯 測試目的(依操作說明):註冊驗證:密碼至少 6 碼
POST /api/auth/register {password:"123"}HTTP 400 ✓「密碼至少需 6 個字元」
🎯 測試目的(依操作說明):註冊驗證:同 Email 不能註冊兩次
POST /api/auth/register(同 qa_stu_bnjste@test.tupalish.com)HTTP 409 ✓「這個 Email 已經註冊過了,請直接登入」
🎯 測試目的(依操作說明):註冊驗證:同手機不能註冊兩次
POST /api/auth/register(同學生手機)HTTP 409 ✓「這個手機號碼已經被註冊過了」
🎯 測試目的(依操作說明):說明「會員系統 → 登出」
POST /api/auth/logout登出成功,/api/auth/me 已無使用者 ✓
🎯 測試目的(依操作說明):說明「會員系統 → 登入」:Email+密碼取回身分
POST /api/auth/login {email:qa_stu_bnjste@test.tupalish.com}登入成功:歡迎回來,QA測試學生!🍊(token ✓,/me 確認身分=QA測試學生)
🎯 測試目的(依操作說明):登入後同步身分/積分
GET /api/auth/me{"id":29,"username":"qa_stu_bnjste_ewtp","display_name":"QA測試學生","email":"qa_stu_bnjste@test.tupalish.com","role":"member","avatar_emoji":"😄","points":0}
🎯 測試目的(依操作說明):登入安全驗證
POST /api/auth/login(錯誤密碼)HTTP 401 ✓「Email 或密碼錯誤」
🎯 測試目的(依操作說明):為教師平台與好友 PK 測試準備帳號
註冊 qa_tea_bnjste@test.tupalish.com 與 qa_frd_bnjste@test.tupalish.com老師 ✓(OTP 雙驗證)好友 ✓(OTP 雙驗證)
🎯 測試目的(依操作說明):說明「常見問題 → AI 每日額度」
GET /api/ai/quota(登入){"tier":"free","used":0,"limit":40,"chatUsed":0,"chatLimit":20}
🎯 測試目的(依操作說明):說明「Nibbles → 上傳影音發表」:選檔案+標題+分類 → 送審 +20 積分
POST /api/videos multipart {title, category, file:test.mp4}id=22,影音上傳成功!已送交碩士級小編審核,通過後將公開發表。(+20 積分 🎉)
🎯 測試目的(依操作說明):說明「Nibbles → 按讚與留言」
POST /api/videos/22/like{"likes":1}
🎯 測試目的(依操作說明):說明「Nibbles → 按讚與留言」:輸入文字送出
POST /api/videos/22/comments {content}留言成功,該影音現有留言可讀回 ✓
🎯 測試目的(依操作說明):說明「Pro → 角色切換器」:免付費體驗 6 種身分
POST /api/pro/demo-role {role:"pro"}demo_role=pro 生效,tier 查詢回傳 pro ✓
🎯 測試目的(依操作說明):說明「定價 → 方案」:個人/校園/補教/廠商四類方案
GET /api/pricing共 10 個方案 ✓ Pro 月繳 NT$699 ✓
🎯 測試目的(依操作說明):說明「定價 → 升級 Pro」:選方案 → 產生綠界 AioCheckOut 表單(信用卡定期定額)
POST /api/pay/checkout {plan_code:"pro_monthly"}(登入)訂單 TPMSOCIU019AZ9ZR ✓ 導向綠界測試環境,CheckMacValue ✓ 定期定額(月扣 699)✓
🎯 測試目的(依操作說明):校園/補教授權金採議價,提示來信洽談
POST /api/pay/checkout {plan_code:"school_license"}HTTP 400 ✓「此方案為 B2B 授權議價方案,請來信 hello@tupalish.com 洽談」
🎯 測試目的(依操作說明):說明「後台 → 定價/訂單 → 手動開通」:B2B 或客服開通,tier 即時生效
POST /api/admin/orders/:id/mark-paid(管理員)訂單 TPMSOCIU019AZ9ZR 開通 ✓ tier=pro,效期至 2026-09-11 ✓
🎯 測試目的(依操作說明):說明「Pro → 瀏覽課程」:點課程卡看課綱
GET /api/pro/courses/1{"course":{"id":1,"title":"自然發音 Phonics","description":"26字母+44音素完整攻略,從零開始建立發音基礎","pro_category":"basics","emoji":"🔤","lesson_count":12,"is_pro":1,"teacher_name":"胖爹","enrolled":1280,"rating":4.9,"sort_order":1,"created_at":"2026-07-20 03:14:53","ai_generated":0},"lessons":[{"id":1,"course_id":1,"seq":1,"title":"字母 A-G 的自然發音規則","duration_min":22,"is_free_preview":1,"ai_content":null,"added_month" …(截斷)
🎯 測試目的(依操作說明):說明「Pro → 預約直播」:選場次按預約
POST /api/pro/live/1/book首次:📅 預約成功!「會考英語考前總複習 LIVE」開播前將提醒您(2026-07-25 20:00);重複預約 → HTTP 409 ✓
🎯 測試目的(依操作說明):說明「Pro → AI 作業批改」:提交作文 → AI 秒批(分數/優點/修正)
POST /api/pro/homework {hw_type:"essay", title, content:英文短文}AI 初批完成,作業清單 1 筆,狀態=ai_reviewed
🎯 測試目的(依操作說明):說明「AI 工具 → 寓言故事」:輸入主題字 → 英文寓言+中譯
POST /api/ai/fable {words:"honesty, fox", level:"beginner"}「The Honest Fox」story 109 字 + 中譯 ✓ moral: Honesty brings friendship and happiness.
🎯 測試目的(依操作說明):說明「AI 工具 → 心智圖」:輸入中心單字 → 相關字網絡
POST /api/ai/mindmap {topic:"travel"}center=travel,6 個分支:Transportation / Accommodation / Directions & Navigation / Sightseeing & Activities / Booking & Documents / Emergencies & Health
🎯 測試目的(依操作說明):說明「AI 工具 → AI 對話」:英文聊天 + 文法建議
POST /api/ai/chat {messages:[{user:"I goed to school yesterday."}]}Great! You can say, "I went to school yesterday and met my friend." Who did you meet? 💡 過去式要用不規則動詞:go → went;meet → met。也可以說 "I saw my friend" 做替換。
🎯 測試目的(依操作說明):說明「AI 工具 → 中翻英」步驟 2:AI 給中文句
POST /api/ai/translate-question {level:"easy"}出題:「我每天坐公車上學,大約需要三十分鐘。」hint: bus / go to school / about 30 minutes
🎯 測試目的(依操作說明):說明「AI 工具 → 中翻英」步驟 3-4:送出翻譯 → 批改
POST /api/ai/translate {chinese:"我每天走路上學。", answer:"I walk to school every day."}score=100,feedback: 非常好!你的翻譯完全正確且自然。句子用簡單現在式表達習慣動作(I walk to school every day.)很恰當,語序和用詞(walk to school、every day)都是地道的英語。small note:頻率副詞 every day 放在句末或句首都可以(例如:Every da …(截斷)
🎯 測試目的(依操作說明):說明「教師 → 建立班級」:輸入班名/機構 → 得專屬代碼
POST /api/teacher/classes {name:"QA自動測試班", org_name:"QA補習班"}班級 id=8,代碼=8VABXW ✓
🎯 測試目的(依操作說明):說明「學習專區 → 加入班級」:輸入 6 碼代碼
POST /api/class/join {code:"${code}"}加入「QA自動測試班_bnjste」(QA補習班)✓
🎯 測試目的(依操作說明):加入班級驗證
POST /api/class/join {code:"ZZZZZZ"}HTTP 404 ✓「找不到此班級代碼,請確認後再試」
🎯 測試目的(依操作說明):說明「加入班級 → 進度自動上傳(只增不減)」
POST /api/study/progress {learned_words:35, grammar_done:4, exam_done:2, points:120, streak:3}進度上傳 ✓(並驗證重傳較小值)
🎯 測試目的(依操作說明):說明「教師 → 查看全班」:單字/文法/試題/積分/AI用量/最後活動
GET /api/teacher/classes/${id}/students學生「QA測試學生」單字=35 文法=4 試題=2 積分=undefined ✓ 進度未被小值覆蓋
🎯 測試目的(依操作說明):說明「教師 → 學生詳情」:14 天 AI 圖/功能統計/測驗紀錄
GET /api/teacher/students/:sid/detail詳情鍵: student, aiDaily, quiz, progress
🎯 測試目的(依操作說明):說明「AI作文 → AI 智慧出題」:選程度/題型 → 題目+引導問題+提示
POST /api/essay/prompt {level:"junior", type:"guided", topic:"校園"}「Plan a Green Week at School」引導問題 3 題、建議單字 8 個 ✓
🎯 測試目的(依操作說明):說明「AI作文 → 深度批改」:四項評分+逐句診斷+3 升級句+全文修改;登入自動存歷程
POST /api/essay/grade {title, content:含錯誤的英文作文, level:"junior"}得分 6/20(待加強),rubric 4 項 ✓,診斷 7 個問題(分類:主詞動詞一致/句構/時態),升級句 3 ✓,已存歷程 essay_id=15
🎯 測試目的(依操作說明):說明「AI作文 → AI 範文」:同題範文+結構解析+好句
POST /api/essay/model {title, prompt_text, level}範文 1600 bytes,鍵: essay, translation, structure, highlights
🎯 測試目的(依操作說明):說明「AI作文 → 我的歷程」:趨勢/四項能力/常犯錯誤
GET /api/essay/history + /api/essay/stats歷程 1 筆;stats 鍵: trend, radar, weaknesses, total
🎯 測試目的(依操作說明):說明「歷程 → 點紀錄回顧完整報告」
GET /api/essay/${id}essay_id=15 讀取成功,含 feedback ✓
🎯 測試目的(依操作說明):說明「教師 → 派作文作業」:題目+字數+截止日 → 學生端出現
POST /api/teacher/assignments {class_id, title, prompt_text, level, min_words:60}作業 id=8 已派發,學生端可見「QA作業:My Weekend」✓
🎯 測試目的(依操作說明):說明「AI作文 → 班級作業」:開始寫 → 送批改自動繳交
POST /api/essay/grade {assignment_id:${aid}}繳交成功,得分 9/20,essay_id=16
🎯 測試目的(依操作說明):說明「教師 → 派作業」步驟 4-5:看繳交表 → 查看作文 → 留評語
GET /api/teacher/assignments/${aid} + POST /api/teacher/essays/:eid/comment繳交表 ✓ 學生得分=9;評語已寫入且學生端可見 ✓
🎯 測試目的(依操作說明):說明「學習專區 → AI 造句」:目標字+句子 → 批改
POST /api/study/sentence {word:"improve", sentence:"I want to improve my English skill everyday."}correct=false,feedback: 注意 'English skill' 建議改成複數 'English skills' 或直接說 'my English';表示「每天」要寫成兩個字 'every day',而不是形容詞 'everyday'。
🎯 測試目的(依操作說明):說明「對戰 → 單人練習」:AI 即時出 5 題 → 作答 → 得分
POST /api/battle/create {mode:"solo"} → POST /api/battle/:id/submit {answers, ms}5 題出題 ✓(答案已隱藏)交卷:答對 0 題,得分 0
🎯 測試目的(依操作說明):說明「對戰 → 好友 PK」:A 建房拿 6 碼 → B 加入 → 雙方交卷 → 判定勝負
A: create pvp → B: join {code} → 雙方 submit → GET state房號 BTS4IS ✓ 加入 ✓ 雙方交卷 ✓ 結果:QA測試學生 283 vs QA測試好友 380,winner_id=31
🎯 測試目的(依操作說明):對戰防呆驗證
建房者自己 join 同房號HTTP 400 ✓「不能加入自己開的房間啦!把房號傳給朋友吧 😄」
🎯 測試目的(依操作說明):說明「對戰 → 週排行榜 & 戰績」
GET /api/battle/history對戰歷史 2 筆 ✓,最新一場:pvp 得分 283,答對 2/5
🎯 測試目的(依操作說明):說明「社群 → 許願池」:許願 → 別人投票
POST /api/wishes {title} → POST /api/wishes/:id/vote願望 id=11 建立 ✓ 投票後票數=1 ✓
🎯 測試目的(依操作說明):說明「合作公益 → 小額捐款」:金額+留言
POST /api/donations {donor_name, amount:100, message}感謝您的愛心!捐款收據將寄至您的Email,100%用於偏鄉英語教育。
🎯 測試目的(依操作說明):輸入驗證:金額必須 > 0
POST /api/donations {amount:0}HTTP 400 ✓「請輸入捐款金額」
🎯 測試目的(依操作說明):後台安全:所有 /api/admin/* 需管理員身分
GET /api/admin/overview(無 Cookie)HTTP 403 ✓「僅限管理員(需以小編/教師帳號登入)」
🎯 測試目的(依操作說明):後台安全:member 角色不可進後台
GET /api/admin/overview(學生 Cookie)HTTP 403 ✓ 一般會員被正確阻擋
🎯 測試目的(依操作說明):商轉安全:一般會員用角色切換器切 admin 應無效
POST /api/pro/demo-role {role:"admin"} → GET /api/ai/quotademo admin 無效,tier=free ✓(已還原)
🎯 測試目的(依操作說明):說明「後台 → 營運總覽」:會員/影片/AI 成本 KPI
GET /api/admin/overview(教師 Cookie)會員 31 人、影片 22 部(待審 2)、本月 AI $0.3314 ✓
🎯 測試目的(依操作說明):後台頁伺服器端守門
GET /admin(教師=後台頁;學生=302 導回首頁)教師見後台 ✓ 學生被導回(頁面不含後台)✓
🎯 測試目的(依操作說明):說明「後台 → 會員管理」:搜尋姓名/Email、分頁
GET /api/admin/users?q=QA搜尋「QA」共 21 位 ✓
🎯 測試目的(依操作說明):說明「後台 → 定價/訂單 → 編輯」:管理者修訂價格,前台即時生效
PUT /api/admin/pricing/:id {price:799} → 驗證 → 還原 699699 → 799 ✓ 前台同步 ✓ 還原 699 ✓(稽核日誌留痕)
🎯 測試目的(依操作說明):說明「後台 → 內容審核」:pending → approved
POST /api/admin/videos/${id}/approve✅ 已通過「QA自動測試影音 bnjste」
🎯 測試目的(依操作說明):說明「後台 → 會員管理 → 停權」:停權即強制登出且無法再登入
POST /api/admin/users/:id/suspend → 登入(403)→ restore → 登入(200)停權 ✓ → 登入 403 ✓ → 復權 ✓ → 登入 200 ✓
🎯 測試目的(依操作說明):說明「後台 → 許願/公告」:發布公告(社群頁即時可見)→ 刪除
POST /api/admin/announcements → DELETE發布 id=9 ✓ 刪除 ✓
🎯 測試目的(依操作說明):說明「後台 → 稽核日誌」:每個管理操作都留痕
GET /api/admin/logs共 32 筆,近期動作:announce_delete, announce_create, user_restore, user_suspend, video_approve, pricing_update ✓
🎯 測試目的(依操作說明):後台防呆驗證
POST /api/admin/users/(自己id)/suspendHTTP 400 ✓「不可停權自己」
🎯 測試目的(依操作說明):還原測試環境,避免殘留資料
DELETE /api/class/:id/leave、/api/teacher/assignments/:aid、/api/teacher/classes/:id退班 ✓ 刪作業 ✓ 刪班級 ✓(QA 帳號保留供追溯)