From 2340cd975eb8af10b80b227be8374c10b8bcc60f Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Thu, 11 Apr 2024 17:41:48 +0800 Subject: [PATCH 1/3] feat: support add global attribute when using Objc api --- README.md | 2 +- Sources/Clickstream/ClickstreamObjc.swift | 2 +- .../Clickstream/ClickstreamContext.swift | 5 +++++ Tests/ClickstreamTests/SDKInitialTest.swift | 16 +++++++++++++++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 47965d6..b62ff7f 100644 --- a/README.md +++ b/README.md @@ -226,7 +226,7 @@ ClickstreamAnalytics.recordEvent(ClickstreamAnalytics.EventName.SCREEN_VIEW, [ import Clickstream let globalAttribute: ClickstreamAttribute = [ - "channel": "apple", + ClickstreamAnalytics.Attr.APP_INSTALL_CHANNEL: "apple", "class": 6, "level": 5.1, "isOpenNotification": true, diff --git a/Sources/Clickstream/ClickstreamObjc.swift b/Sources/Clickstream/ClickstreamObjc.swift index f2cfd62..7268fbf 100644 --- a/Sources/Clickstream/ClickstreamObjc.swift +++ b/Sources/Clickstream/ClickstreamObjc.swift @@ -103,7 +103,7 @@ import Foundation ClickstreamAnalytics.enable() } - private static func getAttributes(_ attributes: NSDictionary) -> ClickstreamAttribute { + static func getAttributes(_ attributes: NSDictionary) -> ClickstreamAttribute { var result: ClickstreamAttribute = [:] for case let (key as String, value) in attributes { if value is String { diff --git a/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift b/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift index 094d5f5..3d34cef 100644 --- a/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift +++ b/Sources/Clickstream/Dependency/Clickstream/ClickstreamContext.swift @@ -124,6 +124,11 @@ extension UserDefaults: UserDefaultsBehaviour { self.globalAttributes = globalAttributes return self } + + public func withInitialGlobalAttributesObjc(_ globalAttributes: NSDictionary) -> ClickstreamConfiguration { + self.globalAttributes = ClickstreamObjc.getAttributes(globalAttributes) + return self + } } struct ClickstreamContextStorage { diff --git a/Tests/ClickstreamTests/SDKInitialTest.swift b/Tests/ClickstreamTests/SDKInitialTest.swift index b8694d8..e9390d1 100644 --- a/Tests/ClickstreamTests/SDKInitialTest.swift +++ b/Tests/ClickstreamTests/SDKInitialTest.swift @@ -44,7 +44,7 @@ class SDKInitialTest: XCTestCase { .withTrackUserEngagementEvents(false) .withAuthCookie("testAuthCookie") .withInitialGlobalAttributes([ - "channel": "AppStore", + ClickstreamAnalytics.Attr.APP_INSTALL_CHANNEL: "AppStore", "level": 5.1, "class": 5, "isOpenNotification": true @@ -52,6 +52,20 @@ class SDKInitialTest: XCTestCase { try ClickstreamAnalytics.initSDK(configure) } + func testInitSDKWithGlobalAttributeForObjc() throws { + let globalAttribute: NSDictionary = [ + ClickstreamAnalytics.Attr.APP_INSTALL_CHANNEL: "SMS", + "Successful": true, + "Score": 90.1, + "level": 5 + ] + let configure = ClickstreamConfiguration() + .withAppId("testAppId") + .withEndpoint("https://example.com/collect") + .withInitialGlobalAttributesObjc(globalAttribute) + try ClickstreamAnalytics.initSDK(configure) + } + func testInitSDKOverrideAllAmplifyConfiguration() throws { let configure = ClickstreamConfiguration() .withAppId("testAppId1") From 6a99f2709f0c4ec9a64054d9dcc1202abcc85995 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Fri, 12 Apr 2024 11:38:23 +0800 Subject: [PATCH 2/3] ci: test 2 --- Tests/ClickstreamTests/IntegrationTest.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/ClickstreamTests/IntegrationTest.swift b/Tests/ClickstreamTests/IntegrationTest.swift index 01abbf2..c3a1526 100644 --- a/Tests/ClickstreamTests/IntegrationTest.swift +++ b/Tests/ClickstreamTests/IntegrationTest.swift @@ -117,7 +117,7 @@ class IntegrationTest: XCTestCase { ClickstreamAnalytics.recordEvent("testEvent") Thread.sleep(forTimeInterval: 0.1) ClickstreamAnalytics.flushEvents() - Thread.sleep(forTimeInterval: 0.2) + Thread.sleep(forTimeInterval: 0.5) let eventCount = try eventRecorder.dbUtil.getEventCount() XCTAssertEqual(0, eventCount) } From a6b48eb348efaa362078f716e14c0eba25c07964 Mon Sep 17 00:00:00 2001 From: xiaoweii Date: Fri, 12 Apr 2024 11:47:43 +0800 Subject: [PATCH 3/3] tests: fix appId for test --- Tests/ClickstreamTests/Clickstream/AnalyticsClientTest.swift | 2 +- .../Clickstream/AutoRecordEventClientTest.swift | 2 +- Tests/ClickstreamTests/Clickstream/EventRecorderTest.swift | 2 +- Tests/ClickstreamTests/Clickstream/SessionClientTests.swift | 2 +- Tests/ClickstreamTests/ClickstreamPluginTestBase.swift | 4 ++-- Tests/ClickstreamTests/DataBase/ClickstreamDBUtilTest.swift | 2 +- Tests/ClickstreamTests/IntegrationTest.swift | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Tests/ClickstreamTests/Clickstream/AnalyticsClientTest.swift b/Tests/ClickstreamTests/Clickstream/AnalyticsClientTest.swift index a53fab6..0b241c7 100644 --- a/Tests/ClickstreamTests/Clickstream/AnalyticsClientTest.swift +++ b/Tests/ClickstreamTests/Clickstream/AnalyticsClientTest.swift @@ -19,7 +19,7 @@ class AnalyticsClientTest: XCTestCase { override func setUp() async throws { UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!) let contextConfiguration = ClickstreamConfiguration.getDefaultConfiguration() - .withAppId(testAppId) + .withAppId(testAppId + UUID().uuidString) .withEndpoint(testEndpoint) .withSendEventInterval(10_000) .withTrackAppExceptionEvents(false) diff --git a/Tests/ClickstreamTests/Clickstream/AutoRecordEventClientTest.swift b/Tests/ClickstreamTests/Clickstream/AutoRecordEventClientTest.swift index 4d9f178..215e3da 100644 --- a/Tests/ClickstreamTests/Clickstream/AutoRecordEventClientTest.swift +++ b/Tests/ClickstreamTests/Clickstream/AutoRecordEventClientTest.swift @@ -24,7 +24,7 @@ class AutoRecordEventClientTest: XCTestCase { activityTracker = MockActivityTracker() let contextConfiguration = ClickstreamConfiguration.getDefaultConfiguration() - .withAppId(testAppId) + .withAppId(testAppId + UUID().uuidString) .withEndpoint(testEndpoint) .withSendEventInterval(10_000) .withTrackAppExceptionEvents(true) diff --git a/Tests/ClickstreamTests/Clickstream/EventRecorderTest.swift b/Tests/ClickstreamTests/Clickstream/EventRecorderTest.swift index 29d0005..65b531a 100644 --- a/Tests/ClickstreamTests/Clickstream/EventRecorderTest.swift +++ b/Tests/ClickstreamTests/Clickstream/EventRecorderTest.swift @@ -40,7 +40,7 @@ class EventRecorderTest: XCTestCase { return HttpResponse.ok(.text("request success")) } try! server.start() - let appId = testAppId + String(describing: Date().millisecondsSince1970) + let appId = testAppId + UUID().uuidString let contextConfiguration = ClickstreamConfiguration.getDefaultConfiguration() .withAppId(appId) diff --git a/Tests/ClickstreamTests/Clickstream/SessionClientTests.swift b/Tests/ClickstreamTests/Clickstream/SessionClientTests.swift index 288cc0d..5053e9d 100644 --- a/Tests/ClickstreamTests/Clickstream/SessionClientTests.swift +++ b/Tests/ClickstreamTests/Clickstream/SessionClientTests.swift @@ -24,7 +24,7 @@ class SessionClientTests: XCTestCase { mockNetworkMonitor = MockNetworkMonitor() let contextConfiguration = ClickstreamConfiguration.getDefaultConfiguration() - .withAppId(testAppId) + .withAppId(testAppId + UUID().uuidString) .withEndpoint(testEndpoint) .withSendEventInterval(10_000) .withTrackAppExceptionEvents(false) diff --git a/Tests/ClickstreamTests/ClickstreamPluginTestBase.swift b/Tests/ClickstreamTests/ClickstreamPluginTestBase.swift index 6b018e0..d53f222 100644 --- a/Tests/ClickstreamTests/ClickstreamPluginTestBase.swift +++ b/Tests/ClickstreamTests/ClickstreamPluginTestBase.swift @@ -21,7 +21,7 @@ class ClickstreamPluginTestBase: XCTestCase { analyticsPlugin = AWSClickstreamPlugin() let contextConfiguration = ClickstreamConfiguration.getDefaultConfiguration() - .withAppId(testAppId) + .withAppId(testAppId + UUID().uuidString) .withEndpoint(testEndpoint) .withSendEventInterval(10_000) .withTrackAppExceptionEvents(false) @@ -34,7 +34,7 @@ class ClickstreamPluginTestBase: XCTestCase { let eventRecorder = try EventRecorder(clickstream: clickstream) let analyticsClient = try AnalyticsClient(clickstream: clickstream, eventRecorder: eventRecorder, - sessionClient: sessionClient ) + sessionClient: sessionClient) analyticsPlugin.analyticsClient = analyticsClient clickstream.analyticsClient = analyticsClient clickstream.networkMonitor = mockNetworkMonitor diff --git a/Tests/ClickstreamTests/DataBase/ClickstreamDBUtilTest.swift b/Tests/ClickstreamTests/DataBase/ClickstreamDBUtilTest.swift index bcfdba4..e1a6b1d 100644 --- a/Tests/ClickstreamTests/DataBase/ClickstreamDBUtilTest.swift +++ b/Tests/ClickstreamTests/DataBase/ClickstreamDBUtilTest.swift @@ -17,7 +17,7 @@ class ClickstreamDBUtiltest: XCTestCase { override func setUp() { do { - let appId = testAppId + String(describing: Date().millisecondsSince1970) + let appId = testAppId + UUID().uuidString dbAdapter = try BaseDBAdapter(prefixPath: EventRecorder.Constants.dbPathPrefix, databaseName: appId) dbUtil = ClickstreamDBUtil(dbAdapter: dbAdapter) diff --git a/Tests/ClickstreamTests/IntegrationTest.swift b/Tests/ClickstreamTests/IntegrationTest.swift index c3a1526..25a305c 100644 --- a/Tests/ClickstreamTests/IntegrationTest.swift +++ b/Tests/ClickstreamTests/IntegrationTest.swift @@ -30,7 +30,7 @@ class IntegrationTest: XCTestCase { } try! server.start() await Amplify.reset() - let appId = "testAppId" + String(describing: Date().millisecondsSince1970) + let appId = "testAppId" + UUID().uuidString let configure = ClickstreamConfiguration.getDefaultConfiguration() .withAppId(appId) .withEndpoint("http://localhost:8080/collect")