feat: 初始化 Gitea Action 发送钉钉机器人消息项目

This commit is contained in:
ren
2025-10-15 17:52:44 +08:00
commit 428795c6a5
27 changed files with 9262 additions and 0 deletions

111
tests/helpers/env-mock.js Normal file
View File

@@ -0,0 +1,111 @@
/**
* 环境变量 Mock 工具
* 用于在测试中模拟和管理环境变量
*/
/**
* Mock 环境变量
*
* @param {object} envVars - 要设置的环境变量
* @returns {Function} 恢复函数
*/
export function mockEnvVars(envVars) {
const originalEnv = {};
// 保存原始值
for (const key in envVars) {
originalEnv[key] = process.env[key];
process.env[key] = envVars[key];
}
// 返回恢复函数
return () => {
for (const key in envVars) {
if (originalEnv[key] === undefined) {
delete process.env[key];
} else {
process.env[key] = originalEnv[key];
}
}
};
}
/**
* 创建标准的 Action 环境变量
*
* @param {object} overrides - 覆盖的环境变量
* @returns {object} 环境变量对象
*/
export function createActionEnv(overrides = {}) {
return {
INPUT_WEBHOOK_URL: 'https://oapi.dingtalk.com/robot/send?access_token=test123',
INPUT_MESSAGE_TYPE: 'text',
INPUT_CONTENT: 'Test message',
INPUT_TITLE: '',
INPUT_AT_MOBILES: '',
INPUT_AT_ALL: 'false',
INPUT_LINK_URL: '',
INPUT_PIC_URL: '',
INPUT_BTN_ORIENTATION: '0',
INPUT_SINGLE_TITLE: '',
INPUT_SINGLE_URL: '',
INPUT_BUTTONS: '',
INPUT_FEED_LINKS: '',
...overrides,
};
}
/**
* 清理所有 INPUT_ 开头的环境变量
*
* @returns {Function} 恢复函数
*/
export function clearActionEnv() {
const originalEnv = {};
const inputKeys = Object.keys(process.env).filter(key => key.startsWith('INPUT_'));
inputKeys.forEach(key => {
originalEnv[key] = process.env[key];
delete process.env[key];
});
return () => {
Object.assign(process.env, originalEnv);
};
}
/**
* 创建测试用的环境变量快照
*
* @returns {object} 当前环境变量的副本
*/
export function createEnvSnapshot() {
return { ...process.env };
}
/**
* 恢复环境变量到指定快照
*
* @param {object} snapshot - 环境变量快照
*/
export function restoreEnvSnapshot(snapshot) {
// 清除当前环境变量
for (const key in process.env) {
if (!(key in snapshot)) {
delete process.env[key];
}
}
// 恢复快照中的环境变量
Object.assign(process.env, snapshot);
}
/**
* 创建环境变量 Mock别名函数
*
* @param {object} envVars - 要设置的环境变量
* @returns {Function} 恢复函数
*/
export function createEnvMock(envVars) {
return mockEnvVars(envVars);
}