Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions Sources/mParticle-Appboy/MPKitAppboy.m
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@

// User Attribute key with reserved functionality for Braze kit
static NSString *const brazeUserAttributeDob = @"dob";
static NSString *const brazeUserAttributeEmailSubscribe = @"email_subscribe";
static NSString *const brazeUserAttributePushSubscribe = @"push_subscribe";

// Strings used when sending enhanced commerce events
static NSString *const attributesKey = @"Attributes";
Expand Down Expand Up @@ -796,6 +798,30 @@ - (MPKitExecStatus *)setUserAttribute:(NSString *)key value:(NSString *)value {
[appboyInstance.user setPhoneNumber:value];
} else if ([key isEqualToString:mParticleUserAttributeZip]){
[appboyInstance.user setCustomAttributeWithKey:@"Zip" stringValue:value];
} else if ([key isEqualToString:brazeUserAttributeEmailSubscribe]) {
if([value isEqualToString:@"opted_in"]) {
[appboyInstance.user setEmailSubscriptionState:BRZUserSubscriptionStateOptedIn];
} else if ([value isEqualToString:@"unsubscribed"]) {
[appboyInstance.user setEmailSubscriptionState:BRZUserSubscriptionStateUnsubscribed];
} else if ([value isEqualToString:@"subscribed"]) {
[appboyInstance.user setEmailSubscriptionState:BRZUserSubscriptionStateSubscribed];
} else {
NSLog(@"mParticle -> Invalid email_subscribe value: %@", value);
execStatus = [[MPKitExecStatus alloc] initWithSDKCode:@(MPKitInstanceAppboy) returnCode:MPKitReturnCodeFail];
return execStatus;
}
} else if ([key isEqualToString:brazeUserAttributePushSubscribe]) {
if([value isEqualToString:@"opted_in"]) {
[appboyInstance.user setPushNotificationSubscriptionState:BRZUserSubscriptionStateOptedIn];
} else if ([value isEqualToString:@"unsubscribed"]) {
[appboyInstance.user setPushNotificationSubscriptionState:BRZUserSubscriptionStateUnsubscribed];
} else if ([value isEqualToString:@"subscribed"]) {
[appboyInstance.user setPushNotificationSubscriptionState:BRZUserSubscriptionStateSubscribed];
} else {
NSLog(@"mParticle -> Invalid push_subscribe value: %@", value);
execStatus = [[MPKitExecStatus alloc] initWithSDKCode:@(MPKitInstanceAppboy) returnCode:MPKitReturnCodeFail];
return execStatus;
}
} else {
key = [self stripCharacter:@"$" fromString:key];

Expand Down
66 changes: 65 additions & 1 deletion mParticle_AppboyTests/mParticle_AppboyTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ - (void)setEnableTypeDetection:(BOOL)enableTypeDetection;
+ (BOOL)shouldDisableNotificationHandling;
+ (Braze *)brazeInstance;
+ (MPKitExecStatus *)updateUser:(FilteredMParticleUser *)user request:(NSDictionary<NSNumber *,NSString *> *)userIdentities;
+ (MPKitExecStatus *)setUserAttribute:(NSString *)key value:(NSString *)value;

@end

Expand Down Expand Up @@ -171,6 +172,69 @@ - (void)testMpidForwardingOnStartUserIdNegative {
[mockKitInstance verify];
}

- (void)testEmailSubscribtionUserAttribute {
NSDictionary *kitConfiguration = @{@"apiKey":@"BrazeID",
@"id":@42,
@"ABKCollectIDFA":@"true",
@"ABKRequestProcessingPolicyOptionKey": @"1",
@"ABKFlushIntervalOptionKey":@"2",
@"ABKSessionTimeoutKey":@"3",
@"ABKMinimumTriggerTimeIntervalKey":@"4",
@"userIdentificationType":@"MPID"
};
MPKitAppboy *kitInstance = [[MPKitAppboy alloc] init];
[kitInstance didFinishLaunchingWithConfiguration:kitConfiguration];

BRZConfiguration *configuration = [[BRZConfiguration alloc] init];
Braze *testClient = [[Braze alloc] initWithConfiguration:configuration];
id mockClient = OCMPartialMock(testClient);
[kitInstance setAppboyInstance:mockClient];
XCTAssertEqualObjects(mockClient, [kitInstance appboyInstance]);

// Should succeed since opted_in is a valid value
MPKitExecStatus *execStatus1 = [kitInstance setUserAttribute:@"email_subscribe" value:@"opted_in"];
XCTAssertEqual(execStatus1.returnCode, MPKitReturnCodeSuccess);
// Should fail since testValue is an invalid value
MPKitExecStatus *execStatus2 = [kitInstance setUserAttribute:@"email_subscribe" value:@"testValue"];
XCTAssertEqual(execStatus2.returnCode, MPKitReturnCodeFail);

[mockClient verify];

[mockClient stopMocking];
}

- (void)testPushSubscribtionUserAttribute {
NSDictionary *kitConfiguration = @{@"apiKey":@"BrazeID",
@"id":@42,
@"ABKCollectIDFA":@"true",
@"ABKRequestProcessingPolicyOptionKey": @"1",
@"ABKFlushIntervalOptionKey":@"2",
@"ABKSessionTimeoutKey":@"3",
@"ABKMinimumTriggerTimeIntervalKey":@"4",
@"userIdentificationType":@"MPID"
};
MPKitAppboy *kitInstance = [[MPKitAppboy alloc] init];
[kitInstance didFinishLaunchingWithConfiguration:kitConfiguration];

BRZConfiguration *configuration = [[BRZConfiguration alloc] init];
Braze *testClient = [[Braze alloc] initWithConfiguration:configuration];
id mockClient = OCMPartialMock(testClient);
[kitInstance setAppboyInstance:mockClient];
XCTAssertEqualObjects(mockClient, [kitInstance appboyInstance]);

// Should succeed since opted_in is a valid value
MPKitExecStatus *execStatus1 = [kitInstance setUserAttribute:@"push_subscribe" value:@"opted_in"];
XCTAssertEqual(execStatus1.returnCode, MPKitReturnCodeSuccess);
// Should fail since testValue is an invalid value
MPKitExecStatus *execStatus2 = [kitInstance setUserAttribute:@"push_subscribe" value:@"testValue"];
XCTAssertEqual(execStatus2.returnCode, MPKitReturnCodeFail);

[mockClient verify];

[mockClient stopMocking];
}


//- (void)testEndpointOverride {
// MPKitAppboy *appBoy = [[MPKitAppboy alloc] init];
//
Expand Down Expand Up @@ -582,7 +646,7 @@ - (void)testlogPurchaseCommerceEvent {
- (void)testlogPurchaseCommerceEventSendingProductName {
MPKitAppboy *kit = [[MPKitAppboy alloc] init];
kit.configuration = @{@"bundleCommerceEventData" : @0,
@"forwardSkuAsProductName": @"True"};
@"replaceSkuWithProductName": @"True"};

BRZConfiguration *configuration = [[BRZConfiguration alloc] init];
Braze *testClient = [[Braze alloc] initWithConfiguration:configuration];
Expand Down