61 lines
2.5 KiB
JavaScript
61 lines
2.5 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const test = require('node:test');
|
|
|
|
const {
|
|
compareVersions,
|
|
normalizeArchitecture,
|
|
normalizePlatform,
|
|
parseReleaseStorage,
|
|
validateVersion,
|
|
} = require('../src/services/desktopReleaseService');
|
|
|
|
test('desktop release versions are compared numerically', () => {
|
|
assert.equal(compareVersions('0.0.10', '0.0.9'), 1);
|
|
assert.equal(compareVersions('v1.2.3', '1.2.3'), 0);
|
|
assert.equal(compareVersions('2.0.0', '10.0.0'), -1);
|
|
});
|
|
|
|
test('desktop release versions require an x.y.z value', () => {
|
|
assert.equal(validateVersion('v1.2.3'), '1.2.3');
|
|
assert.throws(() => validateVersion('1.2'), /版本号格式/);
|
|
});
|
|
|
|
test('desktop release storage drops invalid records without losing the latest version', () => {
|
|
const storage = parseReleaseStorage(JSON.stringify({
|
|
latestVersion: '0.0.9',
|
|
releases: [
|
|
{ id: 9, version: '0.0.9', objectKey: 'desktop-client/0.0.9/setup.exe' },
|
|
{ id: 8, version: 'invalid', objectKey: 'desktop-client/invalid/setup.exe' },
|
|
],
|
|
}));
|
|
|
|
assert.equal(storage.latestVersion, '0.0.9');
|
|
assert.equal(storage.releases.length, 1);
|
|
assert.equal(storage.releases[0].version, '0.0.9');
|
|
assert.equal(storage.releases[0].platform, 'win32');
|
|
assert.equal(storage.releases[0].architecture, 'x64');
|
|
assert.equal(storage.latestVersions.win32, '0.0.9');
|
|
});
|
|
|
|
test('desktop release platform and architecture are inferred from installers', () => {
|
|
assert.equal(normalizePlatform('', 'pdd-auto-sale-0.0.10-arm64.dmg'), 'darwin');
|
|
assert.equal(normalizePlatform('', 'pdd-auto-sale-0.0.10-setup.exe'), 'win32');
|
|
assert.equal(normalizeArchitecture('', 'pdd-auto-sale-0.0.10-arm64.dmg', 'darwin'), 'arm64');
|
|
assert.equal(normalizeArchitecture('', 'pdd-auto-sale-0.0.10-setup.exe', 'win32'), 'x64');
|
|
});
|
|
|
|
test('desktop release storage keeps Windows and macOS installers for the same version', () => {
|
|
const storage = parseReleaseStorage({
|
|
latestVersions: { win32: '0.0.10', darwin: '0.0.10' },
|
|
releases: [
|
|
{ id: 10, version: '0.0.10', objectKey: 'desktop-client/win32/0.0.10/setup.exe', fileName: 'pdd-auto-sale-0.0.10-setup.exe' },
|
|
{ id: 11, version: '0.0.10', objectKey: 'desktop-client/darwin/0.0.10/app.dmg', fileName: 'pdd-auto-sale-0.0.10-arm64.dmg' },
|
|
],
|
|
});
|
|
|
|
assert.equal(storage.releases.length, 2);
|
|
assert.deepEqual(storage.releases.map((release) => release.platform), ['win32', 'darwin']);
|
|
assert.equal(storage.latestVersions.win32, '0.0.10');
|
|
assert.equal(storage.latestVersions.darwin, '0.0.10');
|
|
});
|