Skip to content

Commit 72a111c

Browse files
authored
feat: SDKE-64 Improve mParticle.m test coverage in swift 3 (#410)
* - test more methods * - use logger instance instead static methods * - each test uses unique instance of MParticle * - make initializer public
1 parent b8d67ec commit 72a111c

File tree

4 files changed

+205
-64
lines changed

4 files changed

+205
-64
lines changed

UnitTests/MParticle+PrivateMethods.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@
3535
- (void)setKitContainer:(id<MPKitContainerProtocol>) kitContainer;
3636
- (void)forwardLogInstall;
3737
- (void)forwardLogUpdate;
38+
- (void)setUploadInterval:(NSTimeInterval)uploadInterval;
39+
- (NSTimeInterval)uploadInterval;
40+
- (NSDictionary<NSString *, id> *)userAttributesForUserId:(NSNumber *)userId;
3841

3942
@property (nonatomic, strong, nonnull) id<MPBackendControllerProtocol> backendController;
4043
@property (nonatomic, strong) id<SettingsProviderProtocol> settingsProvider;

UnitTests/MParticleTestsSwift.swift

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class MParticleTestsSwift: XCTestCase {
1717
override func setUp() {
1818
super.setUp()
1919

20-
mparticle = MParticle.sharedInstance()
20+
mparticle = MParticle()
2121
mparticle.logLevel = .verbose
2222
mparticle.customLogger = customLogger
2323
listenerController = MPListenerControllerMock()
@@ -778,4 +778,111 @@ class MParticleTestsSwift: XCTestCase {
778778
XCTAssertNil(kitContainer.forwardSDKCallParametersParam)
779779
XCTAssertNil(kitContainer.forwardSDKCallUserInfoParam)
780780
}
781+
782+
func testIndentityReturnsTheSameObject() {
783+
let identity = mparticle.identity
784+
XCTAssertTrue(identity === mparticle.identity)
785+
}
786+
787+
func testRoktReturnsTheSameObject() {
788+
let rokt = mparticle.rokt
789+
XCTAssertTrue(rokt === mparticle.rokt)
790+
}
791+
792+
func testSessionTimeoutReturnsValueFromBackendController() {
793+
let backendController = MPBackendControllerMock()
794+
mparticle.backendController = backendController
795+
mparticle.backendController.sessionTimeout = 100
796+
XCTAssertEqual(mparticle.sessionTimeout, 100)
797+
}
798+
799+
func testUniqueIdentifierRwturnedFromStateMachine() {
800+
let stateMachine = MPStateMachineMock()
801+
stateMachine.consumerInfo.uniqueIdentifier = "test"
802+
mparticle.stateMachine = stateMachine
803+
XCTAssertEqual(mparticle.uniqueIdentifier, "test")
804+
}
805+
806+
func testSetUploadIntervalChangeValueInBackendControllerWhenIntervalGreaterThenOne() {
807+
let backendController = MPBackendControllerMock()
808+
mparticle.backendController = backendController
809+
mparticle.setUploadInterval(3)
810+
XCTAssertEqual(backendController.uploadInterval, 3)
811+
}
812+
813+
func testSetUploadIntervalNotChangeValueInBackendControllerWhenIntervalLessThenOne() {
814+
let backendController = MPBackendControllerMock()
815+
mparticle.backendController = backendController
816+
mparticle.setUploadInterval(0.1)
817+
XCTAssertEqual(backendController.uploadInterval, 0.0)
818+
}
819+
820+
func testUploadIntervalGetFromBackendController() {
821+
let backendController = MPBackendControllerMock()
822+
mparticle.backendController = backendController
823+
backendController.uploadInterval = 100
824+
XCTAssertEqual(mparticle.uploadInterval, 100)
825+
}
826+
827+
func testUserAttributesForUserIdRequestDataFromBackendController() {
828+
let backendController = MPBackendControllerMock()
829+
mparticle.backendController = backendController
830+
831+
backendController.userAttributesReturnValue = ["key": "value"]
832+
let dictionary = mparticle.userAttributes(forUserId: 1)
833+
XCTAssertEqual(dictionary?["key"] as? String, "value")
834+
XCTAssertTrue(backendController.userAttributesCalled)
835+
XCTAssertEqual(backendController.userAttributesUserIdParam, 1)
836+
}
837+
838+
func testConfigureWithOptionsNoSettings() {
839+
let backendController = MPBackendControllerMock()
840+
let settingsProvider = SettingsProviderMock()
841+
mparticle.settingsProvider = settingsProvider
842+
mparticle.backendController = backendController
843+
mparticle.configure(with: .init())
844+
XCTAssertEqual(backendController.sessionTimeout, 0.0)
845+
XCTAssertEqual(backendController.uploadInterval, 0.0)
846+
XCTAssertNil(mparticle.customUserAgent)
847+
XCTAssertTrue(mparticle.collectUserAgent)
848+
XCTAssertTrue(mparticle.trackNotifications)
849+
#if os(iOS)
850+
#if !MPARTICLE_LOCATION_DISABLE
851+
XCTAssertNil(listenerController.onAPICalledApiName)
852+
#endif
853+
#endif
854+
}
855+
856+
func testConfigureWithOptionsWithSettingsAndOptionNotSet() {
857+
let backendController = MPBackendControllerMock()
858+
let settingsProvider = SettingsProviderMock()
859+
mparticle.settingsProvider = settingsProvider
860+
settingsProvider.configSettings = [
861+
"session_timeout": 100,
862+
"upload_interval": 50,
863+
"custom_user_agent": "agent",
864+
"collect_user_agent": false,
865+
"track_notifications": false,
866+
"enable_location_tracking": true
867+
]
868+
mparticle.backendController = backendController
869+
let options = MParticleOptions()
870+
options.isSessionTimeoutSet = false
871+
options.isUploadIntervalSet = false
872+
options.isCollectUserAgentSet = false
873+
options.isCollectUserAgentSet = false
874+
options.isTrackNotificationsSet = false
875+
mparticle.configure(with: .init())
876+
XCTAssertEqual(backendController.sessionTimeout, 100.0)
877+
XCTAssertEqual(backendController.uploadInterval, 50.0)
878+
XCTAssertEqual(mparticle.customUserAgent, "agent")
879+
XCTAssertFalse(mparticle.collectUserAgent)
880+
XCTAssertFalse(mparticle.trackNotifications)
881+
882+
#if os(iOS)
883+
#if !MPARTICLE_LOCATION_DISABLE
884+
XCTAssertEqual(listenerController.onAPICalledApiName?.description, "beginLocationTracking:minDistance:authorizationRequest:")
885+
#endif
886+
#endif
887+
}
781888
}

mParticle-Apple-SDK/Logger/MPLogger.swift

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,41 @@ public class MPLog: NSObject {
3737
MPLogger(loggerLevel: .verbose, format: format, arguments: arguments)
3838
}
3939

40+
public var logLevel: MPILogLevel
41+
public var customLogger: ((String) -> Void)?
42+
43+
public init(logLevel: MPILogLevel) {
44+
self.logLevel = logLevel
45+
}
46+
47+
private func log(loggerLevel: MPILogLevel, format: String, arguments: any CVarArg...) {
48+
if (logLevel.rawValue >= loggerLevel.rawValue && loggerLevel != .none) {
49+
let msg = String.localizedStringWithFormat("mParticle -> \(format)", arguments)
50+
if let customLogger = customLogger {
51+
customLogger(msg)
52+
} else {
53+
NSLog(msg)
54+
}
55+
}
56+
}
57+
58+
@objc
59+
public func error(_ message: String) {
60+
log(loggerLevel: .error, format: message)
61+
}
62+
4063
@objc
41-
public static func error(message: String) {
42-
error(message)
64+
public func warning(_ message: String) {
65+
log(loggerLevel: .warning, format: message)
4366
}
4467

4568
@objc
46-
public static func warning(message: String) {
47-
warning(message)
69+
public func debug(_ message: String) {
70+
log(loggerLevel: .debug, format: message)
4871
}
4972

5073
@objc
51-
public static func debug(message: String) {
52-
debug(message)
74+
public func verbose(_ message: String) {
75+
log(loggerLevel: .verbose, format: message)
5376
}
5477
}

0 commit comments

Comments
 (0)