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

74 lines
1.9 KiB
TypeScript

import { describe, expect, test } from 'vitest';
import { DATA_TYPE, OPERATORS } from './constants';
import {
parseSessionPropertyFilters,
parseUniversalEventPropertyFilters,
serializeSessionPropertyFilters,
serializeUniversalEventPropertyFilters,
} from './params';
describe('session property filter params', () => {
test('serializes and parses session property filters', () => {
const filters = [
{
propertyName: 'user.id',
dataType: DATA_TYPE.string,
operator: OPERATORS.equals,
value: 'abc.123,xyz',
},
{
propertyName: 'created at',
dataType: DATA_TYPE.date,
operator: OPERATORS.before,
value: '2026-07-01',
},
];
const params = serializeSessionPropertyFilters(filters);
expect(params).toEqual({
spf0: '1.eq.user%2Eid.abc.123,xyz',
spf1: '4.bf.created%20at.2026-07-01',
});
expect(parseSessionPropertyFilters(params)).toEqual(filters);
});
test('ignores malformed session property filters', () => {
expect(
parseSessionPropertyFilters({
spf0: 'eq.user%2Eid.value',
spf1: '1.unknown.email.value',
spf2: '1.eq',
}),
).toEqual([]);
});
test('serializes and parses universal event property filters', () => {
const filters = [
{
propertyName: 'plan.id',
dataType: DATA_TYPE.string,
operator: OPERATORS.equals,
value: 'pro,team',
},
];
const params = serializeUniversalEventPropertyFilters(filters);
expect(params).toEqual({
epf0: '1.eq.plan%2Eid.pro,team',
});
expect(parseUniversalEventPropertyFilters(params)).toEqual(filters);
});
test('ignores malformed universal event property filters', () => {
expect(
parseUniversalEventPropertyFilters({
epf0: 'eq.plan%2Eid.value',
epf1: '1.unknown.email.value',
epf2: '1.eq',
}),
).toEqual([]);
});
});