Skip to content

Commit

Permalink
Expose AnalyticsClient to all modules (#1210)
Browse files Browse the repository at this point in the history
  • Loading branch information
tdchow authored Nov 15, 2024
1 parent 8add877 commit 0eda811
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 32 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.braintreepayments.api.core

import android.content.Context
import androidx.annotation.RestrictTo
import androidx.work.Data
import androidx.work.ExistingWorkPolicy
import androidx.work.ListenableWorker
Expand All @@ -13,8 +14,9 @@ import org.json.JSONObject
import java.util.*
import java.util.concurrent.TimeUnit

@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@Suppress("SwallowedException", "TooGenericExceptionCaught")
internal class AnalyticsClient(
class AnalyticsClient internal constructor(
private val httpClient: BraintreeHttpClient = BraintreeHttpClient(),
private val analyticsDatabase: AnalyticsDatabase = AnalyticsDatabaseProvider().analyticsDatabase,
private val workManager: WorkManager = WorkManagerProvider().workManager,
Expand All @@ -27,10 +29,25 @@ internal class AnalyticsClient(
private val applicationContext: Context
get() = merchantRepository.applicationContext

fun sendEvent(event: AnalyticsEvent) {
fun sendEvent(
eventName: String,
analyticsEventParams: AnalyticsEventParams = AnalyticsEventParams()
) {
val analyticsEvent = AnalyticsEvent(
name = eventName,
timestamp = time.currentTime,
payPalContextId = analyticsEventParams.payPalContextId,
linkType = analyticsEventParams.linkType,
isVaultRequest = analyticsEventParams.isVaultRequest,
startTime = analyticsEventParams.startTime,
endTime = analyticsEventParams.endTime,
endpoint = analyticsEventParams.endpoint,
experiment = analyticsEventParams.experiment,
paymentMethodsDisplayed = analyticsEventParams.paymentMethodsDisplayed
)
configurationLoader.loadConfiguration { result ->
if (result is ConfigurationLoaderResult.Success) {
scheduleAnalyticsWriteInBackground(event, merchantRepository.authorization)
scheduleAnalyticsWriteInBackground(analyticsEvent, merchantRepository.authorization)
scheduleAnalyticsUploadInBackground(
configuration = result.configuration,
authorization = merchantRepository.authorization,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,19 +101,7 @@ class BraintreeClient internal constructor(
eventName: String,
params: AnalyticsEventParams = AnalyticsEventParams()
) {
val event = AnalyticsEvent(
name = eventName,
timestamp = time.currentTime,
payPalContextId = params.payPalContextId,
linkType = params.linkType,
isVaultRequest = params.isVaultRequest,
startTime = params.startTime,
endTime = params.endTime,
endpoint = params.endpoint,
experiment = params.experiment,
paymentMethodsDisplayed = params.paymentMethodsDisplayed
)
analyticsClient.sendEvent(event)
analyticsClient.sendEvent(eventName, params)
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,8 @@ internal class ConfigurationLoader(
callback.onResult(ConfigurationLoaderResult.Success(configuration, timing))

analyticsClient.sendEvent(
AnalyticsEvent(
name = CoreAnalytics.API_REQUEST_LATENCY,
timestamp = time.currentTime,
eventName = CoreAnalytics.API_REQUEST_LATENCY,
analyticsEventParams = AnalyticsEventParams(
startTime = timing?.startTime,
endTime = timing?.endTime,
endpoint = "/v1/configuration"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,7 @@ class AnalyticsClientUnitTest {
)
} returns mockk()

val event = AnalyticsEvent(eventName, timestamp = 123)

sut.sendEvent(event)
sut.sendEvent(eventName)

val workSpec = workRequestSlot.captured.workSpec
assertEquals(AnalyticsWriteToDbWorker::class.java.name, workSpec.workerClassName)
Expand Down Expand Up @@ -142,7 +140,14 @@ class AnalyticsClientUnitTest {
timestamp = 456
)

sut.sendEvent(event)
sut.sendEvent(
eventName = eventName,
analyticsEventParams = AnalyticsEventParams(
payPalContextId = "fake-paypal-context-id",
linkType = "fake-link-type",
isVaultRequest = true,
)
)

val workSpec = workRequestSlot.captured.workSpec
assertEquals(30000, workSpec.initialDelay)
Expand Down Expand Up @@ -528,8 +533,7 @@ class AnalyticsClientUnitTest {
deviceInspector.getDeviceMetadata(context, configuration, sessionId, integration)
} returns metadata

val event = AnalyticsEvent(eventName, timestamp)
sut.sendEvent(event)
sut.sendEvent(eventName)

sut.reportCrash(context, configuration, integration, null)

Expand All @@ -539,7 +543,7 @@ class AnalyticsClientUnitTest {

@Test
fun `sendEvent enqueues work to upload analytic events with sessionId in the name`() {
sut.sendEvent(AnalyticsEvent("event-name", timestamp))
sut.sendEvent("event-name")

verify {
workManager.enqueueUniqueWork(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -326,9 +326,7 @@ class BraintreeClientUnitTest {
sut.sendAnalyticsEvent("event.started")

verify {
analyticsClient.sendEvent(
match { it.name == "event.started" && it.timestamp == 123L },
)
analyticsClient.sendEvent("event.started")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,9 +234,8 @@ class ConfigurationLoaderUnitTest {

verify {
analyticsClient.sendEvent(
AnalyticsEvent(
name = CoreAnalytics.API_REQUEST_LATENCY,
timestamp = 123,
eventName = CoreAnalytics.API_REQUEST_LATENCY,
analyticsEventParams = AnalyticsEventParams(
startTime = 0,
endTime = 10,
endpoint = "/v1/configuration"
Expand Down

0 comments on commit 0eda811

Please sign in to comment.