Files
vue-driven-cloud-storage/backend/tests/release-sync-tests.js
237899745 a736d70d57
Some checks failed
Build and tests / test (push) Has been cancelled
build: publish desktop installer via Gitea releases
2026-07-27 15:20:09 +08:00

74 lines
2.5 KiB
JavaScript

const assert = require('assert');
const crypto = require('crypto');
const fs = require('fs');
const os = require('os');
const path = require('path');
const { spawnSync } = require('child_process');
const projectRoot = path.resolve(__dirname, '..', '..');
const syncScript = path.join(projectRoot, 'frontend', 'scripts', 'sync-desktop-release.js');
const results = { passed: 0, failed: 0 };
function test(name, fn) {
try {
fn();
results.passed += 1;
console.log(` [PASS] ${name}`);
} catch (error) {
results.failed += 1;
console.error(` [FAIL] ${name}: ${error.message}`);
}
}
console.log('\n========== 桌面安装包发布同步测试 ==========\n');
const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'wanwanyun-release-sync-'));
try {
const destinationDirectory = path.join(tempRoot, 'downloads');
const asset = 'wanwan-cloud-desktop_v9.9.9_x64-setup.exe';
const assetContent = Buffer.from('verified desktop release fixture');
const sha256 = crypto.createHash('sha256').update(assetContent).digest('hex');
const metadataPath = path.join(tempRoot, 'desktop-release.json');
fs.mkdirSync(destinationDirectory, { recursive: true });
fs.writeFileSync(path.join(destinationDirectory, asset), assetContent);
fs.writeFileSync(metadataPath, JSON.stringify({
version: '9.9.9',
tag: 'v9.9.9',
asset,
downloadUrl: `https://example.test/releases/download/v9.9.9/${asset}`,
publicPath: `/downloads/${asset}`,
sha256,
size: assetContent.length
}));
const runCheck = () => spawnSync(process.execPath, [
syncScript,
'--metadata', metadataPath,
'--destination-dir', destinationDirectory,
'--check-only'
], { encoding: 'utf8' });
test('已缓存安装包通过大小与 SHA256 校验', () => {
const result = runCheck();
assert.strictEqual(result.status, 0, result.stderr);
assert.match(result.stdout, /Desktop release verified/);
});
test('损坏的安装包会让只读校验失败', () => {
fs.appendFileSync(path.join(destinationDirectory, asset), 'corrupt');
const result = runCheck();
assert.notStrictEqual(result.status, 0);
assert.match(result.stderr, /Desktop release check failed/);
});
} finally {
fs.rmSync(tempRoot, { recursive: true, force: true });
}
console.log('\n========================================');
console.log('测试总结');
console.log('========================================');
console.log(`通过: ${results.passed}`);
console.log(`失败: ${results.failed}`);
process.exit(results.failed > 0 ? 1 : 0);