test(calculate-version): 整併單元測試至 app/test 並移除無法被執行的重複測試目錄

repo 根目錄 test/ 不會被 app/ 的 npm test (node --test) 探索到,導致 main 失敗路徑等整合測試實際未執行;
一併收斂至 app/test/ 並保留 output 測試,確保 34 筆測試皆可執行。
This commit is contained in:
Jeffery
2026-06-26 11:02:03 +08:00
parent 6f95a3fbe6
commit 9a22d4d3eb
7 changed files with 160 additions and 399 deletions
+28 -21
View File
@@ -1,7 +1,8 @@
'use strict';
const { test } = require('node:test');
const test = require('node:test');
const assert = require('node:assert/strict');
const {
isUnset,
requireEnv,
@@ -9,42 +10,33 @@ const {
loadConfig,
} = require('../config');
test('isUnset 對未設定值回傳 true', () => {
test('isUnset 將 undefined/空字串/null 字面值視為未設定', () => {
assert.equal(isUnset(undefined), true);
assert.equal(isUnset(null), true);
assert.equal(isUnset(''), true);
assert.equal(isUnset('null'), true);
});
test('isUnset 對有效值回傳 false', () => {
assert.equal(isUnset('value'), false);
assert.equal(isUnset('false'), false);
});
test('requireEnv 未設定值丟出錯誤', () => {
assert.throws(() => requireEnv('NAME', ''), /NAME 未設定/);
assert.throws(() => requireEnv('NAME', 'null'), /NAME 未設定/);
test('requireEnv 未設定時拋錯,有值時回傳原值', () => {
assert.throws(() => requireEnv('FOO', ''), /FOO 未設定/);
assert.equal(requireEnv('FOO', 'bar'), 'bar');
});
test('requireEnv 對有效值回傳原值', () => {
assert.equal(requireEnv('NAME', 'value'), 'value');
});
test('normalizeBetaFlag 僅將字面值 "true" 視為啟用', () => {
test('normalizeBetaFlag 僅 "true" 視為啟用', () => {
assert.equal(normalizeBetaFlag('true'), true);
assert.equal(normalizeBetaFlag('false'), false);
assert.equal(normalizeBetaFlag('yes'), false);
assert.equal(normalizeBetaFlag(undefined), false);
assert.equal(normalizeBetaFlag('null'), false);
assert.equal(normalizeBetaFlag('TRUE'), false);
});
test('loadConfig 從環境變數組出設定', () => {
test('loadConfig 解析完整設定', () => {
const config = loadConfig({
GITEA_SERVER_URL: 'https://gitea.example.com',
GITEA_REPOSITORY: 'owner/repo',
GITEA_TOKEN: 'secret',
IS_BETA: 'true',
});
assert.deepEqual(config, {
serverUrl: 'https://gitea.example.com',
repository: 'owner/repo',
@@ -53,16 +45,31 @@ test('loadConfig 從環境變數組出設定', () => {
});
});
test('loadConfig 將未提供的 token 正規化為 nullbeta 預設 false', () => {
test('loadConfig 缺少 token 視為匿名(null', () => {
const config = loadConfig({
GITEA_SERVER_URL: 'https://gitea.example.com',
GITEA_REPOSITORY: 'owner/repo',
GITEA_TOKEN: 'null',
});
assert.equal(config.token, null);
assert.equal(config.isBeta, false);
});
test('loadConfig 缺少必填環境變數時丟出錯誤', () => {
test('loadConfig 缺少必填項目時拋錯', () => {
assert.throws(() => loadConfig({ GITEA_REPOSITORY: 'owner/repo' }), /GITEA_SERVER_URL 未設定/);
assert.throws(() => loadConfig({ GITEA_SERVER_URL: 'https://x' }), /GITEA_REPOSITORY 未設定/);
});
test('loadConfig 於 GITEA_SERVER_URL 非合法 URL 時拋錯', () => {
assert.throws(() => loadConfig({
GITEA_SERVER_URL: 'not-a-url',
GITEA_REPOSITORY: 'owner/repo',
}), /GITEA_SERVER_URL 格式錯誤/);
});
test('loadConfig 於 GITEA_SERVER_URL 使用非 http(s) 協定時拋錯', () => {
assert.throws(() => loadConfig({
GITEA_SERVER_URL: 'ftp://gitea.example.com',
GITEA_REPOSITORY: 'owner/repo',
}), /必須使用 http 或 https/);
});