Twitch-VOD-Manager/src/main/domain/update-version-utils.test.ts
xRangerDE 640807778c refactor: relocate update-version-utils to src/main/domain/ + vitest
16 unit tests covering normalize/compare/isNewer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 21:42:05 +02:00

67 lines
2.4 KiB
TypeScript

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