diff --git a/Sources/mParticle-Appboy/MPKitAppboy.m b/Sources/mParticle-Appboy/MPKitAppboy.m index 23fec01..0870e1c 100644 --- a/Sources/mParticle-Appboy/MPKitAppboy.m +++ b/Sources/mParticle-Appboy/MPKitAppboy.m @@ -16,6 +16,7 @@ static NSString *const emailIdTypeKey = @"emailIdentificationType"; static NSString *const enableTypeDetectionKey = @"enableTypeDetection"; static NSString *const bundleCommerceEventData = @"bundleCommerceEventData"; +static NSString *const replaceSkuAsProductName = @"forwardSkuAsProductName"; // The possible values for userIdentificationType static NSString *const userIdValueOther = @"Other"; @@ -550,11 +551,16 @@ - (MPKitExecStatus *)routeCommerceEvent:(MPCommerceEvent *)commerceEvent { [properties addEntriesFromDictionary:productDictionary]; } + NSString *sanitizedProductName = product.sku; + if ([@"True" isEqualToString:_configuration[replaceSkuAsProductName]]) { + sanitizedProductName = product.name; + } + // Strips key/values already being passed to Appboy, plus key/values initialized to default values keys = @[kMPExpProductSKU, kMPProductCurrency, kMPExpProductUnitPrice, kMPExpProductQuantity]; [properties removeObjectsForKeys:keys]; - [appboyInstance logPurchase:product.sku + [appboyInstance logPurchase:sanitizedProductName currency:currency price:[product.price doubleValue] quantity:[product.quantity integerValue] diff --git a/mParticle_AppboyTests/mParticle_AppboyTests.m b/mParticle_AppboyTests/mParticle_AppboyTests.m index bc88ddc..7617bb7 100644 --- a/mParticle_AppboyTests/mParticle_AppboyTests.m +++ b/mParticle_AppboyTests/mParticle_AppboyTests.m @@ -579,6 +579,54 @@ - (void)testlogPurchaseCommerceEvent { [mockClient stopMocking]; } +- (void)testlogPurchaseCommerceEventSendingProductName { + MPKitAppboy *kit = [[MPKitAppboy alloc] init]; + kit.configuration = @{@"bundleCommerceEventData" : @0, + @"forwardSkuAsProductName": @"True"}; + + BRZConfiguration *configuration = [[BRZConfiguration alloc] init]; + Braze *testClient = [[Braze alloc] initWithConfiguration:configuration]; + id mockClient = OCMPartialMock(testClient); + [kit setAppboyInstance:mockClient]; + + XCTAssertEqualObjects(mockClient, [kit appboyInstance]); + + MPProduct *product = [[MPProduct alloc] initWithName:@"product1" sku:@"1131331343" quantity:@1 price:@13]; + product.category = @"category1"; + + MPCommerceEvent *event = [[MPCommerceEvent alloc] initWithAction:MPCommerceEventActionPurchase product:product]; + event.customAttributes = @{@"testKey" : @"testCustomAttValue"}; + + MPTransactionAttributes *attributes = [[MPTransactionAttributes alloc] init]; + attributes.transactionId = @"foo-transaction-id"; + attributes.revenue = @13.00; + attributes.tax = @3; + attributes.shipping = @3; + + event.transactionAttributes = attributes; + + [[mockClient expect] logPurchase:@"product1" + currency:@"USD" + price:[@"13" doubleValue] + quantity:1 + properties:@{@"Shipping Amount" : @3, + @"Total Amount" : @13.00, + @"Total Product Amount" : @"13", + @"Tax Amount" : @3, + @"Transaction Id" : @"foo-transaction-id", + @"Name" : @"product1", + @"Category" : @"category1" + }]; + + MPKitExecStatus *execStatus = [kit logBaseEvent:event]; + + XCTAssertEqual(execStatus.returnCode, MPKitReturnCodeSuccess); + + [mockClient verify]; + + [mockClient stopMocking]; +} + - (void)testlogPurchaseCommerceEventWithBundledProducts { MPKitAppboy *kit = [[MPKitAppboy alloc] init]; kit.configuration = @{@"bundleCommerceEventData" : @1};