Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
20 changes: 20 additions & 0 deletions UnitTests/SwiftTests/MParticle/MParticleEventTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -100,4 +100,24 @@ final class MParticleEventTests: MParticleTestBase {

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)
}
}
109 changes: 109 additions & 0 deletions UnitTests/SwiftTests/MParticle/MParticleTimedEventTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,113 @@ 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)

XCTAssertTrue(dataPlanFilter.transformEventCalled)
XCTAssertTrue(dataPlanFilter.transformEventEventParam === event)
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 === transformedEvent)
XCTAssertNil(call.parameters)
XCTAssertEqual(call.messageType, .event)
XCTAssertNil(call.userInfo)
}

XCTAssertNil(receivedMessage)
}

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)

XCTAssertTrue(dataPlanFilter.transformEventCalled)
XCTAssertTrue(dataPlanFilter.transformEventEventParam === event)

XCTAssertFalse(executor.executeOnMainAsync)
XCTAssertFalse(kitContainer.forwardSDKCallCalled)
XCTAssertTrue(kitContainer.forwardSDKCalls.isEmpty)

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

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)

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)
}

XCTAssertNil(receivedMessage)
}
}
Loading