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
3 changes: 3 additions & 0 deletions UnitTests/MParticle+PrivateMethods.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@
- (void)setKitContainer:(id<MPKitContainerProtocol>) kitContainer;
- (void)forwardLogInstall;
- (void)forwardLogUpdate;
- (void)setUploadInterval:(NSTimeInterval)uploadInterval;
- (NSTimeInterval)uploadInterval;
- (NSDictionary<NSString *, id> *)userAttributesForUserId:(NSNumber *)userId;

@property (nonatomic, strong, nonnull) id<MPBackendControllerProtocol> backendController;
@property (nonatomic, strong) id<SettingsProviderProtocol> settingsProvider;
Expand Down
109 changes: 108 additions & 1 deletion UnitTests/MParticleTestsSwift.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class MParticleTestsSwift: XCTestCase {
override func setUp() {
super.setUp()

mparticle = MParticle.sharedInstance()
mparticle = MParticle()
mparticle.logLevel = .verbose
mparticle.customLogger = customLogger
listenerController = MPListenerControllerMock()
Expand Down Expand Up @@ -778,4 +778,111 @@ class MParticleTestsSwift: XCTestCase {
XCTAssertNil(kitContainer.forwardSDKCallParametersParam)
XCTAssertNil(kitContainer.forwardSDKCallUserInfoParam)
}

func testIndentityReturnsTheSameObject() {
let identity = mparticle.identity
XCTAssertTrue(identity === mparticle.identity)
}

func testRoktReturnsTheSameObject() {
let rokt = mparticle.rokt
XCTAssertTrue(rokt === mparticle.rokt)
}

func testSessionTimeoutReturnsValueFromBackendController() {
let backendController = MPBackendControllerMock()
mparticle.backendController = backendController
mparticle.backendController.sessionTimeout = 100
XCTAssertEqual(mparticle.sessionTimeout, 100)
}

func testUniqueIdentifierRwturnedFromStateMachine() {
let stateMachine = MPStateMachineMock()
stateMachine.consumerInfo.uniqueIdentifier = "test"
mparticle.stateMachine = stateMachine
XCTAssertEqual(mparticle.uniqueIdentifier, "test")
}

func testSetUploadIntervalChangeValueInBackendControllerWhenIntervalGreaterThenOne() {
let backendController = MPBackendControllerMock()
mparticle.backendController = backendController
mparticle.setUploadInterval(3)
XCTAssertEqual(backendController.uploadInterval, 3)
}

func testSetUploadIntervalNotChangeValueInBackendControllerWhenIntervalLessThenOne() {
let backendController = MPBackendControllerMock()
mparticle.backendController = backendController
mparticle.setUploadInterval(0.1)
XCTAssertEqual(backendController.uploadInterval, 0.0)
}

func testUploadIntervalGetFromBackendController() {
let backendController = MPBackendControllerMock()
mparticle.backendController = backendController
backendController.uploadInterval = 100
XCTAssertEqual(mparticle.uploadInterval, 100)
}

func testUserAttributesForUserIdRequestDataFromBackendController() {
let backendController = MPBackendControllerMock()
mparticle.backendController = backendController

backendController.userAttributesReturnValue = ["key": "value"]
let dictionary = mparticle.userAttributes(forUserId: 1)
XCTAssertEqual(dictionary?["key"] as? String, "value")
XCTAssertTrue(backendController.userAttributesCalled)
XCTAssertEqual(backendController.userAttributesUserIdParam, 1)
}

func testConfigureWithOptionsNoSettings() {
let backendController = MPBackendControllerMock()
let settingsProvider = SettingsProviderMock()
mparticle.settingsProvider = settingsProvider
mparticle.backendController = backendController
mparticle.configure(with: .init())
XCTAssertEqual(backendController.sessionTimeout, 0.0)
XCTAssertEqual(backendController.uploadInterval, 0.0)
XCTAssertNil(mparticle.customUserAgent)
XCTAssertTrue(mparticle.collectUserAgent)
XCTAssertTrue(mparticle.trackNotifications)
#if os(iOS)
#if !MPARTICLE_LOCATION_DISABLE
XCTAssertNil(listenerController.onAPICalledApiName)
#endif
#endif
}

func testConfigureWithOptionsWithSettingsAndOptionNotSet() {
let backendController = MPBackendControllerMock()
let settingsProvider = SettingsProviderMock()
mparticle.settingsProvider = settingsProvider
settingsProvider.configSettings = [
"session_timeout": 100,
"upload_interval": 50,
"custom_user_agent": "agent",
"collect_user_agent": false,
"track_notifications": false,
"enable_location_tracking": true
]
mparticle.backendController = backendController
let options = MParticleOptions()
options.isSessionTimeoutSet = false
options.isUploadIntervalSet = false
options.isCollectUserAgentSet = false
options.isCollectUserAgentSet = false
options.isTrackNotificationsSet = false
mparticle.configure(with: .init())
XCTAssertEqual(backendController.sessionTimeout, 100.0)
XCTAssertEqual(backendController.uploadInterval, 50.0)
XCTAssertEqual(mparticle.customUserAgent, "agent")
XCTAssertFalse(mparticle.collectUserAgent)
XCTAssertFalse(mparticle.trackNotifications)

#if os(iOS)
#if !MPARTICLE_LOCATION_DISABLE
XCTAssertEqual(listenerController.onAPICalledApiName?.description, "beginLocationTracking:minDistance:authorizationRequest:")
#endif
#endif
}
}
35 changes: 29 additions & 6 deletions mParticle-Apple-SDK/Logger/MPLogger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,41 @@ public class MPLog: NSObject {
MPLogger(loggerLevel: .verbose, format: format, arguments: arguments)
}

public var logLevel: MPILogLevel
public var customLogger: ((String) -> Void)?

public init(logLevel: MPILogLevel) {
self.logLevel = logLevel
}

private func log(loggerLevel: MPILogLevel, format: String, arguments: any CVarArg...) {
if (logLevel.rawValue >= loggerLevel.rawValue && loggerLevel != .none) {
let msg = String.localizedStringWithFormat("mParticle -> \(format)", arguments)
if let customLogger = customLogger {
customLogger(msg)
} else {
NSLog(msg)
}
}
}

@objc
public func error(_ message: String) {
log(loggerLevel: .error, format: message)
}

@objc
public static func error(message: String) {
error(message)
public func warning(_ message: String) {
log(loggerLevel: .warning, format: message)
}

@objc
public static func warning(message: String) {
warning(message)
public func debug(_ message: String) {
log(loggerLevel: .debug, format: message)
}

@objc
public static func debug(message: String) {
debug(message)
public func verbose(_ message: String) {
log(loggerLevel: .verbose, format: message)
}
}
Loading
Loading