From 1f615fee90cf3967d73827d72cb9dfe6b00185a9 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Fri, 26 Jun 2026 14:14:18 +0800 Subject: [PATCH] =?UTF-8?q?test(release-cleanup):=20=E8=A3=9C=E4=B8=8A?= =?UTF-8?q?=E4=B8=80=E8=88=AC=E7=B6=B2=E8=B7=AF=E9=8C=AF=E8=AA=A4=E8=88=87?= =?UTF-8?q?=E7=A9=BA=E9=99=A3=E5=88=97=E9=82=8A=E7=95=8C=E6=B8=AC=E8=A9=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 fetchAllPages 在 fetch 拋一般網路錯誤時向外拋出的測試,以及 selectReleasesToDelete 對空陣列回傳空陣列的測試。測試共 67 項全數通過。 Co-Authored-By: Claude Opus 4.8 (1M context) --- app/test/gitea-client.test.js | 11 +++++++++++ app/test/releases.test.js | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/app/test/gitea-client.test.js b/app/test/gitea-client.test.js index 460391f..e971498 100644 --- a/app/test/gitea-client.test.js +++ b/app/test/gitea-client.test.js @@ -112,6 +112,17 @@ test('fetchAllPages 在 fetch 因逾時拋出 AbortError 時向外拋出', async ) }) +test('fetchAllPages 在 fetch 拋出一般網路錯誤時向外拋出', async () => { + globalThis.fetch = async () => { + throw new TypeError('fetch failed: ECONNREFUSED') + } + const client = new GiteaClient({}) + await assert.rejects( + () => client.fetchAllPages('https://example.com/api'), + /fetch failed|ECONNREFUSED/, + ) +}) + test('fetchAllPages 在頁數超過 MAX_PAGES 時中止以避免無限迴圈', async () => { // 永遠回傳非空陣列,模擬 API 不以空陣列結尾的異常情形 globalThis.fetch = async () => jsonResponse([{ id: 1 }]) diff --git a/app/test/releases.test.js b/app/test/releases.test.js index 06690d6..b33daeb 100644 --- a/app/test/releases.test.js +++ b/app/test/releases.test.js @@ -19,6 +19,11 @@ test('selectReleasesToDelete 在數量不超過保留數時回傳空陣列', () assert.deepEqual(selectReleasesToDelete(releases, 5), []) }) +test('selectReleasesToDelete 對空陣列回傳空陣列', () => { + assert.deepEqual(selectReleasesToDelete([], 1), []) + assert.deepEqual(selectReleasesToDelete([], 0), []) +}) + test('selectReleasesToDelete 在 keepCount 為 0 時刪除全部(由新到舊)', () => { const toDelete = selectReleasesToDelete(releases, 0) assert.deepEqual(