import { afterEach, describe, expect, it } from 'vitest'; import { isNewerVersion, parseAppUpdateManifest, resetAppUpdateCheckForTests, } from '../src/services/appUpdate'; afterEach(() => resetAppUpdateCheckForTests()); describe('AGC update manifest', () => { it('compares semantic versions and accepts v prefixes', () => { expect(isNewerVersion('v0.1.13', '0.1.12')).toBe(true); expect(isNewerVersion('0.1.12', '0.1.12')).toBe(false); expect(isNewerVersion('0.1.11', '0.1.12')).toBe(false); }); it('validates an OSS manifest and rejects non-HTTPS downloads', () => { expect( parseAppUpdateManifest({ version: '0.1.13', downloadUrl: 'https://oss.example/agc.exe', }), ).toMatchObject({ version: '0.1.13', downloadUrl: 'https://oss.example/agc.exe', }); expect( parseAppUpdateManifest({ version: '0.1.13', downloadUrl: 'http://oss.example/agc.exe', }), ).toBeNull(); }); it('preserves multiline release notes', () => { expect( parseAppUpdateManifest({ version: '0.1.13', downloadUrl: 'https://oss.example/agc.exe', releaseNotes: '第一行\n第二行\r\n第三行', }), ).toMatchObject({ releaseNotes: '第一行\n第二行\r\n第三行', }); }); });