|
14 | 14 | // Rokt kit identifier for testing |
15 | 15 | static NSNumber * const kTestRoktKitId = @181; |
16 | 16 |
|
17 | | -// Test helper class that simulates a kit with getSessionId method |
| 17 | +// Test helper class that simulates a kit with getSessionId and handleURLCallback methods |
18 | 18 | @interface MPRoktTestKitInstance : NSObject |
19 | 19 | @property (nonatomic, copy) NSString *sessionIdToReturn; |
| 20 | +@property (nonatomic, assign) BOOL handleURLCallbackReturn; |
| 21 | +@property (nonatomic, strong) NSURL *lastHandleURLCallbackURL; |
20 | 22 | - (NSString *)getSessionId; |
| 23 | +- (BOOL)handleURLCallback:(NSURL *)url; |
21 | 24 | @end |
22 | 25 |
|
23 | 26 | @implementation MPRoktTestKitInstance |
24 | 27 | - (NSString *)getSessionId { |
25 | 28 | return self.sessionIdToReturn; |
26 | 29 | } |
| 30 | +- (BOOL)handleURLCallback:(NSURL *)url { |
| 31 | + self.lastHandleURLCallbackURL = url; |
| 32 | + return self.handleURLCallbackReturn; |
| 33 | +} |
27 | 34 | @end |
28 | 35 |
|
29 | 36 | @interface MPRokt () |
@@ -1168,4 +1175,92 @@ - (void)testGetSessionIdReturnsNilWhenKitInstanceIsNil { |
1168 | 1175 | XCTAssertNil(result, @"Should return nil when kit wrapper instance is nil"); |
1169 | 1176 | } |
1170 | 1177 |
|
1171 | | -@end |
| 1178 | +#pragma mark - handleURLCallback Tests |
| 1179 | + |
| 1180 | +- (void)testHandleURLCallbackReturnsYESWhenKitClaimsURL { |
| 1181 | + MParticle *instance = [MParticle sharedInstance]; |
| 1182 | + self.mockInstance = OCMPartialMock(instance); |
| 1183 | + self.mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); |
| 1184 | + [[[self.mockInstance stub] andReturn:self.mockContainer] kitContainer_PRIVATE]; |
| 1185 | + [[[self.mockInstance stub] andReturn:self.mockInstance] sharedInstance]; |
| 1186 | + |
| 1187 | + id mockKitRegister = OCMProtocolMock(@protocol(MPExtensionKitProtocol)); |
| 1188 | + OCMStub([(id<MPExtensionKitProtocol>)mockKitRegister code]).andReturn(kTestRoktKitId); |
| 1189 | + |
| 1190 | + MPRoktTestKitInstance *kitInstance = [[MPRoktTestKitInstance alloc] init]; |
| 1191 | + kitInstance.handleURLCallbackReturn = YES; |
| 1192 | + OCMStub([mockKitRegister wrapperInstance]).andReturn(kitInstance); |
| 1193 | + |
| 1194 | + OCMStub([self.mockContainer activeKitsRegistry]).andReturn(@[mockKitRegister]); |
| 1195 | + |
| 1196 | + NSURL *url = [NSURL URLWithString:@"myapp://afterpay-redirect?token=abc"]; |
| 1197 | + BOOL result = [self.rokt handleURLCallback:url]; |
| 1198 | + |
| 1199 | + XCTAssertTrue(result, @"Should return YES when the kit claims the URL"); |
| 1200 | + XCTAssertEqualObjects(kitInstance.lastHandleURLCallbackURL, url, @"Kit should have received the URL"); |
| 1201 | +} |
| 1202 | + |
| 1203 | +- (void)testHandleURLCallbackReturnsNOWhenKitDoesNotClaimURL { |
| 1204 | + MParticle *instance = [MParticle sharedInstance]; |
| 1205 | + self.mockInstance = OCMPartialMock(instance); |
| 1206 | + self.mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); |
| 1207 | + [[[self.mockInstance stub] andReturn:self.mockContainer] kitContainer_PRIVATE]; |
| 1208 | + [[[self.mockInstance stub] andReturn:self.mockInstance] sharedInstance]; |
| 1209 | + |
| 1210 | + id mockKitRegister = OCMProtocolMock(@protocol(MPExtensionKitProtocol)); |
| 1211 | + OCMStub([(id<MPExtensionKitProtocol>)mockKitRegister code]).andReturn(kTestRoktKitId); |
| 1212 | + |
| 1213 | + MPRoktTestKitInstance *kitInstance = [[MPRoktTestKitInstance alloc] init]; |
| 1214 | + kitInstance.handleURLCallbackReturn = NO; |
| 1215 | + OCMStub([mockKitRegister wrapperInstance]).andReturn(kitInstance); |
| 1216 | + |
| 1217 | + OCMStub([self.mockContainer activeKitsRegistry]).andReturn(@[mockKitRegister]); |
| 1218 | + |
| 1219 | + NSURL *url = [NSURL URLWithString:@"myapp://unrelated"]; |
| 1220 | + BOOL result = [self.rokt handleURLCallback:url]; |
| 1221 | + |
| 1222 | + XCTAssertFalse(result, @"Should return NO when the kit does not claim the URL"); |
| 1223 | +} |
| 1224 | + |
| 1225 | +- (void)testHandleURLCallbackReturnsNOWhenNoActiveKits { |
| 1226 | + MParticle *instance = [MParticle sharedInstance]; |
| 1227 | + self.mockInstance = OCMPartialMock(instance); |
| 1228 | + self.mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); |
| 1229 | + [[[self.mockInstance stub] andReturn:self.mockContainer] kitContainer_PRIVATE]; |
| 1230 | + [[[self.mockInstance stub] andReturn:self.mockInstance] sharedInstance]; |
| 1231 | + |
| 1232 | + OCMStub([self.mockContainer activeKitsRegistry]).andReturn(@[]); |
| 1233 | + |
| 1234 | + NSURL *url = [NSURL URLWithString:@"myapp://afterpay-redirect"]; |
| 1235 | + BOOL result = [self.rokt handleURLCallback:url]; |
| 1236 | + |
| 1237 | + XCTAssertFalse(result, @"Should return NO when no kits are active"); |
| 1238 | +} |
| 1239 | + |
| 1240 | +- (void)testHandleURLCallbackReturnsNOWhenRoktKitNotRegistered { |
| 1241 | + MParticle *instance = [MParticle sharedInstance]; |
| 1242 | + self.mockInstance = OCMPartialMock(instance); |
| 1243 | + self.mockContainer = OCMClassMock([MPKitContainer_PRIVATE class]); |
| 1244 | + [[[self.mockInstance stub] andReturn:self.mockContainer] kitContainer_PRIVATE]; |
| 1245 | + [[[self.mockInstance stub] andReturn:self.mockInstance] sharedInstance]; |
| 1246 | + |
| 1247 | + // A non-Rokt kit is registered |
| 1248 | + id mockKitRegister = OCMProtocolMock(@protocol(MPExtensionKitProtocol)); |
| 1249 | + OCMStub([(id<MPExtensionKitProtocol>)mockKitRegister code]).andReturn(@999); |
| 1250 | + OCMStub([self.mockContainer activeKitsRegistry]).andReturn(@[mockKitRegister]); |
| 1251 | + |
| 1252 | + NSURL *url = [NSURL URLWithString:@"myapp://afterpay-redirect"]; |
| 1253 | + BOOL result = [self.rokt handleURLCallback:url]; |
| 1254 | + |
| 1255 | + XCTAssertFalse(result, @"Should return NO when the Rokt Kit is not registered"); |
| 1256 | +} |
| 1257 | + |
| 1258 | +- (void)testHandleURLCallbackReturnsNOForNilURL { |
| 1259 | +#pragma clang diagnostic push |
| 1260 | +#pragma clang diagnostic ignored "-Wnonnull" |
| 1261 | + BOOL result = [self.rokt handleURLCallback:nil]; |
| 1262 | +#pragma clang diagnostic pop |
| 1263 | + XCTAssertFalse(result, @"Should return NO when url is nil"); |
| 1264 | +} |
| 1265 | + |
| 1266 | +@end |
0 commit comments