Files
calculate-version/app/test/config.test.js
T

107 lines
3.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use strict';
const { test } = require('node:test');
const assert = require('node:assert/strict');
const {
isUnset,
requireEnv,
normalizeBetaFlag,
loadConfig,
} = require('../config');
test('isUnset 對未設定值回傳 true', () => {
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.equal(requireEnv('NAME', 'value'), 'value');
});
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 從環境變數組出設定', () => {
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',
token: 'secret',
isBeta: true,
});
});
test('loadConfig 將未提供或字面 "null" 的 token 正規化為 nullbeta 預設 false', () => {
const omitted = loadConfig({
GITEA_SERVER_URL: 'https://gitea.example.com',
GITEA_REPOSITORY: 'owner/repo',
});
assert.equal(omitted.token, null);
assert.equal(omitted.isBeta, false);
const literalNull = loadConfig({
GITEA_SERVER_URL: 'https://gitea.example.com',
GITEA_REPOSITORY: 'owner/repo',
GITEA_TOKEN: 'null',
});
assert.equal(literalNull.token, null);
});
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/);
});
test('loadConfig 於 GITEA_REPOSITORY 非 owner/repo 形式或含路徑穿越時拋錯', () => {
const base = { GITEA_SERVER_URL: 'https://gitea.example.com' };
assert.throws(() => loadConfig({ ...base, GITEA_REPOSITORY: 'no-slash' }), /GITEA_REPOSITORY 格式錯誤/);
assert.throws(() => loadConfig({ ...base, GITEA_REPOSITORY: 'owner/repo/extra' }), /GITEA_REPOSITORY 格式錯誤/);
assert.throws(() => loadConfig({ ...base, GITEA_REPOSITORY: '../owner/repo' }), /GITEA_REPOSITORY 格式錯誤/);
assert.throws(() => loadConfig({ ...base, GITEA_REPOSITORY: 'owner/..' }), /GITEA_REPOSITORY 格式錯誤/);
});
test('loadConfig 接受含點號的合法 owner/repo', () => {
const config = loadConfig({
GITEA_SERVER_URL: 'https://gitea.example.com',
GITEA_REPOSITORY: 'my.org/my.repo',
});
assert.equal(config.repository, 'my.org/my.repo');
});