Files
calculate-version/app/test/index.test.js
T
Jeffery 0977e66ff4
CI / AI Code Review (pull_request) Successful in 38s
test(calculate-version): 整併單元測試至 app/test 並移除無法被執行的重複測試目錄
app/package.json 的 npm test(node --test,cwd 為 app/)只會探索 app/test/,
repo 根目錄另一份 test/ 中的 main 整合測試(index.test.js)因此從未被執行。
將 config/index/releases/version 收斂至 app/test/(修正 require 路徑),
保留 output 測試,移除重複且無法執行的 repo 根 test/。現 app/test/ 共 34 筆測試皆可執行。
2026-06-26 11:18:53 +08:00

60 lines
1.9 KiB
JavaScript

'use strict';
const test = require('node:test');
const assert = require('node:assert/strict');
const { main } = require('../index');
// 安靜的 log 記錄器,避免測試輸出雜訊
const silentLog = { section() {}, info() {}, error() {} };
const okConfig = {
serverUrl: 'https://gitea.example.com',
repository: 'owner/repo',
token: null,
isBeta: false,
};
test('main 成功時計算版本並寫出 output', async () => {
let written;
const version = await main({
loadConfig: () => okConfig,
fetchReleases: async () => ([{ tag_name: 'v1.2.3' }]),
writeOutput: (name, value) => { written = { name, value }; },
log: silentLog,
});
assert.equal(version, '1.2.4');
assert.deepEqual(written, { name: 'version', value: '1.2.4' });
});
test('main 將 release URL 與 token 傳給 fetchReleases', async () => {
let receivedUrl;
let receivedOptions;
await main({
loadConfig: () => ({ ...okConfig, token: 'secret' }),
fetchReleases: async (url, options) => { receivedUrl = url; receivedOptions = options; return []; },
writeOutput: () => {},
log: silentLog,
});
assert.equal(receivedUrl, 'https://gitea.example.com/api/v1/repos/owner/repo/releases');
assert.equal(receivedOptions.token, 'secret');
});
test('main 於 loadConfig 失敗時向外拋出', async () => {
await assert.rejects(() => main({
loadConfig: () => { throw new Error('GITEA_SERVER_URL 未設定'); },
log: silentLog,
}), /GITEA_SERVER_URL 未設定/);
});
test('main 於 fetchReleases 失敗時向外拋出', async () => {
await assert.rejects(() => main({
loadConfig: () => okConfig,
fetchReleases: async () => { throw new Error('release API 請求失敗 (page=1)'); },
writeOutput: () => {},
log: silentLog,
}), /release API 請求失敗/);
});