@@ -15,18 +15,19 @@ import io.element.android.features.ftue.impl.state.DefaultFtueService
1515import io.element.android.features.ftue.impl.state.FtueStep
1616import io.element.android.features.lockscreen.api.LockScreenService
1717import io.element.android.features.lockscreen.test.FakeLockScreenService
18+ import io.element.android.libraries.matrix.api.verification.SessionVerificationService
1819import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus
1920import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService
21+ import io.element.android.libraries.permissions.api.PermissionStateProvider
2022import io.element.android.libraries.permissions.impl.FakePermissionStateProvider
23+ import io.element.android.libraries.preferences.api.store.SessionPreferencesStore
2124import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore
2225import io.element.android.services.analytics.api.AnalyticsService
2326import io.element.android.services.analytics.test.FakeAnalyticsService
2427import io.element.android.services.toolbox.test.sdk.FakeBuildVersionSdkIntProvider
2528import io.element.android.tests.testutils.lambda.lambdaRecorder
2629import io.element.android.tests.testutils.lambda.value
27- import kotlinx.coroutines.CoroutineScope
28- import kotlinx.coroutines.SupervisorJob
29- import kotlinx.coroutines.cancel
30+ import kotlinx.coroutines.test.TestScope
3031import kotlinx.coroutines.test.runTest
3132import org.junit.Test
3233
@@ -36,8 +37,9 @@ class DefaultFtueServiceTest {
3637 val sessionVerificationService = FakeSessionVerificationService ().apply {
3738 givenVerifiedStatus(SessionVerifiedStatus .Unknown )
3839 }
39- val coroutineScope = CoroutineScope (coroutineContext + SupervisorJob ())
40- val service = createDefaultFtueService(coroutineScope, sessionVerificationService)
40+ val service = createDefaultFtueService(
41+ sessionVerificationService = sessionVerificationService,
42+ )
4143
4244 service.state.test {
4345 // Verification state is unknown, we don't display the flow yet
@@ -47,9 +49,6 @@ class DefaultFtueServiceTest {
4749 sessionVerificationService.givenVerifiedStatus(SessionVerifiedStatus .NotVerified )
4850 assertThat(awaitItem()).isEqualTo(FtueState .Incomplete )
4951 }
50-
51- // Cleanup
52- coroutineScope.cancel()
5352 }
5453
5554 @Test
@@ -58,10 +57,7 @@ class DefaultFtueServiceTest {
5857 val sessionVerificationService = FakeSessionVerificationService ()
5958 val permissionStateProvider = FakePermissionStateProvider (permissionGranted = true )
6059 val lockScreenService = FakeLockScreenService ()
61- val coroutineScope = CoroutineScope (coroutineContext + SupervisorJob ())
62-
6360 val service = createDefaultFtueService(
64- coroutineScope = coroutineScope,
6561 sessionVerificationService = sessionVerificationService,
6662 analyticsService = analyticsService,
6763 permissionStateProvider = permissionStateProvider,
@@ -75,9 +71,6 @@ class DefaultFtueServiceTest {
7571 service.updateState()
7672
7773 assertThat(service.state.value).isEqualTo(FtueState .Complete )
78-
79- // Cleanup
80- coroutineScope.cancel()
8174 }
8275
8376 @Test
@@ -88,10 +81,7 @@ class DefaultFtueServiceTest {
8881 val analyticsService = FakeAnalyticsService ()
8982 val permissionStateProvider = FakePermissionStateProvider (permissionGranted = false )
9083 val lockScreenService = FakeLockScreenService ()
91- val coroutineScope = CoroutineScope (coroutineContext + SupervisorJob ())
92-
9384 val service = createDefaultFtueService(
94- coroutineScope = coroutineScope,
9585 sessionVerificationService = sessionVerificationService,
9686 analyticsService = analyticsService,
9787 permissionStateProvider = permissionStateProvider,
@@ -126,20 +116,15 @@ class DefaultFtueServiceTest {
126116 // Final state
127117 null ,
128118 )
129-
130- // Cleanup
131- coroutineScope.cancel()
132119 }
133120
134121 @Test
135122 fun `if a check for a step is true, start from the next one` () = runTest {
136- val coroutineScope = CoroutineScope (coroutineContext + SupervisorJob ())
137123 val sessionVerificationService = FakeSessionVerificationService ()
138124 val analyticsService = FakeAnalyticsService ()
139125 val permissionStateProvider = FakePermissionStateProvider (permissionGranted = false )
140126 val lockScreenService = FakeLockScreenService ()
141127 val service = createDefaultFtueService(
142- coroutineScope = coroutineScope,
143128 sessionVerificationService = sessionVerificationService,
144129 analyticsService = analyticsService,
145130 permissionStateProvider = permissionStateProvider,
@@ -155,22 +140,17 @@ class DefaultFtueServiceTest {
155140
156141 analyticsService.setDidAskUserConsent()
157142 assertThat(service.getNextStep(null )).isNull()
158-
159- // Cleanup
160- coroutineScope.cancel()
161143 }
162144
163145 @Test
164146 fun `if version is older than 13 we don't display the notification opt in screen` () = runTest {
165- val coroutineScope = CoroutineScope (coroutineContext + SupervisorJob ())
166147 val sessionVerificationService = FakeSessionVerificationService ()
167148 val analyticsService = FakeAnalyticsService ()
168149 val lockScreenService = FakeLockScreenService ()
169150
170151 val service = createDefaultFtueService(
171152 sdkIntVersion = Build .VERSION_CODES .M ,
172153 sessionVerificationService = sessionVerificationService,
173- coroutineScope = coroutineScope,
174154 analyticsService = analyticsService,
175155 lockScreenService = lockScreenService,
176156 )
@@ -182,14 +162,10 @@ class DefaultFtueServiceTest {
182162
183163 analyticsService.setDidAskUserConsent()
184164 assertThat(service.getNextStep(null )).isNull()
185-
186- // Cleanup
187- coroutineScope.cancel()
188165 }
189166
190167 @Test
191168 fun `reset do the expected actions S` () = runTest {
192- val coroutineScope = CoroutineScope (coroutineContext + SupervisorJob ())
193169 val resetAnalyticsLambda = lambdaRecorder<Unit > { }
194170 val analyticsService = FakeAnalyticsService (
195171 resetLambda = resetAnalyticsLambda
@@ -199,7 +175,6 @@ class DefaultFtueServiceTest {
199175 resetPermissionLambda = resetPermissionLambda
200176 )
201177 val service = createDefaultFtueService(
202- coroutineScope = coroutineScope,
203178 sdkIntVersion = Build .VERSION_CODES .S ,
204179 permissionStateProvider = permissionStateProvider,
205180 analyticsService = analyticsService,
@@ -211,7 +186,6 @@ class DefaultFtueServiceTest {
211186
212187 @Test
213188 fun `reset do the expected actions TIRAMISU` () = runTest {
214- val coroutineScope = CoroutineScope (coroutineContext + SupervisorJob ())
215189 val resetLambda = lambdaRecorder<Unit > { }
216190 val analyticsService = FakeAnalyticsService (
217191 resetLambda = resetLambda
@@ -221,7 +195,6 @@ class DefaultFtueServiceTest {
221195 resetPermissionLambda = resetPermissionLambda
222196 )
223197 val service = createDefaultFtueService(
224- coroutineScope = coroutineScope,
225198 sdkIntVersion = Build .VERSION_CODES .TIRAMISU ,
226199 permissionStateProvider = permissionStateProvider,
227200 analyticsService = analyticsService,
@@ -232,17 +205,16 @@ class DefaultFtueServiceTest {
232205 .with (value(" android.permission.POST_NOTIFICATIONS" ))
233206 }
234207
235- private fun createDefaultFtueService (
236- coroutineScope : CoroutineScope ,
237- sessionVerificationService : FakeSessionVerificationService = FakeSessionVerificationService (),
208+ private fun TestScope.createDefaultFtueService (
209+ sessionVerificationService : SessionVerificationService = FakeSessionVerificationService (),
238210 analyticsService : AnalyticsService = FakeAnalyticsService (),
239- permissionStateProvider : FakePermissionStateProvider = FakePermissionStateProvider (permissionGranted = false),
211+ permissionStateProvider : PermissionStateProvider = FakePermissionStateProvider (permissionGranted = false),
240212 lockScreenService : LockScreenService = FakeLockScreenService (),
241- sessionPreferencesStore : InMemorySessionPreferencesStore = InMemorySessionPreferencesStore (),
213+ sessionPreferencesStore : SessionPreferencesStore = InMemorySessionPreferencesStore (),
242214 // First version where notification permission is required
243215 sdkIntVersion : Int = Build .VERSION_CODES .TIRAMISU ,
244216 ) = DefaultFtueService (
245- sessionCoroutineScope = coroutineScope ,
217+ sessionCoroutineScope = backgroundScope ,
246218 sessionVerificationService = sessionVerificationService,
247219 sdkVersionProvider = FakeBuildVersionSdkIntProvider (sdkIntVersion),
248220 analyticsService = analyticsService,
0 commit comments