99#import < XCTest/XCTest.h>
1010#import " BNCReferringURLUtility.h"
1111#import " BNCUrlQueryParameter.h"
12+ #import " BNCPreferenceHelper.h"
1213
1314@interface BNCReferringURLUtility (Test)
1415
15- - (NSMutableDictionary <NSString *, BNCUrlQueryParameter *> *)deserializeFromJson : (NSDictionary *)json ;
16- - (NSMutableDictionary *)serializeToJson : (NSMutableDictionary <NSString *, BNCUrlQueryParameter *> *)urlQueryParameters ;
17- - (NSTimeInterval )defaultValidityWindowForParam : (NSString *)paramName ;
18- - (BNCUrlQueryParameter *)findUrlQueryParam : (NSString *)paramName ;
16+ - (NSString *)addGclidValueFor : (NSString *)endpoint ;
17+ - (NSDictionary *)addGbraidValuesFor : (NSString *)endpoint ;
1918- (BOOL )isSupportedQueryParameter : (NSString *)param ;
20- - (NSDictionary *)addGbraidValuesFor : (NSString *)endpoint
21- - (NSString *)addGclidValueFor : (NSString *)endpoint
19+ - (BNCUrlQueryParameter *)findUrlQueryParam : (NSString *)paramName ;
20+ - (NSTimeInterval )defaultValidityWindowForParam : (NSString *)paramName ;
21+ - (NSMutableDictionary *)serializeToJson : (NSMutableDictionary <NSString *, BNCUrlQueryParameter *> *)urlQueryParameters ;
22+ - (NSMutableDictionary <NSString *, BNCUrlQueryParameter *> *)deserializeFromJson : (NSDictionary *)json ;
2223
2324@end
2425
@@ -28,59 +29,234 @@ @interface BNCReferringURLUtilityTests : XCTestCase
2829
2930@implementation BNCReferringURLUtilityTests
3031
31- // - (void)setUp {
32- // // Put setup code here. This method is called before the invocation of each test method in the class.
33- // }
34- //
35- // - (void)tearDown {
36- // // Put teardown code here. This method is called after the invocation of each test method in the class.
37- // }
32+ BNCPreferenceHelper *prefHelper;
33+ BNCReferringURLUtility *utility;
34+ NSString *gbraidValue;
35+ NSString *gclidValue;
3836
39- - (void )testParseURL {
40- NSURL *url = [NSURL URLWithString: @" https://www.branch.io?gbraid=abc123&test=456&gclid=123456789abc" ];
37+ NSString *eventEndpoint;
38+ NSString *openEndpoint;
39+
40+ - (void )setUp {
41+ prefHelper = [BNCPreferenceHelper sharedInstance ];
42+ prefHelper.referringURLQueryParameters = nil ;
4143
42- BNCReferringURLUtility *utility = [BNCReferringURLUtility new ];
43- [utility parseReferringURL: url];
44+ eventEndpoint = @" /v2/event" ;
45+ openEndpoint = @" /v1/open" ;
46+
47+ gclidValue = @" gclid123" ;
48+ gbraidValue = @" gbraid456" ;
4449
45- // TODO: Check that gbraid and gclid exist
50+ NSString *urlString = [NSString stringWithFormat: @" https://www.branch.io?test=456&gbraid=%@ &gclid=%@ " , gbraidValue, gclidValue];
51+ NSURL *url = [NSURL URLWithString: urlString];
4652
53+ utility = [BNCReferringURLUtility new ];
54+ [utility parseReferringURL: url];
4755}
4856
49- -(void )testGetEventURLQueryParams {
50- NSString *endpoint = @" /v2/event" ;
51- NSURL *url = [NSURL URLWithString: @" https://www.branch.io?gbraid=abc123&test=456&gclid=123456789abc" ];
57+ - (void )testParseURL {
58+ NSMutableDictionary *savedParams = prefHelper.referringURLQueryParameters ;
5259
53- BNCReferringURLUtility *utility = [BNCReferringURLUtility new ];
54- [utility parseReferringURL: url];
60+ // Remove the timestamp keys from savedParams for compare
61+ [savedParams enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
62+ NSMutableDictionary *paramDict = (NSMutableDictionary *)obj;
63+ [paramDict removeObjectForKey: @" timestamp" ];
64+ }];
5565
56- NSDictionary *params = [utility getURLQueryParamsForRequest: endpoint];
57- NSDictionary *expectedParams = @{@" gbraid" : @" abc123" ,
66+ NSMutableDictionary *gbraidDict = [NSMutableDictionary dictionary ];
67+ gbraidDict[@" isDeepLink" ] = @(1 );
68+ gbraidDict[@" name" ] = @" gbraid" ;
69+ gbraidDict[@" validityWindow" ] = @(2592000 );
70+ gbraidDict[@" value" ] = gbraidValue;
71+
72+ NSMutableDictionary *gclidDict = [NSMutableDictionary dictionary ];
73+ gclidDict[@" isDeepLink" ] = @(1 );
74+ gclidDict[@" name" ] = @" gclid" ;
75+ gclidDict[@" validityWindow" ] = @(0 );
76+ gclidDict[@" value" ] = gclidValue;
77+
78+ NSMutableDictionary *expectedParams = [NSMutableDictionary dictionary ];
79+ expectedParams[@" gbraid" ] = gbraidDict;
80+ expectedParams[@" gclid" ] = gclidDict;
81+
82+ XCTAssertEqualObjects (savedParams, expectedParams);
83+ }
84+
85+ -(void )testGetEventURLQueryParams {
86+
87+ NSDictionary *params = [utility getURLQueryParamsForRequest: eventEndpoint];
88+ NSDictionary *expectedParams = @{@" gbraid" : gbraidValue,
5889 @" gbraid_timestamp" : params[@" gbraid_timestamp" ],
59- @" gclid" : @" 123456789abc" };
60- NSLog (@" Event Params: %@ " , params);
61- NSLog (@" Expected Params: %@ " , expectedParams);
90+ @" gclid" : gclidValue};
6291
6392 XCTAssertEqualObjects (params, expectedParams);
6493}
6594
6695-(void )testGetOpenURLQueryParams {
67- NSString *endpoint = @" /v1/open" ;
68-
69- NSURL *url = [NSURL URLWithString: @" https://www.branch.io?gbraid=abc123&test=456&gclid=123456789abc" ];
7096
71- BNCReferringURLUtility *utility = [BNCReferringURLUtility new ];
72- [utility parseReferringURL: url];
73-
74- NSDictionary *params = [utility getURLQueryParamsForRequest: endpoint];
75- NSDictionary *expectedParams = @{@" gbraid" : @" abc123" ,
97+ NSDictionary *params = [utility getURLQueryParamsForRequest: openEndpoint];
98+ NSDictionary *expectedParams = @{@" gbraid" : gbraidValue,
7699 @" gbraid_timestamp" : params[@" gbraid_timestamp" ],
77100 @" is_deeplink_gbraid" : @YES ,
78- @" gclid" : @" 123456789abc " };
101+ @" gclid" : gclidValue };
79102
80- NSLog (@" Open Params: %@ " , params);
81- NSLog (@" Expected Params: %@ " , expectedParams);
82-
83103 XCTAssertEqualObjects (params, expectedParams);
84104}
85105
106+ -(void )testAddGclidValueFor {
107+ NSString *eventGclidValue = [utility addGclidValueFor: eventEndpoint];
108+ XCTAssertEqualObjects (eventGclidValue, gclidValue);
109+
110+ NSString *openGclidValue = [utility addGclidValueFor: openEndpoint];
111+ XCTAssertEqualObjects (openGclidValue, gclidValue);
112+ }
113+
114+ -(void )testAddGbraidValuesFor {
115+ NSDictionary *eventGbraidValue = [utility addGbraidValuesFor: eventEndpoint];
116+
117+ NSDictionary *expectedEventGraidValue = @{
118+ @" gbraid" : gbraidValue,
119+ @" gbraid_timestamp" : eventGbraidValue[@" gbraid_timestamp" ]
120+ };
121+
122+ XCTAssertEqualObjects (eventGbraidValue, expectedEventGraidValue);
123+
124+ NSDictionary *expectedOpenGraidValue = @{
125+ @" gbraid" : gbraidValue,
126+ @" gbraid_timestamp" : eventGbraidValue[@" gbraid_timestamp" ],
127+ @" is_deeplink_gbraid" : @(1 )
128+ };
129+
130+ NSDictionary *openGbraidValue = [utility addGbraidValuesFor: openEndpoint];
131+ XCTAssertEqualObjects (openGbraidValue, expectedOpenGraidValue);
132+ }
133+
134+ -(void )testIsSupportedQueryParameter {
135+ NSArray *validURLQueryParameters = @[@" gbraid" , @" gclid" ];
136+
137+ for (NSString *param in validURLQueryParameters) {
138+ XCTAssertTrue ([utility isSupportedQueryParameter: param]);
139+ }
140+
141+ }
142+
143+ -(void )testFindUrlQueryParam {
144+ BNCUrlQueryParameter *gbraid = [utility findUrlQueryParam: @" gbraid" ];
145+
146+ BNCUrlQueryParameter *expectedGbraid = [BNCUrlQueryParameter new ];
147+ expectedGbraid.name = @" gbraid" ;
148+ expectedGbraid.value = gbraidValue;
149+ expectedGbraid.timestamp = gbraid.timestamp ;
150+ expectedGbraid.validityWindow = gbraid.validityWindow ;
151+ expectedGbraid.isDeepLink = @(1 );
152+
153+ XCTAssertEqualObjects (gbraid, expectedGbraid);
154+
155+ BNCUrlQueryParameter *gclid = [utility findUrlQueryParam: @" gclid" ];
156+
157+ BNCUrlQueryParameter *expectedGclid = [BNCUrlQueryParameter new ];
158+ expectedGclid.name = @" gclid" ;
159+ expectedGclid.value = gclidValue;
160+ expectedGclid.timestamp = gclid.timestamp ;
161+ expectedGclid.validityWindow = gclid.validityWindow ;
162+ expectedGclid.isDeepLink = @(1 );
163+
164+ XCTAssertEqualObjects (gclid, expectedGclid);
165+ }
166+
167+ -(void )testDefaultValidityWindowForParam {
168+
169+ XCTAssertEqual (2592000 , [utility defaultValidityWindowForParam: @" gbraid" ]);
170+ XCTAssertEqual (0 , [utility defaultValidityWindowForParam: @" gclid" ]);
171+ }
172+
173+ -(void )testSerializeToJson {
174+
175+ NSDate *currentDate = [NSDate date ];
176+ NSMutableDictionary <NSString *, BNCUrlQueryParameter *> * params = [NSMutableDictionary new ];
177+
178+ BNCUrlQueryParameter *gbraidObj = [BNCUrlQueryParameter new ];
179+ gbraidObj.name = @" gbraid" ;
180+ gbraidObj.value = gbraidValue;
181+ gbraidObj.timestamp = currentDate;
182+ gbraidObj.validityWindow = 2592000 ;
183+ gbraidObj.isDeepLink = @(1 );
184+ params[@" gbraid" ] = gbraidObj;
185+
186+ BNCUrlQueryParameter *gclidObj = [BNCUrlQueryParameter new ];
187+ gclidObj.name = @" gclid" ;
188+ gclidObj.value = gclidValue;
189+ gclidObj.timestamp = currentDate;
190+ gclidObj.validityWindow = 0 ;
191+ gclidObj.isDeepLink = @(1 );
192+ params[@" gclid" ] = gclidObj;
193+
194+ NSMutableDictionary *json = [utility serializeToJson: params];
195+
196+ NSDictionary *expectedJSON = @{
197+ @" gbraid" : @{
198+ @" isDeepLink" : @(1 ),
199+ @" name" : @" gbraid" ,
200+ @" timestamp" : currentDate,
201+ @" validityWindow" : @(2592000 ),
202+ @" value" : @" gbraid456"
203+ },
204+ @" gclid" : @{
205+ @" isDeepLink" : @(1 ),
206+ @" name" : @" gclid" ,
207+ @" timestamp" : currentDate,
208+ @" validityWindow" : @(0 ),
209+ @" value" : @" gclid123"
210+ }
211+ };
212+
213+ XCTAssertEqualObjects (expectedJSON, json);
214+
215+ NSMutableDictionary <NSString *, BNCUrlQueryParameter *> * deserializedParams = [utility deserializeFromJson: json];
216+ XCTAssertEqualObjects (params, deserializedParams);
217+ }
218+
219+ -(void )testDeserializeFromJson {
220+ NSDate *currentDate = [NSDate date ];
221+
222+ NSMutableDictionary <NSString *, BNCUrlQueryParameter *> * params = [NSMutableDictionary new ];
223+
224+ BNCUrlQueryParameter *gbraidObj = [BNCUrlQueryParameter new ];
225+ gbraidObj.name = @" gbraid" ;
226+ gbraidObj.value = gbraidValue;
227+ gbraidObj.timestamp = currentDate;
228+ gbraidObj.validityWindow = 2592000 ;
229+ gbraidObj.isDeepLink = @(1 );
230+ params[@" gbraid" ] = gbraidObj;
231+
232+ BNCUrlQueryParameter *gclidObj = [BNCUrlQueryParameter new ];
233+ gclidObj.name = @" gclid" ;
234+ gclidObj.value = gclidValue;
235+ gclidObj.timestamp = currentDate;
236+ gclidObj.validityWindow = 0 ;
237+ gclidObj.isDeepLink = @(1 );
238+ params[@" gclid" ] = gclidObj;
239+
240+ NSDictionary *json = @{
241+ @" gbraid" : @{
242+ @" isDeepLink" : @(1 ),
243+ @" name" : @" gbraid" ,
244+ @" timestamp" : currentDate,
245+ @" validityWindow" : @(2592000 ),
246+ @" value" : @" gbraid456"
247+ },
248+ @" gclid" : @{
249+ @" isDeepLink" : @(1 ),
250+ @" name" : @" gclid" ,
251+ @" timestamp" : currentDate,
252+ @" validityWindow" : @(0 ),
253+ @" value" : @" gclid123"
254+ }
255+ };
256+
257+ NSMutableDictionary <NSString *, BNCUrlQueryParameter *> * deserializedParams = [utility deserializeFromJson: json];
258+
259+ XCTAssertEqualObjects (deserializedParams, params);
260+ }
261+
86262@end
0 commit comments