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