@@ -2,84 +2,144 @@ import { validateUtmParams, sanitizeUtmParams } from '../../src/utils/utm/utm';
22
33describe ( 'UTM Utils' , ( ) => {
44 describe ( 'validateUtmParams' , ( ) => {
5- it ( 'should return true for undefined or null utm' , ( ) => {
6- expect ( validateUtmParams ( undefined ) ) . toBe ( true ) ;
7- expect ( validateUtmParams ( null as any ) ) . toBe ( true ) ;
5+ it ( 'should return valid result for undefined or null utm' , ( ) => {
6+ expect ( validateUtmParams ( undefined ) ) . toEqual ( {
7+ isValid : true ,
8+ validKeys : [ ] ,
9+ invalidKeys : [ ] ,
10+ } ) ;
11+ expect ( validateUtmParams ( null as any ) ) . toEqual ( {
12+ isValid : true ,
13+ validKeys : [ ] ,
14+ invalidKeys : [ ] ,
15+ } ) ;
816 } ) ;
917
10- it ( 'should return true for empty object' , ( ) => {
11- expect ( validateUtmParams ( { } ) ) . toBe ( true ) ;
18+ it ( 'should return valid result for empty object' , ( ) => {
19+ expect ( validateUtmParams ( { } ) ) . toEqual ( { isValid : true , validKeys : [ ] , invalidKeys : [ ] } ) ;
1220 } ) ;
1321
14- it ( 'should return false for non-object types' , ( ) => {
15- expect ( validateUtmParams ( 'string' as any ) ) . toBe ( false ) ;
16- expect ( validateUtmParams ( 123 as any ) ) . toBe ( false ) ;
17- expect ( validateUtmParams ( true as any ) ) . toBe ( false ) ;
18- expect ( validateUtmParams ( [ ] as any ) ) . toBe ( false ) ;
22+ it ( 'should return invalid result for non-object types' , ( ) => {
23+ expect ( validateUtmParams ( 'string' as any ) ) . toEqual ( {
24+ isValid : false ,
25+ validKeys : [ ] ,
26+ invalidKeys : [ '_structure' ] ,
27+ } ) ;
28+ expect ( validateUtmParams ( 123 as any ) ) . toEqual ( {
29+ isValid : false ,
30+ validKeys : [ ] ,
31+ invalidKeys : [ '_structure' ] ,
32+ } ) ;
33+ expect ( validateUtmParams ( true as any ) ) . toEqual ( {
34+ isValid : false ,
35+ validKeys : [ ] ,
36+ invalidKeys : [ '_structure' ] ,
37+ } ) ;
38+ expect ( validateUtmParams ( [ ] as any ) ) . toEqual ( {
39+ isValid : false ,
40+ validKeys : [ ] ,
41+ invalidKeys : [ '_structure' ] ,
42+ } ) ;
1943 } ) ;
2044
21- it ( 'should return false for invalid UTM keys' , ( ) => {
22- expect ( validateUtmParams ( { invalidKey : 'value' } as any ) ) . toBe ( false ) ;
23- expect ( validateUtmParams ( { source : 'google' , invalidKey : 'value' } as any ) ) . toBe ( false ) ;
45+ it ( 'should identify invalid UTM keys' , ( ) => {
46+ const result1 = validateUtmParams ( { invalidKey : 'value' } as any ) ;
47+ expect ( result1 . isValid ) . toBe ( false ) ;
48+ expect ( result1 . invalidKeys ) . toContain ( 'invalidKey' ) ;
49+ expect ( result1 . validKeys ) . toEqual ( [ ] ) ;
50+
51+ const result2 = validateUtmParams ( { source : 'google' , invalidKey : 'value' } as any ) ;
52+ expect ( result2 . isValid ) . toBe ( false ) ;
53+ expect ( result2 . invalidKeys ) . toContain ( 'invalidKey' ) ;
54+ expect ( result2 . validKeys ) . toContain ( 'source' ) ;
2455 } ) ;
2556
26- it ( 'should return true for valid UTM keys' , ( ) => {
27- expect ( validateUtmParams ( { source : 'google' } ) ) . toBe ( true ) ;
28- expect ( validateUtmParams ( { medium : 'cpc' } ) ) . toBe ( true ) ;
29- expect ( validateUtmParams ( { campaign : 'spring_2025' } ) ) . toBe ( true ) ;
30- expect ( validateUtmParams ( { content : 'ad_variant_a' } ) ) . toBe ( true ) ;
31- expect ( validateUtmParams ( { term : 'error_tracker' } ) ) . toBe ( true ) ;
57+ it ( 'should return valid result for valid UTM keys' , ( ) => {
58+ const result1 = validateUtmParams ( { source : 'google' } ) ;
59+ expect ( result1 . isValid ) . toBe ( true ) ;
60+ expect ( result1 . validKeys ) . toContain ( 'source' ) ;
61+ expect ( result1 . invalidKeys ) . toEqual ( [ ] ) ;
62+
63+ const result2 = validateUtmParams ( { medium : 'cpc' } ) ;
64+ expect ( result2 . isValid ) . toBe ( true ) ;
65+ expect ( result2 . validKeys ) . toContain ( 'medium' ) ;
3266 } ) ;
3367
34- it ( 'should return true for multiple valid UTM keys' , ( ) => {
68+ it ( 'should validate multiple UTM keys correctly ' , ( ) => {
3569 const validUtm = {
3670 source : 'google' ,
3771 medium : 'cpc' ,
3872 campaign : 'spring_2025_launch' ,
3973 content : 'ad_variant_a' ,
4074 term : 'error_tracker' ,
4175 } ;
42- expect ( validateUtmParams ( validUtm ) ) . toBe ( true ) ;
76+ const result = validateUtmParams ( validUtm ) ;
77+ expect ( result . isValid ) . toBe ( true ) ;
78+ expect ( result . validKeys ) . toEqual ( [ 'source' , 'medium' , 'campaign' , 'content' , 'term' ] ) ;
79+ expect ( result . invalidKeys ) . toEqual ( [ ] ) ;
4380 } ) ;
4481
45- it ( 'should return false for non-string values' , ( ) => {
46- expect ( validateUtmParams ( { source : 123 } as any ) ) . toBe ( false ) ;
47- expect ( validateUtmParams ( { source : true } as any ) ) . toBe ( false ) ;
48- expect ( validateUtmParams ( { source : { } } as any ) ) . toBe ( false ) ;
49- expect ( validateUtmParams ( { source : [ ] } as any ) ) . toBe ( false ) ;
82+ it ( 'should identify non-string values as invalid' , ( ) => {
83+ const result1 = validateUtmParams ( { source : 123 } as any ) ;
84+ expect ( result1 . isValid ) . toBe ( false ) ;
85+ expect ( result1 . invalidKeys ) . toContain ( 'source' ) ;
86+
87+ const result2 = validateUtmParams ( { source : 'google' , medium : true } as any ) ;
88+ expect ( result2 . isValid ) . toBe ( false ) ;
89+ expect ( result2 . validKeys ) . toContain ( 'source' ) ;
90+ expect ( result2 . invalidKeys ) . toContain ( 'medium' ) ;
5091 } ) ;
5192
52- it ( 'should return false for empty string values' , ( ) => {
53- expect ( validateUtmParams ( { source : '' } ) ) . toBe ( false ) ;
93+ it ( 'should identify empty string values as invalid' , ( ) => {
94+ const result = validateUtmParams ( { source : '' } ) ;
95+ expect ( result . isValid ) . toBe ( false ) ;
96+ expect ( result . invalidKeys ) . toContain ( 'source' ) ;
5497 } ) ;
5598
56- it ( 'should return false for values that are too long' , ( ) => {
99+ it ( 'should identify values that are too long as invalid ' , ( ) => {
57100 const longValue = 'a' . repeat ( 201 ) ;
58- expect ( validateUtmParams ( { source : longValue } ) ) . toBe ( false ) ;
101+ const result = validateUtmParams ( { source : longValue } ) ;
102+ expect ( result . isValid ) . toBe ( false ) ;
103+ expect ( result . invalidKeys ) . toContain ( 'source' ) ;
59104 } ) ;
60105
61- it ( 'should return true for values at maximum length' , ( ) => {
106+ it ( 'should accept values at maximum length' , ( ) => {
62107 const maxLengthValue = 'a' . repeat ( 200 ) ;
63- expect ( validateUtmParams ( { source : maxLengthValue } ) ) . toBe ( true ) ;
108+ const result = validateUtmParams ( { source : maxLengthValue } ) ;
109+ expect ( result . isValid ) . toBe ( true ) ;
110+ expect ( result . validKeys ) . toContain ( 'source' ) ;
111+ } ) ;
112+
113+ it ( 'should identify values with invalid characters' , ( ) => {
114+ const result = validateUtmParams ( { source : 'google@example' } ) ;
115+ expect ( result . isValid ) . toBe ( false ) ;
116+ expect ( result . invalidKeys ) . toContain ( 'source' ) ;
64117 } ) ;
65118
66- it ( 'should return false for values with invalid characters' , ( ) => {
67- expect ( validateUtmParams ( { source : 'google@example' } ) ) . toBe ( false ) ;
68- expect ( validateUtmParams ( { source : 'google#hash' } ) ) . toBe ( false ) ;
69- expect ( validateUtmParams ( { source : 'google$money' } ) ) . toBe ( false ) ;
70- expect ( validateUtmParams ( { source : 'google%percent' } ) ) . toBe ( false ) ;
119+ it ( 'should accept values with valid characters' , ( ) => {
120+ const result = validateUtmParams ( { source : 'google-ads' } ) ;
121+ expect ( result . isValid ) . toBe ( true ) ;
122+ expect ( result . validKeys ) . toContain ( 'source' ) ;
71123 } ) ;
72124
73- it ( 'should return true for values with valid characters' , ( ) => {
74- expect ( validateUtmParams ( { source : 'google-ads' } ) ) . toBe ( true ) ;
75- expect ( validateUtmParams ( { source : 'google_ads' } ) ) . toBe ( true ) ;
76- expect ( validateUtmParams ( { source : 'google.com' } ) ) . toBe ( true ) ;
77- expect ( validateUtmParams ( { source : 'Google Ads 123' } ) ) . toBe ( true ) ;
125+ it ( 'should handle mixed valid and invalid keys' , ( ) => {
126+ const input = {
127+ source : 'google' ,
128+ medium : 'invalid@chars' ,
129+ campaign : 'valid_campaign' ,
130+ invalidKey : 'value' ,
131+ } as any ;
132+ const result = validateUtmParams ( input ) ;
133+ expect ( result . isValid ) . toBe ( false ) ;
134+ expect ( result . validKeys ) . toEqual ( [ 'source' , 'campaign' ] ) ;
135+ expect ( result . invalidKeys ) . toEqual ( [ 'medium' , 'invalidKey' ] ) ;
78136 } ) ;
79137
80138 it ( 'should handle undefined and null values in object' , ( ) => {
81- expect ( validateUtmParams ( { source : 'google' , medium : undefined } ) ) . toBe ( true ) ;
82- expect ( validateUtmParams ( { source : 'google' , medium : null as any } ) ) . toBe ( true ) ;
139+ const result = validateUtmParams ( { source : 'google' , medium : undefined } ) ;
140+ expect ( result . isValid ) . toBe ( true ) ;
141+ expect ( result . validKeys ) . toContain ( 'source' ) ;
142+ expect ( result . validKeys ) . toContain ( 'medium' ) ;
83143 } ) ;
84144 } ) ;
85145
0 commit comments