import { test, expect, describe } from 'vitest'; import { normalizeUpdateVersion, compareUpdateVersions, isNewerUpdateVersion, } from './update-version-utils'; describe('normalizeUpdateVersion', () => { test('strips v-prefix lowercase', () => { expect(normalizeUpdateVersion('v1.2.3')).toBe('1.2.3'); }); test('strips V-prefix uppercase', () => { expect(normalizeUpdateVersion('V1.2.3')).toBe('1.2.3'); }); test('trims whitespace', () => { expect(normalizeUpdateVersion(' 1.2.3 ')).toBe('1.2.3'); }); test('handles null and undefined as empty string', () => { expect(normalizeUpdateVersion(null)).toBe(''); expect(normalizeUpdateVersion(undefined)).toBe(''); }); test('passes plain version unchanged', () => { expect(normalizeUpdateVersion('4.6.155')).toBe('4.6.155'); }); }); describe('compareUpdateVersions', () => { test('older < newer in same minor', () => { expect(compareUpdateVersions('4.1.10', '4.1.18')).toBeLessThan(0); }); test('newer > older in same minor', () => { expect(compareUpdateVersions('4.1.18', '4.1.10')).toBeGreaterThan(0); }); test('equal versions return 0', () => { expect(compareUpdateVersions('4.6.155', '4.6.155')).toBe(0); }); test('v-prefix is normalized away', () => { expect(compareUpdateVersions('v4.1.12', '4.1.12')).toBe(0); }); test('extra trailing part is newer', () => { expect(compareUpdateVersions('4.1.12', '4.1.12.1')).toBeLessThan(0); }); test('major bump wins', () => { expect(compareUpdateVersions('5.0.0', '4.99.99')).toBeGreaterThan(0); }); test('null versions sort lowest', () => { expect(compareUpdateVersions(null, '1.0.0')).toBeLessThan(0); expect(compareUpdateVersions('1.0.0', null)).toBeGreaterThan(0); }); test('both null returns 0', () => { expect(compareUpdateVersions(null, null)).toBe(0); expect(compareUpdateVersions('', '')).toBe(0); }); }); describe('isNewerUpdateVersion', () => { test('strictly newer returns true', () => { expect(isNewerUpdateVersion('4.1.18', '4.1.17')).toBe(true); }); test('equal returns false', () => { expect(isNewerUpdateVersion('4.1.18', '4.1.18')).toBe(false); }); test('older returns false', () => { expect(isNewerUpdateVersion('4.1.17', '4.1.18')).toBe(false); }); });