cangku/backend/test/desktopReleaseService.test.js

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');
});