Inject SentryDsn the same way we do with SentrySdkDsn so we can fake it for tests

This commit is contained in:
Jorge Martín
2025-12-17 10:16:17 +01:00
committed by Jorge Martin Espinosa
parent de694cecdb
commit b5d6843725
7 changed files with 26 additions and 6 deletions

View File

@@ -11,7 +11,7 @@ import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.BindingContainer
import dev.zacsweers.metro.ContributesTo
import dev.zacsweers.metro.Provides
import io.element.android.libraries.di.annotations.SentrySdkDsn
import io.element.android.libraries.di.identifiers.SentrySdkDsn
@BindingContainer
@ContributesTo(AppScope::class)

View File

@@ -21,6 +21,7 @@ import io.element.android.libraries.core.data.ByteUnit
import io.element.android.libraries.core.meta.BuildMeta
import io.element.android.libraries.core.meta.BuildType
import io.element.android.libraries.di.annotations.ApplicationContext
import io.element.android.libraries.di.identifiers.SentryDsn
import io.element.android.libraries.matrix.api.analytics.GetDatabaseSizesUseCase
import io.element.android.services.analyticsproviders.api.AnalyticsProvider
import io.element.android.services.analyticsproviders.api.AnalyticsTransaction
@@ -40,6 +41,7 @@ import timber.log.Timber
@Inject
class SentryAnalyticsProvider(
@ApplicationContext private val context: Context,
private val sentryDsn: SentryDsn?,
private val buildMeta: BuildMeta,
private val getDatabaseSizesUseCase: GetDatabaseSizesUseCase,
private val appNavigationStateService: AppNavigationStateService,
@@ -50,7 +52,7 @@ class SentryAnalyticsProvider(
Timber.tag(analyticsTag.value).d("Initializing Sentry")
if (Sentry.isEnabled()) return
val dsn = SentryConfig.DSN.ifBlank {
val dsn = sentryDsn?.value ?: run {
Timber.w("No Sentry DSN provided, Sentry will not be initialized")
return
}

View File

@@ -11,12 +11,16 @@ import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.BindingContainer
import dev.zacsweers.metro.ContributesTo
import dev.zacsweers.metro.Provides
import io.element.android.libraries.di.annotations.SentrySdkDsn
import io.element.android.libraries.di.identifiers.SentryDsn
import io.element.android.libraries.di.identifiers.SentrySdkDsn
import io.element.android.services.analyticsproviders.sentry.SentryConfig
@BindingContainer
@ContributesTo(AppScope::class)
object SentryModule {
@Provides
fun provideSentrySdkDsn(): SentrySdkDsn? = SentrySdkDsn(SentryConfig.SDK_DSN)
fun provideSentryDsn(): SentryDsn? = SentryConfig.DSN.takeIf { it.isNotBlank() }?.let(::SentryDsn)
@Provides
fun provideSentrySdkDsn(): SentrySdkDsn? = SentryConfig.SDK_DSN.takeIf { it.isNotBlank() }?.let(::SentrySdkDsn)
}

View File

@@ -16,6 +16,7 @@ import im.vector.app.features.analytics.plan.SuperProperties
import im.vector.app.features.analytics.plan.UserProperties
import io.element.android.libraries.core.data.megaBytes
import io.element.android.libraries.core.meta.BuildMeta
import io.element.android.libraries.di.identifiers.SentryDsn
import io.element.android.libraries.matrix.api.analytics.GetDatabaseSizesUseCase
import io.element.android.libraries.matrix.api.analytics.SdkStoreSizes
import io.element.android.libraries.matrix.test.A_SESSION_ID
@@ -161,11 +162,13 @@ class SentryAnalyticsProviderTest {
}
private fun createSentryAnalyticsProvider(
sentryDsn: SentryDsn? = SentryDsn("https://1234@sentry.com/a"),
buildMeta: BuildMeta = aBuildMeta(),
getDatabaseSizesUseCase: GetDatabaseSizesUseCase = GetDatabaseSizesUseCase { Result.success(SdkStoreSizes(null, null, null, null)) },
appNavigationStateService: FakeAppNavigationStateService = FakeAppNavigationStateService(),
) = SentryAnalyticsProvider(
context = InstrumentationRegistry.getInstrumentation().targetContext,
sentryDsn = sentryDsn,
buildMeta = buildMeta,
getDatabaseSizesUseCase = getDatabaseSizesUseCase,
appNavigationStateService = appNavigationStateService,