Skip to content

Commit 27e9b4e

Browse files
feat: add user control for assignment event tracking
1 parent 9b6b813 commit 27e9b4e

File tree

3 files changed

+19
-51
lines changed

3 files changed

+19
-51
lines changed

Sources/Experiment/ExperimentClient.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -513,8 +513,8 @@ internal class DefaultExperimentClient : NSObject, ExperimentClient {
513513
request.setValue(flagKeysB64EncodedUrl, forHTTPHeaderField: "X-Amp-Exp-Flag-Keys")
514514
}
515515

516-
// Add tracking option from current options or from stored setting
517-
let trackingOptionValue = options?.trackingOption ?? trackingOptionStorageQueue.sync { trackingOption.get(key: "default") }
516+
// Add tracking option from stored setting
517+
let trackingOptionValue = trackingOptionStorageQueue.sync { trackingOption.get(key: "default") }
518518
if let trackingOptionValue = trackingOptionValue {
519519
request.setValue(trackingOptionValue, forHTTPHeaderField: "X-Amp-Exp-Track")
520520
}

Sources/Experiment/FetchOptions.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,8 @@ import Foundation
99

1010
@objc public class FetchOptions : NSObject {
1111
@objc public let flagKeys: [String]?
12-
@objc public let trackingOption: String?
1312

14-
@objc public init(_ flagKeys: [String]? = nil, trackingOption: String? = nil) {
13+
@objc public init(_ flagKeys: [String]? = nil) {
1514
self.flagKeys = flagKeys
16-
self.trackingOption = trackingOption
1715
}
1816
}

Tests/ExperimentTests/ExperimentClientTests.swift

Lines changed: 16 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,8 +1255,8 @@ class ExperimentClientTests: XCTestCase {
12551255
let client = DefaultExperimentClient(apiKey: "", config: config, storage: InMemoryStorage())
12561256
XCTAssertEqual(900000, client.config.flagConfigPollingIntervalMillis)
12571257
}
1258-
1259-
func testSetTrackAssignmentEvent() {
1258+
1259+
func testSetTrackAssignmentEventSetsTrackingOptionAndFetchUsesCorrectOptions() {
12601260
let client = DefaultExperimentClient(
12611261
apiKey: API_KEY,
12621262
config: ExperimentConfigBuilder()
@@ -1265,22 +1265,22 @@ class ExperimentClientTests: XCTestCase {
12651265
storage: InMemoryStorage()
12661266
)
12671267

1268-
// Test setting track assignment event to true
1268+
// Set track assignment event to true
12691269
client.setTrackAssignmentEvent(true)
12701270

12711271
// Verify the setting was stored
12721272
let storedOption = client.trackingOption.get(key: "default")
12731273
XCTAssertEqual(storedOption, "track")
12741274

1275-
// Test setting track assignment event to false
1275+
// Set track assignment event to false
12761276
client.setTrackAssignmentEvent(false)
12771277

12781278
// Verify the setting was updated
12791279
let updatedOption = client.trackingOption.get(key: "default")
12801280
XCTAssertEqual(updatedOption, "no-track")
12811281
}
12821282

1283-
func testSetTrackAssignmentEventPersistence() {
1283+
func testSetTrackAssignmentEventPersistsSettingToStorage() {
12841284
let storage = InMemoryStorage()
12851285

12861286
// Create first client and set track assignment event
@@ -1307,7 +1307,7 @@ class ExperimentClientTests: XCTestCase {
13071307
XCTAssertEqual(storedOption, "track")
13081308
}
13091309

1310-
func testSetTrackAssignmentEventMultipleCalls() {
1310+
func testMultipleCallsToSetTrackAssignmentEventUsesLatestSetting() {
13111311
let client = DefaultExperimentClient(
13121312
apiKey: API_KEY,
13131313
config: ExperimentConfigBuilder()
@@ -1325,7 +1325,7 @@ class ExperimentClientTests: XCTestCase {
13251325
XCTAssertEqual(storedOption, "no-track")
13261326
}
13271327

1328-
func testSetTrackAssignmentEventWithFetchOptions() {
1328+
func testSetTrackAssignmentEventPreservesOtherExistingOptions() {
13291329
let client = DefaultExperimentClient(
13301330
apiKey: API_KEY,
13311331
config: ExperimentConfigBuilder()
@@ -1337,48 +1337,18 @@ class ExperimentClientTests: XCTestCase {
13371337
// Set track assignment event to true
13381338
client.setTrackAssignmentEvent(true)
13391339

1340-
// Create fetch options with flag keys
1341-
let fetchOptions = FetchOptions(["test-flag"], trackingOption: "no-track")
1342-
1343-
// Verify that explicit tracking option in fetch options takes precedence
1344-
XCTAssertEqual(fetchOptions.trackingOption, "no-track")
1345-
XCTAssertEqual(fetchOptions.flagKeys, ["test-flag"])
1346-
}
1347-
1348-
func testSetTrackAssignmentEventDefaultBehavior() {
1349-
let client = DefaultExperimentClient(
1350-
apiKey: API_KEY,
1351-
config: ExperimentConfigBuilder()
1352-
.debug(true)
1353-
.build(),
1354-
storage: InMemoryStorage()
1355-
)
1356-
1357-
// Verify default behavior when setTrackAssignmentEvent is not called
1340+
// Verify the tracking option is set
13581341
let storedOption = client.trackingOption.get(key: "default")
1359-
XCTAssertNil(storedOption)
1360-
}
1361-
1362-
func testSetTrackAssignmentEventWithFetch() {
1363-
let client = DefaultExperimentClient(
1364-
apiKey: API_KEY,
1365-
config: ExperimentConfigBuilder()
1366-
.debug(true)
1367-
.build(),
1368-
storage: InMemoryStorage()
1369-
)
1342+
XCTAssertEqual(storedOption, "track")
13701343

1371-
// Set track assignment event to false
1372-
client.setTrackAssignmentEvent(false)
1344+
// Test that FetchOptions can still be created with flag keys
1345+
let fetchOptions = FetchOptions(["test-flag"])
1346+
XCTAssertEqual(fetchOptions.flagKeys, ["test-flag"])
13731347

1374-
let s = DispatchSemaphore(value: 0)
1375-
client.fetch(user: testUser) { (client, error) in
1376-
// The fetch should complete successfully
1377-
// The tracking option should be included in the request headers
1378-
XCTAssertNil(error)
1379-
s.signal()
1380-
}
1381-
s.wait()
1348+
// Verify that both the tracking option and flag keys can coexist
1349+
// (The tracking option is stored separately from FetchOptions)
1350+
XCTAssertNotNil(storedOption)
1351+
XCTAssertNotNil(fetchOptions.flagKeys)
13821352
}
13831353
}
13841354

0 commit comments

Comments
 (0)