mirror of
https://github.com/firstsun-dev/git-files-sync.git
synced 2026-07-22 06:54:27 +00:00
Adds a "what's new" modal shown once after the plugin updates to a new version, so users don't miss what changed: - New src/changelog.ts: a hand-curated CHANGELOG array (distinct from the auto-generated CHANGELOG.md, which lists every commit) where entries can be marked `notable` so they're called out separately from minor fixes, per the issue's clarification comment. - New src/utils/version.ts: compareVersions() does numeric per-segment comparison (so "1.10.0" sorts after "1.9.0", unlike a plain string compare). - getUnseenReleases() filters+sorts the changelog to what's newer than a given "last seen" version, extracted as a pure/testable function rather than inlined in main.ts (which isn't unit-tested in this repo). - New settings field lastSeenVersion, persisted the same way as other settings. On a fresh install (empty lastSeenVersion) it's just recorded silently — no modal, since there's nothing to compare against. On an actual version bump, WhatsNewModal shows the unseen releases' highlights, with a "View full changelog" link out to CHANGELOG.md and a "Got it" dismiss; the version is recorded either way so the tip only ever shows once per upgrade. - The whole check is wrapped in try/catch so a malformed version string can never break plugin startup. Closes #39
27 lines
983 B
TypeScript
27 lines
983 B
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { compareVersions } from '../../src/utils/version';
|
|
|
|
describe('compareVersions', () => {
|
|
it('returns 0 for equal versions', () => {
|
|
expect(compareVersions('1.2.1', '1.2.1')).toBe(0);
|
|
});
|
|
|
|
it('compares patch versions', () => {
|
|
expect(compareVersions('1.2.1', '1.2.0')).toBeGreaterThan(0);
|
|
expect(compareVersions('1.2.0', '1.2.1')).toBeLessThan(0);
|
|
});
|
|
|
|
it('compares numerically, not lexically, across double-digit segments', () => {
|
|
expect(compareVersions('1.10.0', '1.9.0')).toBeGreaterThan(0);
|
|
expect(compareVersions('1.9.0', '1.10.0')).toBeLessThan(0);
|
|
});
|
|
|
|
it('treats a missing segment as 0', () => {
|
|
expect(compareVersions('1.2', '1.2.0')).toBe(0);
|
|
expect(compareVersions('1.2.1', '1.2')).toBeGreaterThan(0);
|
|
});
|
|
|
|
it('treats a non-numeric segment as 0', () => {
|
|
expect(compareVersions('1.x.0', '1.0.0')).toBe(0);
|
|
});
|
|
});
|