import { describe, expect, it } from 'vitest'; import { semverLt, formatUpdateNotice } from '../src/runtime/update-checker.js'; import type { UpdateCheckResult } from '../src/runtime/update-checker.js'; describe('semverLt', () => { it('returns true when a < b', () => { expect(semverLt('0.0.1', '0.0.2')).toBe(true); expect(semverLt('0.1.0', '0.2.0')).toBe(true); expect(semverLt('1.0.0', '2.0.0')).toBe(true); expect(semverLt('0.0.1-alpha.1', '0.0.1-alpha.2')).toBe(true); expect(semverLt('0.0.1-alpha.1', '0.0.1')).toBe(true); }); it('returns false when a >= b', () => { expect(semverLt('0.0.2', '0.0.1')).toBe(false); expect(semverLt('1.0.0', '1.0.0')).toBe(false); expect(semverLt('2.0.0', '1.0.0')).toBe(false); }); it('returns false for empty strings', () => { expect(semverLt('', '1.0.0')).toBe(false); expect(semverLt('1.0.0', '')).toBe(false); expect(semverLt('', '')).toBe(false); }); }); describe('formatUpdateNotice', () => { it('returns empty string when up to date', () => { const result: UpdateCheckResult = { current: '1.0.0', latest: '1.0.0', updateAvailable: false, checkedAt: new Date().toISOString(), registry: 'https://example.com', }; expect(formatUpdateNotice(result)).toBe(''); }); it('returns a notice when update is available', () => { const result: UpdateCheckResult = { current: '0.0.1', latest: '0.1.0', updateAvailable: true, checkedAt: new Date().toISOString(), registry: 'https://example.com', }; const notice = formatUpdateNotice(result); expect(notice).toContain('0.0.1'); expect(notice).toContain('0.1.0'); expect(notice).toContain('Update available'); }); });