-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathutm.test.ts
More file actions
139 lines (119 loc) · 4.54 KB
/
utm.test.ts
File metadata and controls
139 lines (119 loc) · 4.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import { validateUtmParams } from '../../src/utils/utm/utm';
describe('UTM Utils', () => {
describe('validateUtmParams', () => {
it('should return empty object for undefined or null utm', () => {
expect(validateUtmParams(undefined)).toEqual({});
expect(validateUtmParams(null as any)).toEqual({});
});
it('should return empty object for empty object', () => {
expect(validateUtmParams({})).toEqual({});
});
it('should return empty object for non-object types', () => {
expect(validateUtmParams('string' as any)).toEqual({});
expect(validateUtmParams(123 as any)).toEqual({});
expect(validateUtmParams(true as any)).toEqual({});
expect(validateUtmParams([] as any)).toEqual({});
});
it('should filter out invalid UTM keys', () => {
const result1 = validateUtmParams({ invalidKey: 'value' } as any);
expect(result1).toEqual({});
const result2 = validateUtmParams({ source: 'google', invalidKey: 'value' } as any);
expect(result2).toEqual({ source: 'google' });
});
it('should return valid UTM parameters', () => {
const result1 = validateUtmParams({ source: 'google' });
expect(result1).toEqual({ source: 'google' });
const result2 = validateUtmParams({ medium: 'cpc' });
expect(result2).toEqual({ medium: 'cpc' });
});
it('should validate multiple UTM keys correctly', () => {
const validUtm = {
source: 'google',
medium: 'cpc',
campaign: 'spring_2025_launch',
content: 'ad_variant_a',
term: 'error_tracker',
};
const result = validateUtmParams(validUtm);
expect(result).toEqual(validUtm);
});
it('should filter out non-string values', () => {
const result1 = validateUtmParams({ source: 123 } as any);
expect(result1).toEqual({});
const result2 = validateUtmParams({ source: 'google', medium: true } as any);
expect(result2).toEqual({ source: 'google' });
});
it('should filter out empty string values', () => {
const result = validateUtmParams({ source: '' });
expect(result).toEqual({});
});
it('should filter out values that are too long', () => {
const longValue = 'a'.repeat(51);
const result = validateUtmParams({ source: longValue });
expect(result).toEqual({});
});
it('should accept values at maximum length', () => {
const maxLengthValue = 'a'.repeat(50);
const result = validateUtmParams({ source: maxLengthValue });
expect(result).toEqual({ source: maxLengthValue });
});
it('should filter out values with invalid characters', () => {
const result1 = validateUtmParams({ source: 'google@example' });
expect(result1).toEqual({});
const result2 = validateUtmParams({ source: 'google######' });
expect(result2).toEqual({});
});
it('should accept values with valid characters', () => {
const result = validateUtmParams({ source: 'google-ads' });
expect(result).toEqual({ source: 'google-ads' });
const result2 = validateUtmParams({
source: 'google_ads',
medium: 'cpc-campaign',
campaign: 'spring.2025',
content: 'Ad Variant 123',
term: 'error tracker',
});
expect(result2).toEqual({
source: 'google_ads',
medium: 'cpc-campaign',
campaign: 'spring.2025',
content: 'Ad Variant 123',
term: 'error tracker',
});
});
it('should handle mixed valid and invalid keys', () => {
const input = {
source: 'google',
medium: 'invalid@chars',
campaign: 'valid_campaign',
invalidKey: 'value',
} as any;
const result = validateUtmParams(input);
expect(result).toEqual({ source: 'google', campaign: 'valid_campaign' });
});
it('should filter out undefined and null values', () => {
const result = validateUtmParams({
source: 'google',
medium: undefined,
campaign: null,
} as any);
expect(result).toEqual({ source: 'google' });
});
it('should validate each parameter independently', () => {
const input = {
source: '######', // invalid chars
medium: 'cpc', // valid
campaign: 'spring_2025_launch', // valid
content: 'ad_variant_a', // valid
term: 'error_tracker', // valid
};
const result = validateUtmParams(input);
expect(result).toEqual({
medium: 'cpc',
campaign: 'spring_2025_launch',
content: 'ad_variant_a',
term: 'error_tracker',
});
});
});
});