test: 整併測試至 app/test 並解決 AI 審查 findings #8
@@ -58,5 +58,11 @@
|
||||
"role": "Leo",
|
||||
"original_finding": "日誌分隔線寬度與符號直接硬編碼在模組內,調整風格需改多處。建議集中管理並提供通用產生函數。",
|
||||
"reason": "分隔線已是模組頂層集中定義的常數 LINE/SUBLINE,單點即可調整;為固定的視覺樣式再加產生函數屬過度設計。"
|
||||
},
|
||||
{
|
||||
"location": "app/test/releases.test.js:10",
|
||||
"role": "Leo",
|
||||
"original_finding": "withFetch 為全域 fetch 的通用封裝工具,目前定義在特定測試檔案內。建議提取至獨立的測試工具檔案(例如 app/test/test-utils.js)以提升重用性。",
|
||||
"reason": "目前僅 releases.test.js 單一測試檔使用 withFetch(logger.test.js 使用的是不同的 stdout/stderr 攔截輔助),尚無第二個消費者;為單一用途提前抽出共用模組屬過度設計。"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,57 +1 @@
|
||||
[
|
||||
{
|
||||
"level": "warning",
|
||||
"role": "Assassin",
|
||||
"location": "app/config.js:71",
|
||||
"problem": "對 GITEA_REPOSITORY 環境變數缺乏輸入驗證。由於此值會直接拼接於 API URL 中(見 app/index.js:37),若攻擊者傳入特殊字元或路徑穿越字元(如 `../`),可能導致 API 請求路徑異常,甚至造成非預期的 API 端點存取。",
|
||||
"suggestion": "增加格式驗證機制,使用嚴格的正則表達式限制 GITEA_REPOSITORY 格式(例如確保只包含合法的 repo 名稱字元:`^[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+$`),拒絕任何不符合規範的輸入。",
|
||||
"is_new": false
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"role": "Leo",
|
||||
"location": "app/releases.js:77",
|
||||
"problem": "JSON.parse 失敗時,僅拋出通用錯誤訊息,未來除錯時無法得知具體回傳內容,將導致除錯時浪費大量時間追查。",
|
||||
"suggestion": "建議將錯誤訊息擴充,納入部分的 response body 內容,以利於快速定位回傳格式異常的確切原因。",
|
||||
"is_new": false
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"role": "Maya",
|
||||
"location": "app/logger.js:1",
|
||||
"problem": "整個 logger.js 模組完全沒有測試,無法確保 section、info 與 error 函式是否正確將訊息格式化並寫入標準輸出與標準錯誤。",
|
||||
"suggestion": "為 app/logger.js 新增測試,模擬 process.stdout 與 process.stderr,驗證輸出的字串格式是否符合預期(例如分隔線寬度、前綴是否正確)。",
|
||||
"is_new": false
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"role": "Leo",
|
||||
"location": "app/test/config.test.js:14",
|
||||
"problem": "測試案例名稱與內容不符,將相反行為寫在同一個 test 中,且移除了對 null 與 \"false\" 的特定檢查。",
|
||||
"suggestion": "將斷言拆分為獨立的測試案例,並補回對 null 與字串 \"false\" 的邊界測試。"
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"role": "Leo",
|
||||
"location": "app/test/config.test.js:24",
|
||||
"problem": "測試案例同時包含「錯誤處理」與「成功回傳」兩種行為。測試應遵循單一職責原則,若邏輯調整導致其中一項失敗,目前寫法會使得錯誤定位變得困難。",
|
||||
"suggestion": "建議將 requireEnv 的拋錯測試與成功回傳測試拆分為兩個獨立的測試案例。",
|
||||
"is_new": true
|
||||
},
|
||||
{
|
||||
"level": "warning",
|
||||
"role": "Maya",
|
||||
"location": "app/test/version.test.js:19",
|
||||
"problem": "新的 `compareVersionArrays` 測試雖增加了案例,但移除了 `compareVersionArrays([2, 0, 0], [1, 9, 9]) > 0`,這對 Major 版本進位的跨區段比較極為重要。",
|
||||
"suggestion": "建議補回對大版本變更的比較測試,確保版本排序邏輯正確。",
|
||||
"is_new": true
|
||||
},
|
||||
{
|
||||
"level": "info",
|
||||
"role": "Leo",
|
||||
"location": "app/test/releases.test.js:10",
|
||||
"problem": "withFetch 為全域 fetch 的通用封裝工具,目前定義在特定測試檔案內。若後續專案中其他測試檔案也需要模擬 fetch,將導致測試工具邏輯重複分散。",
|
||||
"suggestion": "建議將此類通用的測試輔助函式提取至獨立的測試工具檔案(例如 app/test/test-utils.js),以提升測試程式碼的重用性與維護一致性。",
|
||||
"is_new": true
|
||||
}
|
||||
]
|
||||
[]
|
||||
|
||||
Reference in New Issue
Block a user