const test = require('node:test') const assert = require('node:assert/strict') const prepareScript = require('../prepareSheet2SupplementDryRun') const importScript = require('../importSheet2PublicAssetsToLive') const explicitConnectionArgs = [ '--plink-path', 'plink-test.exe', '--ssh-host', 'deploy@example.invalid', '--ssh-hostkey', 'SHA256:test-host-key', '--ssh-password', 'test-secret-value' ] test('Sheet2 导入脚本默认只能 preview,只有显式 --apply 才允许写入', () => { assert.deepEqual(importScript.parseArgs([]), { inputDir: '', apply: false, dryRun: true, plinkPath: '', sshHost: '', sshHostkey: '', sshPassword: '' }) const applyOptions = importScript.parseArgs(['--apply']) assert.equal(applyOptions.apply, true) assert.equal(applyOptions.dryRun, false) const previewOptions = importScript.parseArgs(['--dry-run']) assert.equal(previewOptions.apply, false) assert.equal(previewOptions.dryRun, true) }) test('Sheet2 导入脚本拒绝冲突或拼错的写入参数', () => { assert.throws( () => importScript.parseArgs(['--apply', '--dry-run']), /不能同时使用/ ) assert.throws(() => importScript.parseArgs(['--aply']), /不支持的参数/) assert.throws(() => prepareScript.parseArgs(['--ssh-host']), /缺少参数值/) }) test('两个 Sheet2 脚本缺少连接参数时应在联网前明确失败且不包含秘密', () => { for (const script of [prepareScript, importScript]) { const options = script.parseArgs(['--ssh-password', 'test-secret-value']) assert.throws( () => script.resolveRemoteConnection(options, {}), (error) => { assert.match(error.message, /缺少固定资产远程连接参数/) assert.match(error.message, /FIXED_ASSET_SSH_HOST/) assert.match(error.message, /未发起网络连接/) assert.doesNotMatch(error.message, /test-secret-value/) return true } ) } }) test('两个 Sheet2 脚本支持显式连接参数且 CLI 优先于环境变量', () => { const env = { FIXED_ASSET_PLINK_PATH: 'env-plink.exe', FIXED_ASSET_SSH_HOST: 'env@example.invalid', FIXED_ASSET_SSH_HOSTKEY: 'SHA256:env-key', FIXED_ASSET_SSH_PASSWORD: 'env-secret' } for (const script of [prepareScript, importScript]) { const options = script.parseArgs(explicitConnectionArgs) assert.deepEqual(script.resolveRemoteConnection(options, env), { plinkPath: 'plink-test.exe', sshHost: 'deploy@example.invalid', sshHostkey: 'SHA256:test-host-key', sshPassword: 'test-secret-value' }) } })