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
18 changes: 18 additions & 0 deletions UnitTests/Mocks/MPKitContainerMock.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,16 @@ class MPKitContainerMock: MPKitContainerProtocol {
forwardCommerceEventCallCalled = true
forwardCommerceEventCallCommerceEventParam = commerceEvent
}

struct ForwardCall {
let selector: Selector
let event: MPBaseEvent?
let parameters: MPForwardQueueParameters?
let messageType: MPMessageType
let userInfo: [AnyHashable: Any]?
}

private(set) var forwardSDKCalls: [ForwardCall] = []

var forwardSDKCallCalled = false
var forwardSDKCallSelectorParam: Selector?
Expand All @@ -41,6 +51,14 @@ class MPKitContainerMock: MPKitContainerProtocol {
forwardSDKCallMessageTypeParam = messageType
forwardSDKCallUserInfoParam = userInfo
forwardSDKCallExpectation?.fulfill()

forwardSDKCalls.append(
ForwardCall(selector: selector,
event: event,
parameters: parameters,
messageType: messageType,
userInfo: userInfo)
)
}

var forwardSDKCallBatchParam: [AnyHashable: Any]?
Expand Down
56 changes: 52 additions & 4 deletions UnitTests/SwiftTests/MParticle/MParticleEventTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -84,20 +84,68 @@ final class MParticleEventTests: MParticleTestBase {
XCTAssertTrue(kitContainer.forwardSDKCallEventParam === transformedBaseEvent)
}

func test_logEventCallback_doesNotLogMessage_whenDataFilterIsNil() {
mparticle.dataPlanFilter = nil
XCTAssertNil(mparticle.dataPlanFilter)
mparticle.logEventCallback(event, execStatus: .success)
func test_logEventCallback_doesNothing_whenExecStatusIsFail() {
mparticle.logEventCallback(event, execStatus: .fail)

XCTAssertFalse(dataPlanFilter.transformEventCalled)
XCTAssertFalse(executor.executeOnMainAsync)
XCTAssertFalse(kitContainer.forwardSDKCallCalled)

XCTAssertNil(receivedMessage)
}

func test_logEventCallback_invokesKitContainer_whenDataPlanFilterIsNil() {
dataPlanFilter = nil
mparticle.dataPlanFilter = dataPlanFilter

mparticle.logEventCallback(event, execStatus: .success)

XCTAssertTrue(executor.executeOnMainAsync)

XCTAssertEqual(kitContainer.forwardSDKCalls.count, 2)
let expectedSelectors = ["endTimedEvent:", "logEvent:"]
let actualSelectors = kitContainer.forwardSDKCalls.map { $0.selector.description }
XCTAssertEqual(actualSelectors, expectedSelectors)

for call in kitContainer.forwardSDKCalls {
XCTAssertTrue(call.event === event)
XCTAssertNil(call.parameters)
XCTAssertEqual(call.messageType, .event)
XCTAssertNil(call.userInfo)
}
}

func test_logEventCallback_blocksEvent_whenFilterReturnsNil() {
dataPlanFilter.transformEventReturnValue = nil

mparticle.logEventCallback(event, execStatus: .success)

XCTAssertTrue(dataPlanFilter.transformEventCalled)
XCTAssertEqual(dataPlanFilter.transformEventEventParam, event)

XCTAssertFalse(executor.executeOnMainAsync)
XCTAssertFalse(kitContainer.forwardSDKCallCalled)

assertReceivedMessage("Blocked timed event end from kits", event: event)
}

func test_eventWithName_returnsEvent_whenBackendProvidesEvent() {
backendController.eventWithNameReturnValue = event

let result = mparticle.event(withName: event.name)

XCTAssertTrue(backendController.eventWithNameCalled)
XCTAssertEqual(backendController.eventWithNameEventNameParam, event.name)
XCTAssertTrue(result === event)
}

func test_eventWithName_returnsNil_whenBackendReturnsNil() {
backendController.eventWithNameReturnValue = nil

let result = mparticle.event(withName: event.name)

XCTAssertTrue(backendController.eventWithNameCalled)
XCTAssertEqual(backendController.eventWithNameEventNameParam, event.name)
XCTAssertNil(result)
}
}
61 changes: 61 additions & 0 deletions UnitTests/SwiftTests/MParticle/MParticleTimedEventTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,65 @@ final class MParticleTimedEventTests: MParticleTestBase {
backendController.beginTimedEventCompletionHandler?(event, .success)
XCTAssertNotNil(receivedMessage)
}

func test_endTimedEvent_invokesDependencies_andExecutesCompletionHandler() {
dataPlanFilter.transformEventReturnValue = transformedEvent

mparticle.endTimedEvent(event)

wait(for: [listenerController.onAPICalledExpectation!], timeout: 0.1)

XCTAssertNil(event.duration)
XCTAssertNil(event.endTime)

XCTAssertTrue(executor.executeOnMessageQueueAsync)
XCTAssertEqual(listenerController.onAPICalledApiName?.description, "endTimedEvent:")
XCTAssertTrue(listenerController.onAPICalledParameter1 === event)

XCTAssertTrue(backendController.logEventCalled)
XCTAssertTrue(backendController.logEventEventParam === event)
XCTAssertNotNil(backendController.logEventCompletionHandler)
backendController.logEventCompletionHandler?(event, .success)
}

func test_endTimedEvent_blocksEvent_whenTransformEventReturnsNil() {
dataPlanFilter.transformEventReturnValue = nil

mparticle.endTimedEvent(event)

wait(for: [listenerController.onAPICalledExpectation!], timeout: 0.1)

XCTAssertNil(event.duration)
XCTAssertNil(event.endTime)

XCTAssertTrue(executor.executeOnMessageQueueAsync)
XCTAssertEqual(listenerController.onAPICalledApiName?.description, "endTimedEvent:")
XCTAssertTrue(listenerController.onAPICalledParameter1 === event)

XCTAssertTrue(backendController.logEventCalled)
XCTAssertTrue(backendController.logEventEventParam === event)
XCTAssertNotNil(backendController.logEventCompletionHandler)
backendController.logEventCompletionHandler?(event, .success)
}

func test_endTimedEvent_forwardsOriginalEvent_whenDataPlanFilterIsNil() {
dataPlanFilter = nil
mparticle.dataPlanFilter = dataPlanFilter

mparticle.endTimedEvent(event)

wait(for: [listenerController.onAPICalledExpectation!], timeout: 0.1)

XCTAssertNil(event.duration)
XCTAssertNil(event.endTime)

XCTAssertTrue(executor.executeOnMessageQueueAsync)
XCTAssertEqual(listenerController.onAPICalledApiName?.description, "endTimedEvent:")
XCTAssertTrue(listenerController.onAPICalledParameter1 === event)

XCTAssertTrue(backendController.logEventCalled)
XCTAssertTrue(backendController.logEventEventParam === event)
XCTAssertNotNil(backendController.logEventCompletionHandler)
backendController.logEventCompletionHandler?(event, .success)
}
}