Skip to content

Commit 2d7c947

Browse files
full test coverage for logEvent
1 parent 3851123 commit 2d7c947

File tree

4 files changed

+116
-1
lines changed

4 files changed

+116
-1
lines changed

UnitTests/MParticle+PrivateMethods.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
- (void)startWithKeyCallback:(BOOL)firstRun options:(MParticleOptions * _Nonnull)options userDefaults:(id<MPUserDefaultsProtocol>)userDefaults;
1313
- (void)beginTimedEventCompletionHandler:(MPEvent *)event execStatus:(MPExecStatus)execStatus;
1414
- (void)logEventCallback:(MPEvent *)event execStatus:(MPExecStatus)execStatus;
15+
- (void)logEvent:(MPBaseEvent *)event;
1516
- (void)logCustomEvent:(MPEvent *)event;
1617
- (void)logScreenCallback:(MPEvent *)event execStatus:(MPExecStatus)execStatus;
1718
- (void)leaveBreadcrumbCallback:(MPEvent *)event execStatus:(MPExecStatus)execStatus;

UnitTests/MParticleTestsSwift.swift

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,110 @@ class MParticleTestsSwift: XCTestCase {
886886
#endif
887887
}
888888

889+
// MARK: - logEvent
890+
891+
func testLogEventCalledLoggerErrorWhenEventIsNil() {
892+
mparticle.logEvent(nil)
893+
XCTAssertEqual(receivedMessage, "mParticle -> Cannot log nil event!")
894+
}
895+
896+
func testLogEventCalledLogCustomEvent() {
897+
let event = MPEvent(name: "test", type: .other)!
898+
mparticle.logEvent(event)
899+
wait(for: [listenerController.onAPICalledExpectation!], timeout: 0.1)
900+
XCTAssertEqual(listenerController.onAPICalledApiName?.description, "logCustomEvent:")
901+
}
902+
903+
func testLogEventCalledLogCommerceEvent() {
904+
let commerceEvent = MPCommerceEvent(action: .purchase)!
905+
mparticle.logEvent(commerceEvent)
906+
wait(for: [listenerController.onAPICalledExpectation!], timeout: 0.1)
907+
XCTAssertEqual(listenerController.onAPICalledApiName?.description, "logCommerceEvent:")
908+
}
909+
910+
func testLogEventWithFilterReturningNil_blocksEvent() {
911+
let event = MPBaseEvent(eventType: .other)!
912+
913+
let executor = ExecutorMock()
914+
mparticle.setExecutor(executor)
915+
916+
let backendController = MPBackendControllerMock()
917+
mparticle.backendController = backendController
918+
919+
let dataPlanFilter = MPDataPlanFilterMock()
920+
dataPlanFilter.transformEventForBaseEventReturnValue = nil
921+
mparticle.dataPlanFilter = dataPlanFilter
922+
923+
mparticle.logEvent(event)
924+
925+
// Verify listener was called
926+
XCTAssertEqual(listenerController.onAPICalledApiName?.description, "logEvent:")
927+
XCTAssertTrue(listenerController.onAPICalledParameter1 === event)
928+
929+
// Verify backend was called
930+
XCTAssertTrue(backendController.logBaseEventCalled)
931+
XCTAssertTrue(backendController.logBaseEventEventParam === event)
932+
let completion = backendController.logBaseEventCompletionHandler!
933+
XCTAssertNotNil(completion)
934+
completion(event, .success)
935+
936+
// Verify executor usage
937+
XCTAssertTrue(executor.executeOnMessageQueueAsync)
938+
939+
// Verify filter transform event
940+
XCTAssertTrue(dataPlanFilter.transformEventForBaseEventCalled)
941+
XCTAssertTrue(dataPlanFilter.transformEventForBaseEventParam === event)
942+
943+
// Logger should record the blocked event message
944+
XCTAssertEqual(receivedMessage, "mParticle -> Blocked base event from kits: \(event)")
945+
}
946+
947+
func testLogBaseEventWithFilterReturningEvent_forwardsTransformedEvent() {
948+
let event = MPBaseEvent(eventType: .other)!
949+
let transformedEvent = MPBaseEvent(eventType: .addToCart)!
950+
951+
let executor = ExecutorMock()
952+
mparticle.setExecutor(executor)
953+
954+
let backendController = MPBackendControllerMock()
955+
mparticle.backendController = backendController
956+
957+
let dataPlanFilter = MPDataPlanFilterMock()
958+
dataPlanFilter.transformEventForBaseEventReturnValue = transformedEvent
959+
mparticle.dataPlanFilter = dataPlanFilter
960+
961+
let kitContainer = MPKitContainerMock()
962+
mparticle.setKitContainer(kitContainer)
963+
964+
mparticle.logEvent(event)
965+
966+
// Verify listener was called
967+
XCTAssertEqual(listenerController.onAPICalledApiName?.description, "logEvent:")
968+
XCTAssertTrue(listenerController.onAPICalledParameter1 === event)
969+
970+
// Verify backend was called
971+
XCTAssertTrue(backendController.logBaseEventCalled)
972+
XCTAssertTrue(backendController.logBaseEventEventParam === event)
973+
let completion = backendController.logBaseEventCompletionHandler!
974+
XCTAssertNotNil(completion)
975+
completion(event, .success)
976+
977+
// Verify executor usage
978+
XCTAssertTrue(executor.executeOnMessageQueueAsync)
979+
XCTAssertTrue(executor.executeOnMainAsync)
980+
981+
// Verify filter transformed event
982+
XCTAssertTrue(dataPlanFilter.transformEventForBaseEventCalled)
983+
XCTAssertTrue(dataPlanFilter.transformEventForBaseEventParam === event)
984+
985+
// Verify kit container forwarded transformed event
986+
XCTAssertTrue(kitContainer.forwardSDKCallCalled)
987+
XCTAssertEqual(kitContainer.forwardSDKCallSelectorParam?.description, "logBaseEvent:")
988+
XCTAssertEqual(kitContainer.forwardSDKCallMessageTypeParam, .unknown)
989+
XCTAssertTrue(kitContainer.forwardSDKCallEventParam === transformedEvent)
990+
}
991+
992+
889993
// MARK: - logCustomEvent
890994

891995
func testLogCustomEventWithNilEvent_logsError() {

UnitTests/Mocks/MPDataPlanFilterMock.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,14 @@ class MPDataPlanFilterMock: NSObject, MPDataPlanFilterProtocol {
5656
transformEventForCommerceEventParam = commerceEvent
5757
return transformEventForCommerceEventReturnValue
5858
}
59+
60+
var transformEventForBaseEventCalled = false
61+
var transformEventForBaseEventParam: MPBaseEvent?
62+
var transformEventForBaseEventReturnValue: MPBaseEvent?
63+
64+
func transformEvent(forBaseEvent baseEvent: MPBaseEvent) -> MPBaseEvent? {
65+
transformEventForBaseEventCalled = true
66+
transformEventForBaseEventParam = baseEvent
67+
return transformEventForBaseEventReturnValue
68+
}
5969
}

mParticle-Apple-SDK/Include/mParticle.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -845,7 +845,7 @@ Defaults to false. Prevents the eventsHost above from overwriting the alias endp
845845
@see MPEvent
846846
@see MPCommerceEvent
847847
*/
848-
- (void)logEvent:(MPBaseEvent *)event;
848+
- (void)logEvent:(nullable MPBaseEvent *)event;
849849

850850
/**
851851
Logs an event. This is a convenience method for logging simple events; internally it creates an instance of MPEvent

0 commit comments

Comments
 (0)