mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 13:21:46 +00:00
5952e02971
Prevents users who upgrade across multiple versions from seeing all interim notices at once. Version bounds are evaluated server-side using semver.coerce so prerelease builds compare as their base release. Range is lower-inclusive, upper-exclusive: maxVersion: '4.0.0' hides the notice once 4.0.0 ships.
57 lines
2.1 KiB
TypeScript
57 lines
2.1 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { isNoticeVersionActive } from '../../../src/systemNotices/service.js';
|
|
import type { SystemNotice } from '../../../src/systemNotices/types.js';
|
|
|
|
const base: SystemNotice = {
|
|
id: 'test-notice',
|
|
display: 'modal',
|
|
severity: 'info',
|
|
titleKey: 'k',
|
|
bodyKey: 'k',
|
|
dismissible: true,
|
|
conditions: [],
|
|
publishedAt: '2026-01-01T00:00:00Z',
|
|
};
|
|
|
|
describe('isNoticeVersionActive', () => {
|
|
it('passes when no bounds are set', () => {
|
|
expect(isNoticeVersionActive(base, '3.5.0')).toBe(true);
|
|
});
|
|
|
|
it('passes when app version equals minVersion (inclusive)', () => {
|
|
expect(isNoticeVersionActive({ ...base, minVersion: '3.0.0' }, '3.0.0')).toBe(true);
|
|
});
|
|
|
|
it('fails when app version is below minVersion', () => {
|
|
expect(isNoticeVersionActive({ ...base, minVersion: '3.0.0' }, '2.9.9')).toBe(false);
|
|
});
|
|
|
|
it('fails when app version equals maxVersion (exclusive upper bound)', () => {
|
|
expect(isNoticeVersionActive({ ...base, maxVersion: '3.0.0' }, '3.0.0')).toBe(false);
|
|
});
|
|
|
|
it('fails when app version exceeds maxVersion', () => {
|
|
expect(isNoticeVersionActive({ ...base, maxVersion: '3.0.0' }, '3.0.1')).toBe(false);
|
|
});
|
|
|
|
it('passes when app version is just below maxVersion', () => {
|
|
expect(isNoticeVersionActive({ ...base, maxVersion: '3.0.0' }, '2.9.9')).toBe(true);
|
|
});
|
|
|
|
it('passes when app version is inside [minVersion, maxVersion)', () => {
|
|
expect(isNoticeVersionActive({ ...base, minVersion: '3.0.0', maxVersion: '3.9.9' }, '3.5.2')).toBe(true);
|
|
});
|
|
|
|
it('treats prerelease app version as base release (semver.coerce)', () => {
|
|
expect(isNoticeVersionActive({ ...base, minVersion: '3.0.0' }, '3.0.0-pre.42')).toBe(true);
|
|
});
|
|
|
|
it('skips notice and returns false when minVersion is invalid semver', () => {
|
|
expect(isNoticeVersionActive({ ...base, minVersion: 'not-semver' }, '3.0.0')).toBe(false);
|
|
});
|
|
|
|
it('skips notice and returns false when maxVersion is invalid semver', () => {
|
|
expect(isNoticeVersionActive({ ...base, maxVersion: 'garbage' }, '3.0.0')).toBe(false);
|
|
});
|
|
});
|