From b68b08300a09cd7f035b11506590c43c092d7734 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 17 Jun 2024 15:04:20 +0200 Subject: [PATCH] Add test on DefaultFtueService.reset(). --- .../ftue/impl/DefaultFtueServiceTest.kt | 47 +++++++++++++++++++ .../impl/FakePermissionStateProvider.kt | 2 + .../analytics/test/FakeAnalyticsService.kt | 4 +- 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTest.kt b/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTest.kt index 8e49eda151..ac2d0724f1 100644 --- a/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTest.kt +++ b/features/ftue/impl/src/test/kotlin/io/element/android/features/ftue/impl/DefaultFtueServiceTest.kt @@ -31,6 +31,8 @@ import io.element.android.libraries.preferences.test.InMemorySessionPreferencesS import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.services.toolbox.test.sdk.FakeBuildVersionSdkIntProvider +import io.element.android.tests.testutils.lambda.lambdaRecorder +import io.element.android.tests.testutils.lambda.value import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel @@ -194,6 +196,51 @@ class DefaultFtueServiceTest { coroutineScope.cancel() } + @Test + fun `reset do the expected actions S`() = runTest { + val coroutineScope = CoroutineScope(coroutineContext + SupervisorJob()) + val resetAnalyticsLambda = lambdaRecorder { } + val analyticsService = FakeAnalyticsService( + resetLambda = resetAnalyticsLambda + ) + val resetPermissionLambda = lambdaRecorder { } + val permissionStateProvider = FakePermissionStateProvider( + resetPermissionLambda = resetPermissionLambda + ) + val service = createDefaultFtueService( + coroutineScope = coroutineScope, + sdkIntVersion = Build.VERSION_CODES.S, + permissionStateProvider = permissionStateProvider, + analyticsService = analyticsService, + ) + service.reset() + resetAnalyticsLambda.assertions().isCalledOnce() + resetPermissionLambda.assertions().isNeverCalled() + } + + @Test + fun `reset do the expected actions TIRAMISU`() = runTest { + val coroutineScope = CoroutineScope(coroutineContext + SupervisorJob()) + val resetLambda = lambdaRecorder { } + val analyticsService = FakeAnalyticsService( + resetLambda = resetLambda + ) + val resetPermissionLambda = lambdaRecorder { } + val permissionStateProvider = FakePermissionStateProvider( + resetPermissionLambda = resetPermissionLambda + ) + val service = createDefaultFtueService( + coroutineScope = coroutineScope, + sdkIntVersion = Build.VERSION_CODES.TIRAMISU, + permissionStateProvider = permissionStateProvider, + analyticsService = analyticsService, + ) + service.reset() + resetLambda.assertions().isCalledOnce() + resetPermissionLambda.assertions().isCalledOnce() + .with(value("android.permission.POST_NOTIFICATIONS")) + } + private fun createDefaultFtueService( coroutineScope: CoroutineScope, sessionVerificationService: FakeSessionVerificationService = FakeSessionVerificationService(), diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/FakePermissionStateProvider.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/FakePermissionStateProvider.kt index 9d7d4d4e65..245cb564f5 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/FakePermissionStateProvider.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/FakePermissionStateProvider.kt @@ -24,6 +24,7 @@ class FakePermissionStateProvider( private var permissionGranted: Boolean = true, permissionDenied: Boolean = false, permissionAsked: Boolean = false, + private val resetPermissionLambda: (String) -> Unit = {}, ) : PermissionStateProvider { private val permissionDeniedFlow = MutableStateFlow(permissionDenied) private val permissionAskedFlow = MutableStateFlow(permissionAsked) @@ -49,5 +50,6 @@ class FakePermissionStateProvider( override suspend fun resetPermission(permission: String) { setPermissionAsked(permission, false) setPermissionDenied(permission, false) + resetPermissionLambda(permission) } } diff --git a/services/analytics/test/src/main/kotlin/io/element/android/services/analytics/test/FakeAnalyticsService.kt b/services/analytics/test/src/main/kotlin/io/element/android/services/analytics/test/FakeAnalyticsService.kt index 0be41517ed..63186609d9 100644 --- a/services/analytics/test/src/main/kotlin/io/element/android/services/analytics/test/FakeAnalyticsService.kt +++ b/services/analytics/test/src/main/kotlin/io/element/android/services/analytics/test/FakeAnalyticsService.kt @@ -27,7 +27,8 @@ import kotlinx.coroutines.flow.MutableStateFlow class FakeAnalyticsService( isEnabled: Boolean = false, - didAskUserConsent: Boolean = false + didAskUserConsent: Boolean = false, + private val resetLambda: () -> Unit = {}, ) : AnalyticsService { private val isEnabledFlow = MutableStateFlow(isEnabled) private val didAskUserConsentFlow = MutableStateFlow(didAskUserConsent) @@ -77,5 +78,6 @@ class FakeAnalyticsService( override suspend fun reset() { didAskUserConsentFlow.value = false + resetLambda() } }