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
1 change: 1 addition & 0 deletions UnitTests/MParticle+PrivateMethods.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
- (void)startWithKeyCallback:(BOOL)firstRun options:(MParticleOptions * _Nonnull)options userDefaults:(id<MPUserDefaultsProtocol>)userDefaults;
- (void)beginTimedEventCompletionHandler:(MPEvent *)event execStatus:(MPExecStatus)execStatus;
- (void)logEventCallback:(MPEvent *)event execStatus:(MPExecStatus)execStatus;
- (void)logCustomEvent:(MPEvent *)event;
- (void)logScreenCallback:(MPEvent *)event execStatus:(MPExecStatus)execStatus;
- (void)leaveBreadcrumbCallback:(MPEvent *)event execStatus:(MPExecStatus)execStatus;
- (void)logErrorCallback:(NSDictionary<NSString *,id> * _Nullable)eventInfo execStatus:(MPExecStatus)execStatus message:(NSString *)message;
Expand Down
91 changes: 91 additions & 0 deletions UnitTests/MParticleTestsSwift.swift
Original file line number Diff line number Diff line change
Expand Up @@ -885,4 +885,95 @@ class MParticleTestsSwift: XCTestCase {
#endif
#endif
}


func testLogCustomEventWithNilEvent_logsError() {
mparticle.logCustomEvent(nil)
XCTAssertEqual(receivedMessage, "mParticle -> Cannot log nil event!")
}

func testLogCustomEventWithFilterReturningNil_blocksEvent() {
let event = MPEvent(name: "blocked", type: .other)!

let executor = ExecutorMock()
mparticle.setExecutor(executor)

let backendController = MPBackendControllerMock()
mparticle.backendController = backendController

let dataPlanFilter = MPDataPlanFilterMock()
dataPlanFilter.transformEventReturnValue = nil
mparticle.dataPlanFilter = dataPlanFilter

mparticle.logCustomEvent(event)

// Verify event timing ended
XCTAssertNil(event.endTime)

// Verify listener was called
XCTAssertEqual(listenerController.onAPICalledApiName?.description, "logCustomEvent:")
XCTAssertTrue(listenerController.onAPICalledParameter1 === event)

// Verify backend was called
XCTAssertTrue(backendController.logEventCalled)
XCTAssertTrue(backendController.logEventEventParam === event)
XCTAssertNotNil(backendController.logEventCompletionHandler)

// Verify executor usage
XCTAssertTrue(executor.executeOnMessageQueueAsync)

// Verify filter transform event
XCTAssertTrue(dataPlanFilter.transformEventCalled)
XCTAssertTrue(dataPlanFilter.transformEventEventParam === event)

// Logger should record the blocked event message
XCTAssertEqual(receivedMessage, "mParticle -> Blocked custom event from kits: \(event)")
}

func testLogCustomEventWithFilterReturningEvent_forwardsTransformedEvent() {
let event = MPEvent(name: "original", type: .other)!
let transformedEvent = MPEvent(name: "transformed", type: .other)!

let executor = ExecutorMock()
mparticle.setExecutor(executor)

let backendController = MPBackendControllerMock()
mparticle.backendController = backendController

let dataPlanFilter = MPDataPlanFilterMock()
dataPlanFilter.transformEventReturnValue = transformedEvent
mparticle.dataPlanFilter = dataPlanFilter

let kitContainer = MPKitContainerMock()
mparticle.setKitContainer(kitContainer)

mparticle.logCustomEvent(event)

// Verify event timing ended
XCTAssertNil(event.endTime)

// Verify listener was called
XCTAssertEqual(listenerController.onAPICalledApiName?.description, "logCustomEvent:")
XCTAssertTrue(listenerController.onAPICalledParameter1 === event)

// Verify backend was called
XCTAssertTrue(backendController.logEventCalled)
XCTAssertTrue(backendController.logEventEventParam === event)
XCTAssertNotNil(backendController.logEventCompletionHandler)

// Verify executor usage
XCTAssertTrue(executor.executeOnMessageQueueAsync)
XCTAssertTrue(executor.executeOnMainAsync)

// Verify filter transformed event
XCTAssertTrue(dataPlanFilter.transformEventCalled)
XCTAssertTrue(dataPlanFilter.transformEventEventParam === event)

// Verify kit container forwarded transformed event
XCTAssertTrue(kitContainer.forwardSDKCallCalled)
XCTAssertEqual(kitContainer.forwardSDKCallSelectorParam?.description, "logEvent:")
XCTAssertEqual(kitContainer.forwardSDKCallMessageTypeParam, .event)
XCTAssertTrue(kitContainer.forwardSDKCallEventParam === transformedEvent)
}

}
1 change: 0 additions & 1 deletion mParticle-Apple-SDK/Include/MPBackendController.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@ extern const NSInteger kInvalidKey;
- (void)logError:(nullable NSString *)message exception:(nullable NSException *)exception topmostContext:(nullable id)topmostContext eventInfo:(nullable NSDictionary *)eventInfo completionHandler:(void (^ _Nonnull)(NSString * _Nullable message, MPExecStatus execStatus))completionHandler;
- (void)logCrash:(nullable NSString *)message stackTrace:(nullable NSString *)stackTrace plCrashReport:(nonnull NSString *)plCrashReport completionHandler:(void (^ _Nonnull)(NSString * _Nullable message, MPExecStatus execStatus)) completionHandler;
- (void)logBaseEvent:(nonnull MPBaseEvent *)event completionHandler:(void (^ _Nonnull)(MPBaseEvent * _Nonnull event, MPExecStatus execStatus))completionHandler;
- (void)logEvent:(nonnull MPEvent *)event completionHandler:(void (^ _Nonnull)(MPEvent * _Nonnull event, MPExecStatus execStatus))completionHandler;
- (void)logCommerceEvent:(nonnull MPCommerceEvent *)commerceEvent completionHandler:(void (^ _Nonnull)(MPCommerceEvent * _Nonnull commerceEvent, MPExecStatus execStatus))completionHandler;
- (void)logNetworkPerformanceMeasurement:(nonnull MPNetworkPerformance *)networkPerformance completionHandler:(void (^ _Nullable)(MPNetworkPerformance * _Nonnull networkPerformance, MPExecStatus execStatus))completionHandler;
- (void)logScreen:(nonnull MPEvent *)event completionHandler:(void (^ _Nonnull)(MPEvent * _Nonnull event, MPExecStatus execStatus))completionHandler;
Expand Down