'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); }); 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 將未提供的 token 正規化為 null,beta 預設 false', () => { const config = loadConfig({ GITEA_SERVER_URL: 'https://gitea.example.com', GITEA_REPOSITORY: 'owner/repo', }); assert.equal(config.token, null); assert.equal(config.isBeta, false); }); test('loadConfig 在缺少必填環境變數時丟出錯誤', () => { assert.throws(() => loadConfig({ GITEA_REPOSITORY: 'owner/repo' }), /GITEA_SERVER_URL 未設定/); assert.throws(() => loadConfig({ GITEA_SERVER_URL: 'https://x' }), /GITEA_REPOSITORY 未設定/); });