test(release-cleanup): 新增 validate/releases/tags/gitea-client 單元測試

以 node:test 內建測試器涵蓋純函式(isEmptyOrNull/requireValue/requireInteger、
selectReleasesToDelete、categorizeTags)與 GiteaClient 分頁/刪除邏輯,共 19 項測試。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-06-26 10:35:19 +08:00
co-authored by Claude Opus 4.8
parent b1aa8730a2
commit 15ffa4ffb6
4 changed files with 171 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
import { test } from 'node:test'
import assert from 'node:assert/strict'
import { selectReleasesToDelete } from '../releases.js'
const releases = [
{ id: 1, tag_name: 'v1.0.0', created_at: '2024-01-01T00:00:00Z' },
{ id: 3, tag_name: 'v3.0.0', created_at: '2024-03-01T00:00:00Z' },
{ id: 2, tag_name: 'v2.0.0', created_at: '2024-02-01T00:00:00Z' },
]
test('selectReleasesToDelete 保留最新的 keepCount 筆,刪除其餘', () => {
const toDelete = selectReleasesToDelete(releases, 2)
assert.equal(toDelete.length, 1)
assert.equal(toDelete[0].tag_name, 'v1.0.0')
})
test('selectReleasesToDelete 在數量不超過保留數時回傳空陣列', () => {
assert.deepEqual(selectReleasesToDelete(releases, 3), [])
assert.deepEqual(selectReleasesToDelete(releases, 5), [])
})
test('selectReleasesToDelete 在 keepCount 為 0 時刪除全部(由新到舊)', () => {
const toDelete = selectReleasesToDelete(releases, 0)
assert.deepEqual(
toDelete.map((r) => r.tag_name),
['v3.0.0', 'v2.0.0', 'v1.0.0'],
)
})
test('selectReleasesToDelete 不改動原陣列', () => {
const original = [...releases]
selectReleasesToDelete(releases, 1)
assert.deepEqual(releases, original)
})