以 node:test 內建測試器涵蓋純函式(isEmptyOrNull/requireValue/requireInteger、 selectReleasesToDelete、categorizeTags)與 GiteaClient 分頁/刪除邏輯,共 19 項測試。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
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)
|
|
})
|