Files
umami/src/lib/share.test.ts
T

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