@@ -886,6 +886,105 @@ class MParticleTestsSwift: XCTestCase {
886886#endif
887887 }
888888
889+ // MARK: - logEvent
890+ func testLogEventCalledLogCustomEvent( ) {
891+ let event = MPEvent ( name: " test " , type: . other) !
892+ mparticle. logEvent ( event)
893+ wait ( for: [ listenerController. onAPICalledExpectation!] , timeout: 0.1 )
894+ XCTAssertEqual ( listenerController. onAPICalledApiName? . description, " logCustomEvent: " )
895+ }
896+
897+ func testLogEventCalledLogCommerceEvent( ) {
898+ let commerceEvent = MPCommerceEvent ( action: . purchase) !
899+ mparticle. logEvent ( commerceEvent)
900+ wait ( for: [ listenerController. onAPICalledExpectation!] , timeout: 0.1 )
901+ XCTAssertEqual ( listenerController. onAPICalledApiName? . description, " logCommerceEvent: " )
902+ }
903+
904+ func testLogEventWithFilterReturningNil_blocksEvent( ) {
905+ let event = MPBaseEvent ( eventType: . other) !
906+
907+ let executor = ExecutorMock ( )
908+ mparticle. setExecutor ( executor)
909+
910+ let backendController = MPBackendControllerMock ( )
911+ mparticle. backendController = backendController
912+
913+ let dataPlanFilter = MPDataPlanFilterMock ( )
914+ dataPlanFilter. transformEventForBaseEventReturnValue = nil
915+ mparticle. dataPlanFilter = dataPlanFilter
916+
917+ mparticle. logEvent ( event)
918+
919+ // Verify listener was called
920+ XCTAssertEqual ( listenerController. onAPICalledApiName? . description, " logEvent: " )
921+ XCTAssertTrue ( listenerController. onAPICalledParameter1 === event)
922+
923+ // Verify backend was called
924+ XCTAssertTrue ( backendController. logBaseEventCalled)
925+ XCTAssertTrue ( backendController. logBaseEventEventParam === event)
926+ let completion = backendController. logBaseEventCompletionHandler!
927+ XCTAssertNotNil ( completion)
928+ completion ( event, . success)
929+
930+ // Verify executor usage
931+ XCTAssertTrue ( executor. executeOnMessageQueueAsync)
932+
933+ // Verify filter transform event
934+ XCTAssertTrue ( dataPlanFilter. transformEventForBaseEventCalled)
935+ XCTAssertTrue ( dataPlanFilter. transformEventForBaseEventParam === event)
936+
937+ // Logger should record the blocked event message
938+ XCTAssertEqual ( receivedMessage, " mParticle -> Blocked base event from kits: \( event) " )
939+ }
940+
941+ func testLogBaseEventWithFilterReturningEvent_forwardsTransformedEvent( ) {
942+ let event = MPBaseEvent ( eventType: . other) !
943+ let transformedEvent = MPBaseEvent ( eventType: . addToCart) !
944+
945+ let executor = ExecutorMock ( )
946+ mparticle. setExecutor ( executor)
947+
948+ let backendController = MPBackendControllerMock ( )
949+ mparticle. backendController = backendController
950+
951+ let dataPlanFilter = MPDataPlanFilterMock ( )
952+ dataPlanFilter. transformEventForBaseEventReturnValue = transformedEvent
953+ mparticle. dataPlanFilter = dataPlanFilter
954+
955+ let kitContainer = MPKitContainerMock ( )
956+ mparticle. setKitContainer ( kitContainer)
957+
958+ mparticle. logEvent ( event)
959+
960+ // Verify listener was called
961+ XCTAssertEqual ( listenerController. onAPICalledApiName? . description, " logEvent: " )
962+ XCTAssertTrue ( listenerController. onAPICalledParameter1 === event)
963+
964+ // Verify backend was called
965+ XCTAssertTrue ( backendController. logBaseEventCalled)
966+ XCTAssertTrue ( backendController. logBaseEventEventParam === event)
967+ let completion = backendController. logBaseEventCompletionHandler!
968+ XCTAssertNotNil ( completion)
969+ completion ( event, . success)
970+
971+ // Verify executor usage
972+ XCTAssertTrue ( executor. executeOnMessageQueueAsync)
973+ XCTAssertTrue ( executor. executeOnMainAsync)
974+
975+ // Verify filter transformed event
976+ XCTAssertTrue ( dataPlanFilter. transformEventForBaseEventCalled)
977+ XCTAssertTrue ( dataPlanFilter. transformEventForBaseEventParam === event)
978+
979+ // Verify kit container forwarded transformed event
980+ XCTAssertTrue ( kitContainer. forwardSDKCallCalled)
981+ XCTAssertEqual ( kitContainer. forwardSDKCallSelectorParam? . description, " logBaseEvent: " )
982+ XCTAssertEqual ( kitContainer. forwardSDKCallMessageTypeParam, . unknown)
983+ XCTAssertTrue ( kitContainer. forwardSDKCallEventParam === transformedEvent)
984+ }
985+
986+
987+ // MARK: - logCustomEvent
889988
890989 func testLogCustomEventWithNilEvent_logsError( ) {
891990 mparticle. logCustomEvent ( nil )
@@ -975,5 +1074,113 @@ class MParticleTestsSwift: XCTestCase {
9751074 XCTAssertEqual ( kitContainer. forwardSDKCallMessageTypeParam, . event)
9761075 XCTAssertTrue ( kitContainer. forwardSDKCallEventParam === transformedEvent)
9771076 }
1077+
1078+ // MARK: - logCommerceEvent
1079+
1080+ func testLogCommerceEvent_assignsTimestampWhenNil( ) {
1081+ let commerceEvent = MPCommerceEvent ( action: . purchase) !
1082+ commerceEvent. setTimestamp ( nil )
1083+
1084+
1085+ let executor = ExecutorMock ( )
1086+ mparticle. setExecutor ( executor)
1087+
1088+ let backendController = MPBackendControllerMock ( )
1089+ mparticle. backendController = backendController
1090+
1091+ mparticle. logCommerceEvent ( commerceEvent)
1092+
1093+ XCTAssertNotNil ( commerceEvent. timestamp)
1094+ XCTAssertTrue ( backendController. logCommerceEventCalled)
1095+ XCTAssertTrue ( listenerController. onAPICalledParameter1 === commerceEvent)
1096+ XCTAssertTrue ( executor. executeOnMessageQueueAsync)
1097+ }
1098+
1099+
1100+ func testLogCommerceEventWithFilterReturningNil_blocksEvent( ) {
1101+ let commerceEvent = MPCommerceEvent ( eventType: . other) !
1102+
1103+ let executor = ExecutorMock ( )
1104+ mparticle. setExecutor ( executor)
1105+
1106+ let backendController = MPBackendControllerMock ( )
1107+ mparticle. backendController = backendController
1108+
1109+ let dataPlanFilter = MPDataPlanFilterMock ( )
1110+ dataPlanFilter. transformEventForCommerceEventParam = nil
1111+ mparticle. dataPlanFilter = dataPlanFilter
1112+
1113+ mparticle. logCommerceEvent ( commerceEvent)
1114+
1115+ // Verify event timestamp added
1116+ XCTAssertNotNil ( commerceEvent. timestamp)
1117+
1118+ // Verify listener was called
1119+ XCTAssertEqual ( listenerController. onAPICalledApiName? . description, " logCommerceEvent: " )
1120+ XCTAssertTrue ( listenerController. onAPICalledParameter1 === commerceEvent)
1121+
1122+ // Verify backend was called
1123+ XCTAssertTrue ( backendController. logCommerceEventCalled)
1124+ XCTAssertTrue ( backendController. logCommerceEventParam === commerceEvent)
1125+ let completion = backendController. logCommerceEventCompletionHandler!
1126+ XCTAssertNotNil ( completion)
1127+ completion ( commerceEvent, . success)
1128+
1129+ // Verify executor usage
1130+ XCTAssertTrue ( executor. executeOnMessageQueueAsync)
1131+
1132+ // Verify filter transform event
1133+ XCTAssertTrue ( dataPlanFilter. transformEventForCommerceEventCalled)
1134+ XCTAssertTrue ( dataPlanFilter. transformEventForCommerceEventParam === commerceEvent)
1135+
1136+ // Logger should record the blocked event message
1137+ XCTAssertEqual ( receivedMessage, " mParticle -> Blocked commerce event from kits: \( commerceEvent) " )
1138+ }
1139+
1140+
1141+ func testLogCommerceEventWithFilterReturningEvent_forwardsTransformedEvent( ) {
1142+ let commerceEvent = MPCommerceEvent ( eventType: . other) !
1143+ let transformedCommerceEvent = MPCommerceEvent ( eventType: . viewDetail) !
1144+
1145+ let executor = ExecutorMock ( )
1146+ mparticle. setExecutor ( executor)
1147+
1148+ let backendController = MPBackendControllerMock ( )
1149+ mparticle. backendController = backendController
1150+
1151+ let dataPlanFilter = MPDataPlanFilterMock ( )
1152+ dataPlanFilter. transformEventForCommerceEventReturnValue = transformedCommerceEvent
1153+ mparticle. dataPlanFilter = dataPlanFilter
1154+
1155+ let kitContainer = MPKitContainerMock ( )
1156+ mparticle. setKitContainer ( kitContainer)
1157+
1158+ mparticle. logCommerceEvent ( commerceEvent)
1159+
1160+ // Verify event timestamp added
1161+ XCTAssertNotNil ( commerceEvent. timestamp)
1162+
1163+ // Verify listener was called
1164+ XCTAssertEqual ( listenerController. onAPICalledApiName? . description, " logCommerceEvent: " )
1165+ XCTAssertTrue ( listenerController. onAPICalledParameter1 === commerceEvent)
1166+
1167+ // Verify backend was called
1168+ XCTAssertTrue ( backendController. logCommerceEventCalled)
1169+ XCTAssertTrue ( backendController. logCommerceEventParam === commerceEvent)
1170+ let completion = backendController. logCommerceEventCompletionHandler!
1171+ XCTAssertNotNil ( completion)
1172+ completion ( commerceEvent, . success)
1173+
1174+ // Verify executor usage
1175+ XCTAssertTrue ( executor. executeOnMessageQueueAsync)
1176+
1177+ // Verify filter transformed event
1178+ XCTAssertTrue ( dataPlanFilter. transformEventForCommerceEventCalled)
1179+ XCTAssertTrue ( dataPlanFilter. transformEventForCommerceEventParam === commerceEvent)
1180+
1181+ // Verify kit container forwarded transformed event
1182+ XCTAssertTrue ( kitContainer. forwardCommerceEventCallCalled)
1183+ XCTAssertTrue ( kitContainer. forwardCommerceEventCallCommerceEventParam === transformedCommerceEvent)
1184+ }
9781185
9791186}
0 commit comments