@@ -19,6 +19,7 @@ - (void)setEnableTypeDetection:(BOOL)enableTypeDetection;
1919+ (BOOL )shouldDisableNotificationHandling ;
2020+ (Braze *)brazeInstance ;
2121+ (MPKitExecStatus *)updateUser : (FilteredMParticleUser *)user request : (NSDictionary <NSNumber *,NSString *> *)userIdentities ;
22+ + (MPKitExecStatus *)setUserAttribute : (NSString *)key value : (NSString *)value ;
2223
2324@end
2425
@@ -171,6 +172,69 @@ - (void)testMpidForwardingOnStartUserIdNegative {
171172 [mockKitInstance verify ];
172173}
173174
175+ - (void )testEmailSubscribtionUserAttribute {
176+ NSDictionary *kitConfiguration = @{@" apiKey" :@" BrazeID" ,
177+ @" id" :@42 ,
178+ @" ABKCollectIDFA" :@" true" ,
179+ @" ABKRequestProcessingPolicyOptionKey" : @" 1" ,
180+ @" ABKFlushIntervalOptionKey" :@" 2" ,
181+ @" ABKSessionTimeoutKey" :@" 3" ,
182+ @" ABKMinimumTriggerTimeIntervalKey" :@" 4" ,
183+ @" userIdentificationType" :@" MPID"
184+ };
185+ MPKitAppboy *kitInstance = [[MPKitAppboy alloc ] init ];
186+ [kitInstance didFinishLaunchingWithConfiguration: kitConfiguration];
187+
188+ BRZConfiguration *configuration = [[BRZConfiguration alloc ] init ];
189+ Braze *testClient = [[Braze alloc ] initWithConfiguration: configuration];
190+ id mockClient = OCMPartialMock (testClient);
191+ [kitInstance setAppboyInstance: mockClient];
192+ XCTAssertEqualObjects (mockClient, [kitInstance appboyInstance ]);
193+
194+ // Should succeed since opted_in is a valid value
195+ MPKitExecStatus *execStatus1 = [kitInstance setUserAttribute: @" email_subscribe" value: @" opted_in" ];
196+ XCTAssertEqual (execStatus1.returnCode , MPKitReturnCodeSuccess);
197+ // Should fail since testValue is an invalid value
198+ MPKitExecStatus *execStatus2 = [kitInstance setUserAttribute: @" email_subscribe" value: @" testValue" ];
199+ XCTAssertEqual (execStatus2.returnCode , MPKitReturnCodeFail);
200+
201+ [mockClient verify ];
202+
203+ [mockClient stopMocking ];
204+ }
205+
206+ - (void )testPushSubscribtionUserAttribute {
207+ NSDictionary *kitConfiguration = @{@" apiKey" :@" BrazeID" ,
208+ @" id" :@42 ,
209+ @" ABKCollectIDFA" :@" true" ,
210+ @" ABKRequestProcessingPolicyOptionKey" : @" 1" ,
211+ @" ABKFlushIntervalOptionKey" :@" 2" ,
212+ @" ABKSessionTimeoutKey" :@" 3" ,
213+ @" ABKMinimumTriggerTimeIntervalKey" :@" 4" ,
214+ @" userIdentificationType" :@" MPID"
215+ };
216+ MPKitAppboy *kitInstance = [[MPKitAppboy alloc ] init ];
217+ [kitInstance didFinishLaunchingWithConfiguration: kitConfiguration];
218+
219+ BRZConfiguration *configuration = [[BRZConfiguration alloc ] init ];
220+ Braze *testClient = [[Braze alloc ] initWithConfiguration: configuration];
221+ id mockClient = OCMPartialMock (testClient);
222+ [kitInstance setAppboyInstance: mockClient];
223+ XCTAssertEqualObjects (mockClient, [kitInstance appboyInstance ]);
224+
225+ // Should succeed since opted_in is a valid value
226+ MPKitExecStatus *execStatus1 = [kitInstance setUserAttribute: @" push_subscribe" value: @" opted_in" ];
227+ XCTAssertEqual (execStatus1.returnCode , MPKitReturnCodeSuccess);
228+ // Should fail since testValue is an invalid value
229+ MPKitExecStatus *execStatus2 = [kitInstance setUserAttribute: @" push_subscribe" value: @" testValue" ];
230+ XCTAssertEqual (execStatus2.returnCode , MPKitReturnCodeFail);
231+
232+ [mockClient verify ];
233+
234+ [mockClient stopMocking ];
235+ }
236+
237+
174238// - (void)testEndpointOverride {
175239// MPKitAppboy *appBoy = [[MPKitAppboy alloc] init];
176240//
@@ -582,7 +646,7 @@ - (void)testlogPurchaseCommerceEvent {
582646- (void )testlogPurchaseCommerceEventSendingProductName {
583647 MPKitAppboy *kit = [[MPKitAppboy alloc ] init ];
584648 kit.configuration = @{@" bundleCommerceEventData" : @0 ,
585- @" forwardSkuAsProductName " : @" True" };
649+ @" replaceSkuWithProductName " : @" True" };
586650
587651 BRZConfiguration *configuration = [[BRZConfiguration alloc ] init ];
588652 Braze *testClient = [[Braze alloc ] initWithConfiguration: configuration];
0 commit comments