Skip to content

test(admin): 補齊四個「做了沒勾」功能的測試+回填 TODO 勾選 - #25

Merged
thothawei merged 1 commit into
mainfrom
claude/admin-todo-stale-checkboxes
Jul 28, 2026
Merged

test(admin): 補齊四個「做了沒勾」功能的測試+回填 TODO 勾選#25
thothawei merged 1 commit into
mainfrom
claude/admin-todo-stale-checkboxes

Conversation

@thothawei

Copy link
Copy Markdown
Owner

為什麼有這個 PR

app 的待辦清單已經沒有不需外部資源的項目(A2 缺 Firebase、A5 缺實機,兩者當日實查都仍不在),所以改盤點 admin 自己的 docs/TODO.md——三個 repo 各有一份,我先前只讀 app 那份。

結果:四個 [ ] 全部早就實作了,只是沒回填。

TODO 條目 實際狀況
3.3 登出確認 AppLayoutApp.useApp()modal.confirm(「確定要登出?」),確認才 clearSession()+導向 /login
3.5 點擊司機連動 popup 內「查看司機 →」,委派點擊[data-driver-link])走 SPA 導向 /drivers/:idhref 保留當 JS 失效退路
3.6 搜尋/篩選 Input.Search「搜尋姓名/電話/車牌」(比原規劃多了車牌)+狀態下拉(含「待審核」)+車種下拉(含「未填車輛」)
3.6 司機詳情頁 DriverDetailPage + 路由 /drivers/:id後端確實沒有單筆司機 GET,所以照原規劃退路走列表資料

「做了沒勾」的真正代價

不是文件難讀,而是沒人知道它該有測試。這四項裡有三項先前完全沒有測試覆蓋:司機詳情頁連測試檔都不存在,popup 連結與登出確認也都沒被碰過;DriversPage 只測過車種篩選,關鍵字搜尋沒測——而搜尋框的 placeholder 承諾了姓名/電話/車牌三路。

所以這個 PR 的主體是測試,不是改勾選:補 10 個案,124 → 134 passed(26 檔)

  • DriverDetailPage.test.tsx(新檔,4 案):明細顯示/直接開網址會自行取資料/查不到該 id 顯示「找不到司機 #999」並留兩處返回/麵包屑回列表
  • FleetPage.test.tsx(3 案):popup 帶連結與正確 driver id 且保留 href/點連結走 SPA 導向/點地圖其他位置不導向(負向對照)
  • AppLayout.test.tsx(2 案):按取消什麼都不該發生(只驗確認路徑會讓誤觸防護形同虛設)/確認後才清 session
  • DriversPage.test.tsx(1 案):姓名/電話/車牌大小寫不敏感三路都命中

反向驗證

FleetPage 兩案各自暫時破壞來源再跑(改動已還原,git diff 為空):

破壞 結果
拿掉 popup 的「查看司機」連結 只有「popup 帶連結」那案 FAIL
拿掉 container.addEventListener('click', onClick) 只有「點連結走 SPA 導向」那案 FAIL

踩到的坑(已寫進測試註解)

antd 對「剛好兩個中文字」的按鈕會插入空格——DOM 實際是「登 出」「取 消」,getByRole('button', { name: '登出' }) 精確比對查不到,要用 /登\s*出/。另外確認框標題同時出現在 ant-modal-titleant-modal-confirm-title 兩處,getByText 會 Found multiple,改成對 dialog 斷言 toHaveTextContent

驗收

npm test 134 passed(原 124)、npm run lint 乾淨、tsc --noEmit exit 0。沒有動任何產品程式碼FleetPage.tsx 的反向驗證改動已還原)。

🤖 Generated with Claude Code

app 的待辦清單已無不需外部資源的項目,改盤點 admin 的 docs/TODO.md。
四個 [ ](登出確認、地圖點擊司機連動、司機搜尋/篩選、司機詳情頁)
**其實全部早就實作了**,只是沒回填。

「做了沒勾」的真正代價不是文件難讀,而是**沒人知道它該有測試**:
- DriverDetailPage 連測試檔都不存在
- FleetPage popup 的「查看司機」連結沒被覆蓋
- AppLayout 的登出確認沒被覆蓋
- DriversPage 只測過車種篩選,關鍵字搜尋沒測(placeholder 承諾姓名/電話/車牌三路)

補 10 個測試(124 → 134 passed,26 檔):
- DriverDetailPage 4 案(明細/直接進入自行取資料/查不到該 id/麵包屑)
- FleetPage 3 案(popup 帶連結與正確 id 且保留 href/點連結走 SPA 導向/
  點其他位置不導向)——**兩案做過反向驗證**:拿掉 popup 連結或拿掉委派 handler,
  各自只讓對應那一案 FAIL
- AppLayout 2 案(取消不清 session/確認才清)
- DriversPage 1 案(姓名/電話/車牌大小寫不敏感三路都命中)

踩到的坑:**antd 對「剛好兩個中文字」的按鈕會插入空格**(DOM 實際是「登 出」「取 消」),
getByRole name 精確比對查不到;確認框標題同時出現在 ant-modal-title 與
ant-modal-confirm-title 兩處,getByText 會 Found multiple。已在測試裡註明。

驗收:`npm test` 134 passed、`npm run lint` 乾淨、`tsc --noEmit` exit 0。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@thothawei
thothawei merged commit bcd2c53 into main Jul 28, 2026
1 check passed
@thothawei
thothawei deleted the claude/admin-todo-stale-checkboxes branch July 28, 2026 02:17
thothawei added a commit that referenced this pull request Jul 28, 2026
2026-07-28 補上四個「做了沒勾」功能的測試後(PR #25),數字從 25 檔 123 tests
變成 26 檔 134 tests,README 沒同步。

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant