diff --git a/mParticle-Rokt/MPKitRokt.m b/mParticle-Rokt/MPKitRokt.m index c788201..067abeb 100644 --- a/mParticle-Rokt/MPKitRokt.m +++ b/mParticle-Rokt/MPKitRokt.m @@ -405,6 +405,9 @@ + (NSString *)stringForIdentityType:(MPIdentity)identityType { } + (NSNumber *)identityTypeForString:(NSString *)identityString { + if (identityString == nil) { + return nil; + } NSDictionary *identityNumbers = @{@"customerid": @(MPIdentityCustomerId), @"email": @(MPIdentityEmail), @"facebook": @(MPIdentityFacebook), @@ -434,7 +437,7 @@ + (NSNumber *)identityTypeForString:(NSString *)identityString { return identityNumbers[identityString]; } -+ (NSNumber *)getRoktHashedEmailUserIdentityType { ++ (NSDictionary *)getKitConfig { // Get the kit configuration NSArray *kitConfigs = [MParticle sharedInstance].kitContainer_PRIVATE.originalConfig.copy; NSDictionary *roktKitConfig; @@ -444,6 +447,12 @@ + (NSNumber *)getRoktHashedEmailUserIdentityType { } } + return roktKitConfig; +} + ++ (NSNumber *)getRoktHashedEmailUserIdentityType { + NSDictionary *roktKitConfig = [MPKitRokt getKitConfig]; + // Get the string representing which identity to use and convert it to the key (NSNumber) NSString *hashedIdentityTypeString = roktKitConfig[kMPHashedEmailUserIdentityType]; NSNumber *hashedIdentityTypeNumber = [MPKitRokt identityTypeForString:hashedIdentityTypeString.lowercaseString]; diff --git a/mParticle_RoktTests/mParticle_RoktTests.m b/mParticle_RoktTests/mParticle_RoktTests.m index b6cefa7..c3c7d88 100644 --- a/mParticle_RoktTests/mParticle_RoktTests.m +++ b/mParticle_RoktTests/mParticle_RoktTests.m @@ -4,6 +4,9 @@ #import #import "MPKitRokt.h" +NSInteger const kMPRoktKitCode = 181; +NSString * const kMPHashedEmailUserIdentityType = @"hashedEmailUserIdentityType"; + @interface MPKitRokt () - (MPKitExecStatus *)executeWithIdentifier:(NSString * _Nullable)identifier @@ -24,6 +27,8 @@ + (void)addIdentityAttributes:(NSMutableDictionary * _Nu + (void)handleHashedEmail:(NSMutableDictionary * _Nullable)attributes; ++ (NSDictionary *)getKitConfig; + + (NSNumber *)getRoktHashedEmailUserIdentityType; + (RoktConfig *)convertMPRoktConfig:(MPRoktConfig *)mpRoktConfig; @@ -677,4 +682,49 @@ - (void)testTransformValuesToString { XCTAssertTrue(finalAtt.allKeys.count == 4); } +- (void)testGetRoktHashedEmailUserIdentityTypeOther4 { + // Test case 1: When kit configuration exists with hashed email identity type + NSDictionary *roktKitConfig = @{ + @"id": @(kMPRoktKitCode), + kMPHashedEmailUserIdentityType: @"other4" + }; + + // Mock the MParticle shared instance and kit container + id mockMPKitRoktClass = OCMClassMock([MPKitRokt class]); + [[[mockMPKitRoktClass stub] andReturn:roktKitConfig] getKitConfig]; + + // Call the method and verify result + NSNumber *result = [MPKitRokt getRoktHashedEmailUserIdentityType]; + XCTAssertEqualObjects(result, @(MPIdentityOther4), @"Should return MPIdentityOther4 when configured with 'other4'"); + + [mockMPKitRoktClass stopMocking]; +} + +- (void)testGetRoktHashedEmailUserIdentityTypeConfigNil { + // Test case 2: When kit config nil + // Mock the MParticle shared instance and kit container + id mockMPKitRoktClass = OCMClassMock([MPKitRokt class]); + [[[mockMPKitRoktClass stub] andReturn:nil] getKitConfig]; + + NSNumber *defaultResult = [MPKitRokt getRoktHashedEmailUserIdentityType]; + XCTAssertNil(defaultResult, @"Should return nil when when no configuration exists"); + + [mockMPKitRoktClass stopMocking]; +} + +- (void)testGetRoktHashedEmailUserIdentityTypeNil { + // Mock the MParticle shared instance and kit container + id mockMPKitRoktClass = OCMClassMock([MPKitRokt class]); + // Test case 3: When kit config exists but no hashed email identity type specified + NSDictionary *roktKitConfigNoHash = @{ + @"id": @(kMPRoktKitCode) + }; + [[[mockMPKitRoktClass stub] andReturn:roktKitConfigNoHash] getKitConfig]; + + NSNumber *noHashResult = [MPKitRokt getRoktHashedEmailUserIdentityType]; + XCTAssertNil(noHashResult, @"Should return nil when hashed email identity type not specified"); + + [mockMPKitRoktClass stopMocking]; +} + @end