From dae44ccab70d80b927129c345824dff3130a45db Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 23 Oct 2025 16:44:14 +0200 Subject: [PATCH] Use parameter `wasLastSession` --- .../analytics/impl/DefaultAnalyticsService.kt | 4 +--- .../impl/DefaultAnalyticsServiceTest.kt | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt index 656373b3a6..f7f92e25ce 100644 --- a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt +++ b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt @@ -16,7 +16,6 @@ import im.vector.app.features.analytics.itf.VectorAnalyticsScreen import im.vector.app.features.analytics.plan.SuperProperties import im.vector.app.features.analytics.plan.UserProperties import io.element.android.libraries.di.annotations.AppCoroutineScope -import io.element.android.libraries.sessionstorage.api.SessionStore import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver import io.element.android.services.analytics.api.AnalyticsService @@ -39,7 +38,6 @@ class DefaultAnalyticsService( @AppCoroutineScope private val coroutineScope: CoroutineScope, private val sessionObserver: SessionObserver, - private val sessionStore: SessionStore, ) : AnalyticsService, SessionListener { // Cache for the store values private val userConsent = AtomicBoolean(false) @@ -77,7 +75,7 @@ class DefaultAnalyticsService( override suspend fun onSessionDeleted(userId: String, wasLastSession: Boolean) { // Delete the store when the last session is deleted - if (sessionStore.getAllSessions().isEmpty()) { + if (wasLastSession) { analyticsStore.reset() } } diff --git a/services/analytics/impl/src/test/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsServiceTest.kt b/services/analytics/impl/src/test/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsServiceTest.kt index 61950d122e..c2594feaa4 100644 --- a/services/analytics/impl/src/test/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsServiceTest.kt +++ b/services/analytics/impl/src/test/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsServiceTest.kt @@ -16,9 +16,7 @@ import im.vector.app.features.analytics.plan.MobileScreen import im.vector.app.features.analytics.plan.PollEnd import im.vector.app.features.analytics.plan.SuperProperties import im.vector.app.features.analytics.plan.UserProperties -import io.element.android.libraries.sessionstorage.api.SessionStore import io.element.android.libraries.sessionstorage.api.observer.SessionObserver -import io.element.android.libraries.sessionstorage.test.InMemorySessionStore import io.element.android.libraries.sessionstorage.test.observer.NoOpSessionObserver import io.element.android.services.analytics.impl.store.AnalyticsStore import io.element.android.services.analytics.impl.store.FakeAnalyticsStore @@ -178,10 +176,24 @@ class DefaultAnalyticsServiceTest { coroutineScope = backgroundScope, analyticsStore = store, ) - sut.onSessionDeleted("userId", false) + sut.onSessionDeleted("userId", true) resetLambda.assertions().isCalledOnce() } + @Test + fun `when a session is deleted, the store is not reset if it was not the last session`() = runTest { + val resetLambda = lambdaRecorder { } + val store = FakeAnalyticsStore( + resetLambda = resetLambda, + ) + val sut = createDefaultAnalyticsService( + coroutineScope = backgroundScope, + analyticsStore = store, + ) + sut.onSessionDeleted("userId", false) + resetLambda.assertions().isNeverCalled() + } + @Test fun `when a session is added, nothing happen`() = runTest { val sut = createDefaultAnalyticsService( @@ -260,13 +272,11 @@ class DefaultAnalyticsServiceTest { ), analyticsStore: AnalyticsStore = FakeAnalyticsStore(), sessionObserver: SessionObserver = NoOpSessionObserver(), - sessionStore: SessionStore = InMemorySessionStore(), ) = DefaultAnalyticsService( analyticsProviders = analyticsProviders, analyticsStore = analyticsStore, coroutineScope = coroutineScope, sessionObserver = sessionObserver, - sessionStore = sessionStore, ).also { // Wait for the service to be ready delay(1)