dootask/electron/lib/release-index.test.js
kuaifan b1d5652bc7 refactor(electron): 发布存储从自建服务迁移到 Cloudflare R2
替换 UPLOAD_TOKEN/UPLOAD_URL 为 R2(S3 兼容)对象存储:
- 新增 r2.js 封装上传/复制/删除/列举等操作
- 新增 release-index.js 从文件名解析平台/架构生成下载索引
- CI 环境变量同步切换为 R2_* 系列

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 10:31:46 +00:00

37 lines
1.4 KiB
JavaScript
Vendored

const test = require('node:test');
const assert = require('node:assert');
const { parseFilename, buildReleaseIndex } = require('./release-index');
test('parseFilename: win exe x64', () => {
assert.deepStrictEqual(parseFilename('DooTask-v1.7.56-win-x64.exe'), { platform: 'win', arch: 'x64' });
});
test('parseFilename: mac dmg arm64', () => {
assert.deepStrictEqual(parseFilename('DooTask-v1.7.56-mac-arm64.dmg'), { platform: 'mac', arch: 'arm64' });
});
test('parseFilename: android apk has null arch', () => {
assert.deepStrictEqual(parseFilename('app-release.apk'), { platform: 'android', arch: null });
});
test('parseFilename: ignores yml/blockmap/zip', () => {
assert.strictEqual(parseFilename('latest.yml'), null);
assert.strictEqual(parseFilename('DooTask-v1.7.56-win-x64.exe.blockmap'), null);
assert.strictEqual(parseFilename('DooTask-v1.7.56-mac-arm64.zip'), null);
});
test('buildReleaseIndex: groups by platform/arch, .zip never overwrites .dmg', () => {
const index = buildReleaseIndex([
'DooTask-v1.7.56-mac-arm64.dmg',
'DooTask-v1.7.56-mac-arm64.zip',
'DooTask-v1.7.56-win-x64.exe',
'latest.yml',
'app-release.apk',
]);
assert.deepStrictEqual(index, {
mac: { arm64: 'DooTask-v1.7.56-mac-arm64.dmg' },
win: { x64: 'DooTask-v1.7.56-win-x64.exe' },
android: { default: 'app-release.apk' },
});
});