51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
import { describe, expect, test } from 'vitest';
|
|
import { allowShareFilter, excludeShareFilterParam, getShareTheme } from './share';
|
|
|
|
describe('allowShareFilter', () => {
|
|
test('returns true when parameters are missing', () => {
|
|
expect(allowShareFilter()).toBe(true);
|
|
expect(allowShareFilter(null)).toBe(true);
|
|
});
|
|
|
|
test('returns true unless allowFilter is explicitly false', () => {
|
|
expect(allowShareFilter({ allowFilter: true } as any)).toBe(true);
|
|
expect(allowShareFilter({} as any)).toBe(true);
|
|
expect(allowShareFilter({ allowFilter: false } as any)).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('getShareTheme', () => {
|
|
test('returns light or dark when valid', () => {
|
|
expect(getShareTheme({ theme: 'light' } as any)).toBe('light');
|
|
expect(getShareTheme({ theme: 'dark' } as any)).toBe('dark');
|
|
});
|
|
|
|
test('returns undefined for missing or invalid themes', () => {
|
|
expect(getShareTheme()).toBeUndefined();
|
|
expect(getShareTheme(null)).toBeUndefined();
|
|
expect(getShareTheme({ theme: 'blue' } as any)).toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe('excludeShareFilterParam', () => {
|
|
test('returns true for known filter columns', () => {
|
|
expect(excludeShareFilterParam('path')).toBe(true);
|
|
expect(excludeShareFilterParam('country')).toBe(true);
|
|
});
|
|
|
|
test('strips trailing digits before matching filter columns', () => {
|
|
expect(excludeShareFilterParam('path2')).toBe(true);
|
|
});
|
|
|
|
test('returns true for reserved query params', () => {
|
|
expect(excludeShareFilterParam('segment')).toBe(true);
|
|
expect(excludeShareFilterParam('cohort')).toBe(true);
|
|
expect(excludeShareFilterParam('match')).toBe(true);
|
|
expect(excludeShareFilterParam('excludeBounce')).toBe(true);
|
|
});
|
|
|
|
test('returns false for unrelated keys', () => {
|
|
expect(excludeShareFilterParam('foo')).toBe(false);
|
|
});
|
|
});
|