Skip to content

Commit

Permalink
Return non-optional TrackerController instance from createTracker (c…
Browse files Browse the repository at this point in the history
…lose #847)

PR #848
  • Loading branch information
Kymer authored and matus-tomlein committed Jan 19, 2024
1 parent a332666 commit 981df5a
Show file tree
Hide file tree
Showing 12 changed files with 45 additions and 49 deletions.
2 changes: 1 addition & 1 deletion Examples
2 changes: 1 addition & 1 deletion Integrationtests/TestTrackEventsToMicro.swift
Expand Up @@ -25,7 +25,7 @@ class TestTrackEventsToMicro: XCTestCase {

tracker = Snowplow.createTracker(namespace: "testMicro-" + UUID().uuidString,
network: NetworkConfiguration(endpoint: Micro.endpoint),
configurations: [trackerConfig])!
configurations: [trackerConfig])

wait(for: [Micro.reset()], timeout: Micro.timeout)
}
Expand Down
12 changes: 4 additions & 8 deletions Sources/Snowplow/Snowplow.swift
Expand Up @@ -198,7 +198,7 @@ public class Snowplow: NSObject {
/// the tracker.
/// - Returns: The tracker instance created.
@objc
public class func createTracker(namespace: String, network networkConfiguration: NetworkConfiguration, configurations: [ConfigurationProtocol] = []) -> TrackerController? {
public class func createTracker(namespace: String, network networkConfiguration: NetworkConfiguration, configurations: [ConfigurationProtocol] = []) -> TrackerController {
if let serviceProvider = serviceProviderInstances[namespace] {
serviceProvider.reset(configurations: configurations + [networkConfiguration])
return serviceProvider.trackerController
Expand Down Expand Up @@ -234,7 +234,7 @@ public class Snowplow: NSObject {
/// collector.
/// - configurationBuilder: Swift DSL builder for your configuration objects (e.g, `EmitterConfiguration`, `TrackerConfiguration`)
/// - Returns: The tracker instance created.
public class func createTracker(namespace: String, network networkConfiguration: NetworkConfiguration, @ConfigurationBuilder _ configurationBuilder: () -> [ConfigurationProtocol]) -> TrackerController? {
public class func createTracker(namespace: String, network networkConfiguration: NetworkConfiguration, @ConfigurationBuilder _ configurationBuilder: () -> [ConfigurationProtocol]) -> TrackerController {
let configurations = configurationBuilder()
return createTracker(namespace: namespace,
network: networkConfiguration,
Expand Down Expand Up @@ -361,12 +361,8 @@ public class Snowplow: NSObject {
for bundle in bundles {
objc_sync_enter(self)
if let networkConfiguration = bundle.networkConfiguration {
if let _ = createTracker(
namespace: bundle.namespace,
network: networkConfiguration,
configurations: bundle.configurations) {
namespaces?.append(bundle.namespace)
}
_ = createTracker(namespace: bundle.namespace, network: networkConfiguration, configurations: bundle.configurations)
namespaces?.append(bundle.namespace)
} else {
// remove tracker if it exists
if let tracker = tracker(namespace: bundle.namespace) {
Expand Down
2 changes: 1 addition & 1 deletion Tests/Configurations/TestEmitterConfiguration.swift
Expand Up @@ -88,7 +88,7 @@ class TestEmitterConfiguration: XCTestCase {
let namespace = "testEmitter" + String(describing: Int.random(in: 0..<100))
return Snowplow.createTracker(namespace: namespace,
network: networkConfig,
configurations: [trackerConfig, emitterConfig])!
configurations: [trackerConfig, emitterConfig])
}

}
2 changes: 1 addition & 1 deletion Tests/Configurations/TestFocalMeterConfiguration.swift
Expand Up @@ -130,7 +130,7 @@ class TestFocalMeterConfiguration: XCTestCase {
configurations: [
trackerConfig,
focalMeterConfig ?? FocalMeterConfiguration(kantarEndpoint: endpoint)
])!
])
}

#endif
Expand Down
12 changes: 6 additions & 6 deletions Tests/Configurations/TestMultipleInstances.swift
Expand Up @@ -25,18 +25,18 @@ class TestMultipleInstances: XCTestCase {

func testSingleInstanceIsReconfigurable() {
let t1 = Snowplow.createTracker(namespace: "t1", network: NetworkConfiguration(endpoint: "snowplowanalytics.fake"))
XCTAssertEqual(t1?.network?.endpoint, "https://snowplowanalytics.fake/com.snowplowanalytics.snowplow/tp2")
XCTAssertEqual(t1.network?.endpoint, "https://snowplowanalytics.fake/com.snowplowanalytics.snowplow/tp2")
let t2 = Snowplow.createTracker(namespace: "t1", network: NetworkConfiguration(endpoint: "snowplowanalytics.fake2"))
XCTAssertEqual(t2?.network?.endpoint, "https://snowplowanalytics.fake2/com.snowplowanalytics.snowplow/tp2")
XCTAssertEqual(t2.network?.endpoint, "https://snowplowanalytics.fake2/com.snowplowanalytics.snowplow/tp2")
XCTAssertEqual(["t1"], Snowplow.instancedTrackerNamespaces)
XCTAssertTrue(t1 === t2)
}

func testMultipleInstances() {
let t1 = Snowplow.createTracker(namespace: "t1", network: NetworkConfiguration(endpoint: "snowplowanalytics.fake"))
XCTAssertEqual(t1?.network?.endpoint, "https://snowplowanalytics.fake/com.snowplowanalytics.snowplow/tp2")
XCTAssertEqual(t1.network?.endpoint, "https://snowplowanalytics.fake/com.snowplowanalytics.snowplow/tp2")
let t2 = Snowplow.createTracker(namespace: "t2", network: NetworkConfiguration(endpoint: "snowplowanalytics.fake2"))
XCTAssertEqual(t2?.network?.endpoint, "https://snowplowanalytics.fake2/com.snowplowanalytics.snowplow/tp2")
XCTAssertEqual(t2.network?.endpoint, "https://snowplowanalytics.fake2/com.snowplowanalytics.snowplow/tp2")
XCTAssertFalse(t1 === t2)
let expectedNamespaces = Set<String>(["t1", "t2"])
XCTAssertEqual(expectedNamespaces, Set<String>(Snowplow.instancedTrackerNamespaces))
Expand All @@ -46,15 +46,15 @@ class TestMultipleInstances: XCTestCase {
let t1 = Snowplow.createTracker(namespace: "t1", network: NetworkConfiguration(endpoint: "snowplowanalytics.fake"))
_ = Snowplow.createTracker(namespace: "t2", network: NetworkConfiguration(endpoint: "snowplowanalytics.fake2"))
let td = Snowplow.defaultTracker()
XCTAssertEqual(t1?.namespace, td?.namespace)
XCTAssertEqual(t1.namespace, td?.namespace)
}

func testUpdateDefaultTracker() {
_ = Snowplow.createTracker(namespace: "t1", network: NetworkConfiguration(endpoint: "snowplowanalytics.fake"))
let t2 = Snowplow.createTracker(namespace: "t2", network: NetworkConfiguration(endpoint: "snowplowanalytics.fake2"))
_ = Snowplow.setAsDefault(tracker: t2)
let td = Snowplow.defaultTracker()
XCTAssertEqual(t2?.namespace, td?.namespace)
XCTAssertEqual(t2.namespace, td?.namespace)
}

func testRemoveTracker() {
Expand Down
46 changes: 23 additions & 23 deletions Tests/Configurations/TestTrackerConfiguration.swift
Expand Up @@ -94,8 +94,8 @@ class TestTrackerConfiguration: XCTestCase {
let tracker = Snowplow.createTracker(namespace: "namespace", network: networkConfig, configurations: [trackerConfig])

XCTAssertNotNil(tracker)
XCTAssertNotNil(tracker?.emitter)
let url = URL(string: tracker?.network?.endpoint ?? "")
XCTAssertNotNil(tracker.emitter)
let url = URL(string: tracker.network?.endpoint ?? "")
XCTAssertNotNil(url)
let host = url?.host
let scheme = url?.scheme
Expand All @@ -106,8 +106,8 @@ class TestTrackerConfiguration: XCTestCase {
XCTAssertEqual(networkConfig.endpoint, derivedEndpoint)
XCTAssertEqual(`protocol`, scheme)

XCTAssertEqual(trackerConfig.appId, tracker?.appId)
XCTAssertEqual("namespace", tracker?.namespace)
XCTAssertEqual(trackerConfig.appId, tracker.appId)
XCTAssertEqual("namespace", tracker.namespace)
}

func testSessionInitialization() {
Expand All @@ -120,13 +120,13 @@ class TestTrackerConfiguration: XCTestCase {
backgroundTimeoutInSeconds: expectedBackground)
let tracker = Snowplow.createTracker(namespace: "namespace", network: networkConfig, configurations: [trackerConfig, sessionConfig])

let foreground = tracker?.session?.foregroundTimeoutInSeconds ?? 0
let background = tracker?.session?.backgroundTimeoutInSeconds ?? 0
let foreground = tracker.session?.foregroundTimeoutInSeconds ?? 0
let background = tracker.session?.backgroundTimeoutInSeconds ?? 0
XCTAssertEqual(expectedForeground, foreground)
XCTAssertEqual(expectedBackground, background)

let foregroundMeasure = (tracker?.session)?.foregroundTimeout
let backgroundMeasure = (tracker?.session)?.backgroundTimeout
let foregroundMeasure = (tracker.session)?.foregroundTimeout
let backgroundMeasure = (tracker.session)?.backgroundTimeout
XCTAssertEqual(Measurement(value: Double(expectedForeground), unit: UnitDuration.seconds), foregroundMeasure)
XCTAssertEqual(Measurement(value: Double(expectedBackground), unit: UnitDuration.seconds), backgroundMeasure)
}
Expand All @@ -136,11 +136,11 @@ class TestTrackerConfiguration: XCTestCase {
let trackerConfig = TrackerConfiguration(appId: "appid")
trackerConfig.sessionContext = true
var tracker = Snowplow.createTracker(namespace: "namespace", network: networkConfig, configurations: [trackerConfig])
XCTAssertNotNil(tracker?.session)
XCTAssertNotNil(tracker.session)

trackerConfig.sessionContext = false
tracker = Snowplow.createTracker(namespace: "namespace", network: networkConfig, configurations: [trackerConfig])
XCTAssertNil(tracker?.session)
XCTAssertNil(tracker.session)
}

func testSessionConfigurationCallback() {
Expand All @@ -157,7 +157,7 @@ class TestTrackerConfiguration: XCTestCase {
expectation.fulfill()
}

guard let tracker = Snowplow.createTracker(namespace: "namespace", network: networkConfig, configurations: [trackerConfig, sessionConfig]) else { return XCTFail() }
let tracker = Snowplow.createTracker(namespace: "namespace", network: networkConfig, configurations: [trackerConfig, sessionConfig])

_ = tracker.track(Timing(category: "cat", variable: "var", timing: 123))

Expand Down Expand Up @@ -185,10 +185,10 @@ class TestTrackerConfiguration: XCTestCase {

let tracker = Snowplow.createTracker(namespace: "namespace", network: networkConfig, configurations: [trackerConfig, sessionConfig])

_ = tracker?.track(Timing(category: "cat", variable: "var", timing: 123))
_ = tracker.track(Timing(category: "cat", variable: "var", timing: 123))
Thread.sleep(forTimeInterval: 0.1)
tracker?.session?.startNewSession()
_ = tracker?.track(Timing(category: "cat", variable: "var", timing: 123))
tracker.session?.startNewSession()
_ = tracker.track(Timing(category: "cat", variable: "var", timing: 123))
Thread.sleep(forTimeInterval: 0.1)

wait(for: [expectation], timeout: 10)
Expand All @@ -209,7 +209,7 @@ class TestTrackerConfiguration: XCTestCase {

// Track fake event
let event = Structured(category: "category", action: "action")
_ = trackerController?.track(event)
_ = trackerController.track(event)
for _ in 0..<1 {
Thread.sleep(forTimeInterval: 1)
}
Expand All @@ -234,7 +234,7 @@ class TestTrackerConfiguration: XCTestCase {
emitterConfiguration.threadPoolSize = 10
let gdprConfiguration = GDPRConfiguration(basis: .consent, documentId: "id", documentVersion: "ver", documentDescription: "desc")
let trackerController = Snowplow.createTracker(namespace: "namespace", network: networkConfiguration, configurations: [trackerConfiguration, gdprConfiguration, emitterConfiguration])
let gdprController = trackerController?.gdpr
let gdprController = trackerController.gdpr

// Check gdpr settings
XCTAssertEqual(.consent, gdprController?.basisForProcessing)
Expand All @@ -248,7 +248,7 @@ class TestTrackerConfiguration: XCTestCase {

// Check gdpr context added
var event = Structured(category: "category", action: "action")
_ = trackerController?.track(event)
_ = trackerController.track(event)
for _ in 0..<1 {
Thread.sleep(forTimeInterval: 1)
}
Expand All @@ -268,7 +268,7 @@ class TestTrackerConfiguration: XCTestCase {

// Check gdpr context not added
event = Structured(category: "category", action: "action")
_ = trackerController?.track(event)
_ = trackerController.track(event)
for _ in 0..<1 {
Thread.sleep(forTimeInterval: 1)
}
Expand All @@ -294,14 +294,14 @@ class TestTrackerConfiguration: XCTestCase {
emitterConfiguration.eventStore = eventStore
emitterConfiguration.threadPoolSize = 10
let trackerController = Snowplow.createTracker(namespace: "namespace", network: networkConfiguration, configurations: [trackerConfiguration, emitterConfiguration])
let gdprController = trackerController?.gdpr
let gdprController = trackerController.gdpr

// Check gdpr settings
XCTAssertFalse(gdprController?.isEnabled ?? false)

// Check gdpr context not added
var event = Structured(category: "category", action: "action")
_ = trackerController?.track(event)
_ = trackerController.track(event)
for _ in 0..<1 {
Thread.sleep(forTimeInterval: 1)
}
Expand All @@ -320,7 +320,7 @@ class TestTrackerConfiguration: XCTestCase {

// Check gdpr context added
event = Structured(category: "category", action: "action")
_ = trackerController?.track(event)
_ = trackerController.track(event)
for _ in 0..<1 {
Thread.sleep(forTimeInterval: 1)
}
Expand Down Expand Up @@ -349,7 +349,7 @@ class TestTrackerConfiguration: XCTestCase {

// Track an event and retrieve tracked context JSON from event store
let event = Structured(category: "category", action: "action")
_ = trackerController?.track(event)
_ = trackerController.track(event)
for _ in 0..<1 {
Thread.sleep(forTimeInterval: 1)
}
Expand Down Expand Up @@ -378,7 +378,7 @@ class TestTrackerConfiguration: XCTestCase {

// Track fake event
let event = Structured(category: "category", action: "action")
let eventId = trackerController?.track(event)
let eventId = trackerController.track(event)
for _ in 0..<1 {
Thread.sleep(forTimeInterval: 1)
}
Expand Down
2 changes: 1 addition & 1 deletion Tests/Ecommerce/TestEcommerceController.swift
Expand Up @@ -112,7 +112,7 @@ class TestEcommerceController: XCTestCase {

return Snowplow.createTracker(namespace: namespace,
network: networkConfig,
configurations: [trackerConfig, plugin])!
configurations: [trackerConfig, plugin])
}

private func waitForEventsToBeTracked() {
Expand Down
2 changes: 1 addition & 1 deletion Tests/Ecommerce/TestEcommerceEvents.swift
Expand Up @@ -318,7 +318,7 @@ class TestEcommerceEvents: XCTestCase {

return Snowplow.createTracker(namespace: namespace,
network: networkConfig,
configurations: [trackerConfig, plugin])!
configurations: [trackerConfig, plugin])
}

private func waitForEventsToBeTracked() {
Expand Down
2 changes: 1 addition & 1 deletion Tests/Media/TestMediaController.swift
Expand Up @@ -459,7 +459,7 @@ class TestMediaController: XCTestCase {

return Snowplow.createTracker(namespace: namespace,
network: networkConfig,
configurations: [trackerConfig, plugin])!
configurations: [trackerConfig, plugin])
}

private func waitForEventsToBeTracked() {
Expand Down
8 changes: 4 additions & 4 deletions Tests/TestEvents.swift
Expand Up @@ -44,7 +44,7 @@ class TestEvents: XCTestCase {
let trackerController = Snowplow.createTracker(namespace: "namespace", network: networkConfiguration, configurations: [trackerConfiguration, emitterConfiguration])

// Track event
_ = trackerController?.track(event)
_ = trackerController.track(event)
for _ in 0..<1 {
Thread.sleep(forTimeInterval: 1)
}
Expand Down Expand Up @@ -76,7 +76,7 @@ class TestEvents: XCTestCase {
let trackerController = Snowplow.createTracker(namespace: "namespace", network: networkConfiguration, configurations: [trackerConfiguration, emitterConfiguration])

// Track event
_ = trackerController?.track(event)
_ = trackerController.track(event)
for _ in 0..<1 {
Thread.sleep(forTimeInterval: 1)
}
Expand Down Expand Up @@ -112,8 +112,8 @@ class TestEvents: XCTestCase {
let trackerController = Snowplow.createTracker(namespace: "namespace", network: networkConfiguration, configurations: [trackerConfiguration, emitterConfiguration])

// Track event
_ = trackerController?.track(deepLink)
let screenViewId = trackerController?.track(screenView)
_ = trackerController.track(deepLink)
let screenViewId = trackerController.track(screenView)
for _ in 0..<2 {
Thread.sleep(forTimeInterval: 1)
}
Expand Down
2 changes: 1 addition & 1 deletion Tests/TestPlugins.swift
Expand Up @@ -205,7 +205,7 @@ class TestPlugins: XCTestCase {
let namespace = "testPlugins" + String(describing: Int.random(in: 0..<100))
return Snowplow.createTracker(namespace: namespace,
network: networkConfig,
configurations: configurations + [trackerConfig])!
configurations: configurations + [trackerConfig])
}

private func waitForEventsToBeTracked() {
Expand Down

0 comments on commit 981df5a

Please sign in to comment.