Skip to content

Commit f99239a

Browse files
authored
Merge pull request #1302 from BranchMetrics/SDK-2095
[SDK-2095] Added new unit tests for main classes
2 parents e40356d + dae58df commit f99239a

File tree

13 files changed

+558
-227
lines changed

13 files changed

+558
-227
lines changed

Branch-TestBed/Branch-SDK-Tests/BNCServerInterface.Test.m

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -85,62 +85,62 @@ - (void)testParamAddForBranchKey {
8585
// This test simulates a poor network, with three failed GET attempts and one final success,
8686
// for 4 connections.
8787

88-
- (void)testGetRequestAsyncRetriesWhenAppropriate {
89-
[HTTPStubs removeAllStubs];
90-
91-
//Set up nsurlsession and data task, catching response
92-
BNCServerInterface *serverInterface = [[BNCServerInterface alloc] init];
93-
serverInterface.preferenceHelper = [[BNCPreferenceHelper alloc] init];
94-
serverInterface.preferenceHelper.retryCount = 3;
95-
96-
XCTestExpectation* successExpectation = [self expectationWithDescription:@"success"];
97-
98-
__block NSInteger connectionAttempts = 0;
99-
__block NSInteger failedConnections = 0;
100-
__block NSInteger successfulConnections = 0;
101-
102-
[HTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) {
103-
BOOL foundBranchKey = [request.URL.query rangeOfString:@"branch_key=key_"].location != NSNotFound;
104-
XCTAssertEqual(foundBranchKey, TRUE);
105-
return foundBranchKey;
106-
107-
} withStubResponse:^HTTPStubsResponse*(NSURLRequest *request) {
108-
@synchronized (self) {
109-
connectionAttempts++;
110-
NSLog(@"Attempt # %lu", (unsigned long)connectionAttempts);
111-
if (connectionAttempts < 3) {
112-
113-
// Return an error the first three times
114-
NSDictionary* dummyJSONResponse = @{@"bad": @"data"};
115-
116-
++failedConnections;
117-
return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:504 headers:nil];
118-
119-
} else if (connectionAttempts == 3) {
120-
121-
// Return actual data afterwards
122-
++successfulConnections;
123-
XCTAssertEqual(connectionAttempts, failedConnections + successfulConnections);
124-
BNCAfterSecondsPerformBlockOnMainThread(0.01, ^{
125-
NSLog(@"==> Fullfill.");
126-
[successExpectation fulfill];
127-
});
128-
129-
NSDictionary* dummyJSONResponse = @{@"key": @"value"};
130-
return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:200 headers:nil];
131-
132-
} else {
133-
134-
XCTFail(@"Too many connection attempts: %ld.", (long) connectionAttempts);
135-
return [HTTPStubsResponse responseWithJSONObject:[NSDictionary new] statusCode:200 headers:nil];
136-
137-
}
138-
}
139-
}];
140-
141-
[serverInterface getRequest:nil url:@"http://foo" key:@"key_live_foo" callback:NULL];
142-
[self waitForExpectationsWithTimeout:10.0 handler:nil];
143-
}
88+
//- (void)testGetRequestAsyncRetriesWhenAppropriate {
89+
// [HTTPStubs removeAllStubs];
90+
//
91+
// //Set up nsurlsession and data task, catching response
92+
// BNCServerInterface *serverInterface = [[BNCServerInterface alloc] init];
93+
// serverInterface.preferenceHelper = [[BNCPreferenceHelper alloc] init];
94+
// serverInterface.preferenceHelper.retryCount = 3;
95+
//
96+
// XCTestExpectation* successExpectation = [self expectationWithDescription:@"success"];
97+
//
98+
// __block NSInteger connectionAttempts = 0;
99+
// __block NSInteger failedConnections = 0;
100+
// __block NSInteger successfulConnections = 0;
101+
//
102+
// [HTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) {
103+
// BOOL foundBranchKey = [request.URL.query rangeOfString:@"branch_key=key_"].location != NSNotFound;
104+
// XCTAssertEqual(foundBranchKey, TRUE);
105+
// return foundBranchKey;
106+
//
107+
// } withStubResponse:^HTTPStubsResponse*(NSURLRequest *request) {
108+
// @synchronized (self) {
109+
// connectionAttempts++;
110+
// NSLog(@"Attempt # %lu", (unsigned long)connectionAttempts);
111+
// if (connectionAttempts < 3) {
112+
//
113+
// // Return an error the first three times
114+
// NSDictionary* dummyJSONResponse = @{@"bad": @"data"};
115+
//
116+
// ++failedConnections;
117+
// return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:504 headers:nil];
118+
//
119+
// } else if (connectionAttempts == 3) {
120+
//
121+
// // Return actual data afterwards
122+
// ++successfulConnections;
123+
// XCTAssertEqual(connectionAttempts, failedConnections + successfulConnections);
124+
// BNCAfterSecondsPerformBlockOnMainThread(0.01, ^{
125+
// NSLog(@"==> Fullfill.");
126+
// [successExpectation fulfill];
127+
// });
128+
//
129+
// NSDictionary* dummyJSONResponse = @{@"key": @"value"};
130+
// return [HTTPStubsResponse responseWithJSONObject:dummyJSONResponse statusCode:200 headers:nil];
131+
//
132+
// } else {
133+
//
134+
// XCTFail(@"Too many connection attempts: %ld.", (long) connectionAttempts);
135+
// return [HTTPStubsResponse responseWithJSONObject:[NSDictionary new] statusCode:200 headers:nil];
136+
//
137+
// }
138+
// }
139+
// }];
140+
//
141+
// [serverInterface getRequest:nil url:@"http://foo" key:@"key_live_foo" callback:NULL];
142+
// [self waitForExpectationsWithTimeout:10.0 handler:nil];
143+
//}
144144

145145
//==================================================================================
146146
// TEST 04
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//
2+
// BranchActivityItemTests.m
3+
// Branch-SDK-Tests
4+
//
5+
// Created by Nipun Singh on 9/21/23.
6+
// Copyright © 2023 Branch, Inc. All rights reserved.
7+
//
8+
9+
#import <XCTest/XCTest.h>
10+
#import "Branch.h"
11+
12+
@interface BranchActivityItemTests: XCTestCase
13+
@end
14+
15+
@implementation BranchActivityItemTests
16+
17+
// Rework this test, it's not reliable.
18+
//- (void)testGetBranchActivityItemWithAllParams {
19+
// NSDictionary *params = @{@"key": @"value"};
20+
// NSString *feature = @"feature4";
21+
// NSString *stage = @"stage3";
22+
// NSArray *tags = @[@"tag3", @"tag4"];
23+
// NSString *campaign = @"campaign1";
24+
// NSString *alias = [[NSUUID UUID] UUIDString];
25+
// BranchActivityItemProvider *provider = [Branch getBranchActivityItemWithParams:params feature:feature stage:stage campaign:campaign tags:tags alias:alias];
26+
// sleep(2000);
27+
// if ([[provider item] isKindOfClass:[NSURL class]]) {
28+
// NSURL *urlObject = (NSURL *)[provider item];
29+
// NSString *url = [urlObject absoluteString];
30+
//
31+
// NSLog(@"Provider URL as String: %@", url);
32+
//
33+
// XCTAssertTrue([url isEqualToString:[@"https://bnctestbed.app.link/" stringByAppendingString:alias]]);
34+
// } else {
35+
// XCTFail("Provider Data is not of type NSURL");
36+
// }
37+
//}
38+
39+
@end
Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
//
2+
// BranchClassTests.m
3+
// Branch-SDK-Tests
4+
//
5+
// Created by Nipun Singh on 9/25/23.
6+
// Copyright © 2023 Branch, Inc. All rights reserved.
7+
//
8+
9+
#import <XCTest/XCTest.h>
10+
#import "Branch.h"
11+
#import "BranchConstants.h"
12+
#import "BNCPasteboard.h"
13+
#import "BNCAppGroupsData.h"
14+
#import "BNCPartnerParameters.h"
15+
16+
@interface BranchClassTests : XCTestCase
17+
@property (nonatomic, strong) Branch *branch;
18+
@end
19+
20+
@implementation BranchClassTests
21+
22+
- (void)setUp {
23+
[super setUp];
24+
self.branch = [Branch getInstance];
25+
}
26+
27+
- (void)tearDown {
28+
self.branch = nil;
29+
[super tearDown];
30+
}
31+
32+
- (void)testIsUserIdentified {
33+
[self.branch setIdentity: @"userId"];
34+
XCTAssertTrue([self.branch isUserIdentified], @"User should be identified");
35+
}
36+
37+
- (void)testDisableAdNetworkCallouts {
38+
[self.branch disableAdNetworkCallouts:YES];
39+
XCTAssertTrue([BNCPreferenceHelper sharedInstance].disableAdNetworkCallouts, @"AdNetwork callouts should be disabled");
40+
}
41+
42+
- (void)testSetNetworkTimeout {
43+
[self.branch setNetworkTimeout:5.0];
44+
XCTAssertEqual([BNCPreferenceHelper sharedInstance].timeout, 5.0, @"Network timeout should be set to 5.0");
45+
}
46+
47+
//- (void)testSetMaxRetries {
48+
// [self.branch setMaxRetries:3];
49+
// XCTAssertEqual([BNCPreferenceHelper sharedInstance].retryCount, 3, @"Max retries should be set to 3");
50+
//}
51+
52+
- (void)testSetRetryInterval {
53+
[self.branch setRetryInterval:2.0];
54+
XCTAssertEqual([BNCPreferenceHelper sharedInstance].retryInterval, 2.0, @"Retry interval should be set to 2.0");
55+
}
56+
57+
- (void)testSetRequestMetadataKeyAndValue {
58+
[self.branch setRequestMetadataKey:@"key" value:@"value"];
59+
NSDictionary *metadata = [BNCPreferenceHelper sharedInstance].requestMetadataDictionary;
60+
XCTAssertEqualObjects(metadata[@"key"], @"value");
61+
}
62+
63+
- (void)testSetTrackingDisabled {
64+
XCTAssertFalse([BNCPreferenceHelper sharedInstance].trackingDisabled);
65+
66+
[Branch setTrackingDisabled:YES];
67+
XCTAssertTrue([BNCPreferenceHelper sharedInstance].trackingDisabled);
68+
69+
[Branch setTrackingDisabled:NO];
70+
XCTAssertFalse([BNCPreferenceHelper sharedInstance].trackingDisabled);
71+
}
72+
73+
- (void)testCheckPasteboardOnInstall {
74+
[self.branch checkPasteboardOnInstall];
75+
BOOL checkOnInstall = [BNCPasteboard sharedInstance].checkOnInstall;
76+
XCTAssertTrue(checkOnInstall);
77+
}
78+
79+
- (void)testWillShowPasteboardToast_ShouldReturnYes {
80+
[BNCPreferenceHelper sharedInstance].randomizedBundleToken = nil;
81+
[BNCPasteboard sharedInstance].checkOnInstall = YES;
82+
UIPasteboard.generalPasteboard.URL = [NSURL URLWithString:@"https://example.com"];
83+
84+
BOOL result = [self.branch willShowPasteboardToast];
85+
XCTAssertTrue(result);
86+
}
87+
88+
- (void)testWillShowPasteboardToast_ShouldReturnNo {
89+
[BNCPreferenceHelper sharedInstance].randomizedBundleToken = @"some_token";
90+
[BNCPasteboard sharedInstance].checkOnInstall = NO;
91+
92+
BOOL result = [self.branch willShowPasteboardToast];
93+
XCTAssertFalse(result);
94+
}
95+
96+
- (void)testSetAppClipAppGroup {
97+
NSString *testAppGroup = @"testAppGroup";
98+
[self.branch setAppClipAppGroup:testAppGroup];
99+
NSString *actualAppGroup = [BNCAppGroupsData shared].appGroup;
100+
101+
XCTAssertEqualObjects(testAppGroup, actualAppGroup);
102+
}
103+
104+
- (void)testClearPartnerParameters {
105+
[self.branch addFacebookPartnerParameterWithName:@"ph" value:@"123456789"];
106+
[[BNCPartnerParameters shared] clearAllParameters];
107+
108+
NSDictionary *result = [[BNCPartnerParameters shared] parameterJson];
109+
XCTAssertEqual([result count], 0, @"Parameters should be empty after calling clearAllParameters");
110+
}
111+
112+
- (void)testAddFacebookParameterWithName_Value {
113+
[self.branch addFacebookPartnerParameterWithName:@"name" value:@"3D4F2BF07DC1BE38B20C653EE9A7E446158F84E525BBB98FEDF721CB5A40A346"];
114+
115+
NSDictionary *result = [[BNCPartnerParameters shared] parameterJson][@"fb"];
116+
XCTAssertEqualObjects(result[@"name"], @"3D4F2BF07DC1BE38B20C653EE9A7E446158F84E525BBB98FEDF721CB5A40A346", @"Should add parameter for Facebook");
117+
}
118+
119+
- (void)testAddSnapParameterWithName_Value {
120+
[self.branch addSnapPartnerParameterWithName:@"name" value:@"3D4F2BF07DC1BE38B20C653EE9A7E446158F84E525BBB98FEDF721CB5A40A346"];
121+
122+
NSDictionary *result = [[BNCPartnerParameters shared] parameterJson][@"snap"];
123+
XCTAssertEqualObjects(result[@"name"], @"3D4F2BF07DC1BE38B20C653EE9A7E446158F84E525BBB98FEDF721CB5A40A346", @"Should add parameter for Snap");
124+
}
125+
126+
- (void)testGetFirstReferringBranchUniversalObject_ClickedBranchLink {
127+
NSString *installParamsString = @"{\"$canonical_identifier\":\"content/12345\",\"$creation_timestamp\":1694557342247,\"$desktop_url\":\"https://example.com/home\",\"$og_description\":\"My Content Description\",\"$og_title\":\"My Content Title\",\"+click_timestamp\":1695749249,\"+clicked_branch_link\":1,\"+is_first_session\":1,\"+match_guaranteed\":1,\"custom\":\"data\",\"key1\":\"value1\",\"~campaign\":\"content 123 launch\",\"~channel\":\"facebook\",\"~creation_source\":3,\"~feature\":\"sharing\",\"~id\":1230269548213984984,\"~referring_link\":\"https://bnctestbed.app.link/uSPHktjO2Cb\"}";
128+
[[BNCPreferenceHelper sharedInstance] setInstallParams: installParamsString];
129+
130+
BranchUniversalObject *result = [self.branch getFirstReferringBranchUniversalObject];\
131+
XCTAssertNotNil(result);
132+
XCTAssertEqualObjects(result.title, @"My Content Title");
133+
XCTAssertEqualObjects(result.canonicalIdentifier, @"content/12345");
134+
}
135+
136+
- (void)testGetFirstReferringBranchUniversalObject_NotClickedBranchLink {
137+
NSString *installParamsString = @"{\"+clicked_branch_link\":false,\"+is_first_session\":true}";
138+
[[BNCPreferenceHelper sharedInstance] setInstallParams: installParamsString];
139+
140+
BranchUniversalObject *result = [self.branch getFirstReferringBranchUniversalObject];
141+
XCTAssertNil(result);
142+
}
143+
144+
- (void)testGetFirstReferringBranchLinkProperties_ClickedBranchLink {
145+
NSString *installParamsString = @"{\"+clicked_branch_link\":1,\"+is_first_session\":1,\"~campaign\":\"content 123 launch\"}";
146+
[[BNCPreferenceHelper sharedInstance] setInstallParams:installParamsString];
147+
148+
BranchLinkProperties *result = [self.branch getFirstReferringBranchLinkProperties];
149+
XCTAssertNotNil(result);
150+
XCTAssertEqualObjects(result.campaign, @"content 123 launch");
151+
}
152+
153+
- (void)testGetFirstReferringBranchLinkProperties_NotClickedBranchLink {
154+
NSString *installParamsString = @"{\"+clicked_branch_link\":false,\"+is_first_session\":true}";
155+
[[BNCPreferenceHelper sharedInstance] setInstallParams:installParamsString];
156+
157+
BranchLinkProperties *result = [self.branch getFirstReferringBranchLinkProperties];
158+
XCTAssertNil(result);
159+
}
160+
161+
- (void)testGetFirstReferringParams {
162+
NSString *installParamsString = @"{\"+clicked_branch_link\":true,\"+is_first_session\":true}";
163+
[[BNCPreferenceHelper sharedInstance] setInstallParams:installParamsString];
164+
165+
NSDictionary *result = [self.branch getFirstReferringParams];
166+
XCTAssertEqualObjects([result objectForKey:@"+clicked_branch_link"], @true);
167+
}
168+
169+
- (void)testGetLatestReferringParams {
170+
NSString *sessionParamsString = @"{\"+clicked_branch_link\":true,\"+is_first_session\":false}";
171+
[[BNCPreferenceHelper sharedInstance] setSessionParams:sessionParamsString];
172+
173+
NSDictionary *result = [self.branch getLatestReferringParams];
174+
XCTAssertEqualObjects([result objectForKey:@"+clicked_branch_link"], @true);
175+
}
176+
177+
//- (void)testGetLatestReferringParamsSynchronous {
178+
// NSString *sessionParamsString = @"{\"+clicked_branch_link\":true,\"+is_first_session\":false}";
179+
// [[BNCPreferenceHelper sharedInstance] setSessionParams:sessionParamsString];
180+
//
181+
// NSDictionary *result = [self.branch getLatestReferringParamsSynchronous];
182+
// XCTAssertEqualObjects([result objectForKey:@"+clicked_branch_link"], @true);
183+
//}
184+
185+
- (void)testGetLatestReferringBranchUniversalObject_ClickedBranchLink {
186+
NSString *sessionParamsString = @"{\"+clicked_branch_link\":1,\"+is_first_session\":false,\"$og_title\":\"My Latest Content\"}";
187+
[[BNCPreferenceHelper sharedInstance] setSessionParams:sessionParamsString];
188+
189+
BranchUniversalObject *result = [self.branch getLatestReferringBranchUniversalObject];
190+
XCTAssertNotNil(result);
191+
XCTAssertEqualObjects(result.title, @"My Latest Content");
192+
}
193+
194+
- (void)testGetLatestReferringBranchLinkProperties_ClickedBranchLink {
195+
NSString *sessionParamsString = @"{\"+clicked_branch_link\":true,\"+is_first_session\":false,\"~campaign\":\"latest campaign\"}";
196+
[[BNCPreferenceHelper sharedInstance] setSessionParams:sessionParamsString];
197+
198+
BranchLinkProperties *result = [self.branch getLatestReferringBranchLinkProperties];
199+
XCTAssertNotNil(result);
200+
XCTAssertEqualObjects(result.campaign, @"latest campaign");
201+
}
202+
203+
- (void)testGetShortURL {
204+
NSString *shortURL = [self.branch getShortURL];
205+
XCTAssertNotNil(shortURL, @"URL should not be nil");
206+
XCTAssertTrue([shortURL hasPrefix:@"https://"], @"URL should start with 'https://'");
207+
}
208+
209+
- (void)testGetLongURLWithParamsAndChannelAndTagsAndFeatureAndStageAndAlias {
210+
NSDictionary *params = @{@"key": @"value"};
211+
NSString *channel = @"channel1";
212+
NSArray *tags = @[@"tag1", @"tag2"];
213+
NSString *feature = @"feature1";
214+
NSString *stage = @"stage1";
215+
NSString *alias = @"alias1";
216+
217+
NSString *generatedURL = [self.branch getLongURLWithParams:params andChannel:channel andTags:tags andFeature:feature andStage:stage andAlias:alias];
218+
NSString *expectedURL = @"https://bnc.lt/a/key_live_hcnegAumkH7Kv18M8AOHhfgiohpXq5tB?tags=tag1&tags=tag2&alias=alias1&feature=feature1&stage=stage1&source=ios&data=eyJrZXkiOiJ2YWx1ZSJ9";
219+
220+
XCTAssertEqualObjects(generatedURL, expectedURL, @"URL should match the expected format");
221+
}
222+
223+
@end

0 commit comments

Comments
 (0)