Skip to content

Commit 1feaf9f

Browse files
committed
fix: move mls jobs to start from te UI [WPB-17367] (#4003)
(cherry picked from commit 16a5c72)
1 parent c0a4013 commit 1feaf9f

File tree

4 files changed

+90
-6
lines changed

4 files changed

+90
-6
lines changed

app/src/main/kotlin/com/wire/android/di/CoreLogicModule.kt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,16 @@ import com.wire.kalium.logic.data.user.UserId
3232
import com.wire.kalium.logic.feature.analytics.GetCurrentAnalyticsTrackingIdentifierUseCase
3333
import com.wire.kalium.logic.feature.auth.AddAuthenticatedUserUseCase
3434
import com.wire.kalium.logic.feature.auth.LogoutUseCase
35+
import com.wire.kalium.logic.feature.auth.sso.ValidateSSOCodeUseCase
36+
import com.wire.kalium.logic.feature.client.MLSClientManager
3537
import com.wire.kalium.logic.feature.connection.BlockUserUseCase
3638
import com.wire.kalium.logic.feature.connection.UnblockUserUseCase
3739
import com.wire.kalium.logic.feature.conversation.ObserveOtherUserSecurityClassificationLabelUseCase
3840
import com.wire.kalium.logic.feature.conversation.ObserveSecurityClassificationLabelUseCase
41+
import com.wire.kalium.logic.feature.conversation.keyingmaterials.KeyingMaterialsManager
3942
import com.wire.kalium.logic.feature.e2ei.usecase.FetchConversationMLSVerificationStatusUseCase
4043
import com.wire.kalium.logic.feature.featureConfig.ObserveIsAppLockEditableUseCase
44+
import com.wire.kalium.logic.feature.mlsmigration.MLSMigrationManager
4145
import com.wire.kalium.logic.feature.selfDeletingMessages.ObserveSelfDeletionTimerSettingsForConversationUseCase
4246
import com.wire.kalium.logic.feature.selfDeletingMessages.ObserveTeamSettingsSelfDeletingStatusUseCase
4347
import com.wire.kalium.logic.feature.selfDeletingMessages.PersistNewSelfDeletionTimerUseCase
@@ -193,6 +197,34 @@ class UseCaseModule {
193197
fun provideValidateEmailUseCase(@KaliumCoreLogic coreLogic: CoreLogic) =
194198
coreLogic.getGlobalScope().validateEmailUseCase
195199

200+
@Provides
201+
fun provideValidateSSOCodeUseCase(@KaliumCoreLogic coreLogic: CoreLogic): ValidateSSOCodeUseCase =
202+
coreLogic.getGlobalScope().validateSSOCodeUseCase
203+
204+
@ViewModelScoped
205+
@Provides
206+
fun provideMLSMigrationManager(
207+
@KaliumCoreLogic coreLogic: CoreLogic,
208+
@CurrentAccount currentAccount: UserId
209+
): MLSMigrationManager =
210+
coreLogic.getSessionScope(currentAccount).mlsMigrationManager
211+
212+
@ViewModelScoped
213+
@Provides
214+
fun provideMLSClientManager(
215+
@KaliumCoreLogic coreLogic: CoreLogic,
216+
@CurrentAccount currentAccount: UserId
217+
): MLSClientManager =
218+
coreLogic.getSessionScope(currentAccount).mlsClientManager
219+
220+
@ViewModelScoped
221+
@Provides
222+
fun provideKeyingMaterialsManager(
223+
@KaliumCoreLogic coreLogic: CoreLogic,
224+
@CurrentAccount currentAccount: UserId
225+
): KeyingMaterialsManager =
226+
coreLogic.getSessionScope(currentAccount).keyingMaterialsManager
227+
196228
@ViewModelScoped
197229
@Provides
198230
fun provideValidatePasswordUseCase(@KaliumCoreLogic coreLogic: CoreLogic) =

app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@ package com.wire.android.ui.home
2020
import androidx.lifecycle.ViewModel
2121
import androidx.lifecycle.viewModelScope
2222
import com.wire.android.appLogger
23+
import com.wire.kalium.logic.feature.client.MLSClientManager
24+
import com.wire.kalium.logic.feature.conversation.keyingmaterials.KeyingMaterialsManager
2325
import com.wire.kalium.logic.feature.e2ei.SyncCertificateRevocationListUseCase
2426
import com.wire.kalium.logic.feature.e2ei.usecase.ObserveCertificateRevocationForSelfClientUseCase
2527
import com.wire.kalium.logic.feature.featureConfig.FeatureFlagsSyncWorker
28+
import com.wire.kalium.logic.feature.mlsmigration.MLSMigrationManager
2629
import com.wire.kalium.logic.feature.server.UpdateApiVersionsUseCase
2730
import dagger.hilt.android.lifecycle.HiltViewModel
2831
import kotlinx.coroutines.Job
@@ -39,8 +42,11 @@ class AppSyncViewModel @Inject constructor(
3942
private val syncCertificateRevocationListUseCase: SyncCertificateRevocationListUseCase,
4043
private val observeCertificateRevocationForSelfClient: ObserveCertificateRevocationForSelfClientUseCase,
4144
private val featureFlagsSyncWorker: FeatureFlagsSyncWorker,
42-
private val updateApiVersions: UpdateApiVersionsUseCase
43-
) : ViewModel() {
45+
private val updateApiVersions: UpdateApiVersionsUseCase,
46+
private val mLSMigrationManager: MLSMigrationManager,
47+
private val keyingMaterialsManager: KeyingMaterialsManager,
48+
private val mLSClientManager: MLSClientManager,
49+
) : ViewModel() {
4450

4551
private val minIntervalBetweenPulls: Duration = MIN_INTERVAL_BETWEEN_PULLS
4652

@@ -77,6 +83,9 @@ class AppSyncViewModel @Inject constructor(
7783
viewModelScope.launch { featureFlagsSyncWorker.execute() },
7884
viewModelScope.launch { observeCertificateRevocationForSelfClient.invoke() },
7985
viewModelScope.launch { updateApiVersions() },
86+
viewModelScope.launch { mLSClientManager() },
87+
viewModelScope.launch { mLSMigrationManager() },
88+
viewModelScope.launch { keyingMaterialsManager() },
8089
).joinAll()
8190
} catch (e: Exception) {
8291
appLogger.e("Error while syncing app config", e)

app/src/test/kotlin/com/wire/android/ui/home/AppSyncViewModelTest.kt

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,17 @@
1818
package com.wire.android.ui.home
1919

2020
import com.wire.android.config.CoroutineTestExtension
21+
import com.wire.kalium.logic.feature.client.MLSClientManager
22+
import com.wire.kalium.logic.feature.conversation.keyingmaterials.KeyingMaterialsManager
2123
import com.wire.kalium.logic.feature.e2ei.SyncCertificateRevocationListUseCase
2224
import com.wire.kalium.logic.feature.e2ei.usecase.ObserveCertificateRevocationForSelfClientUseCase
2325
import com.wire.kalium.logic.feature.featureConfig.FeatureFlagsSyncWorker
26+
import com.wire.kalium.logic.feature.mlsmigration.MLSMigrationManager
2427
import com.wire.kalium.logic.feature.server.UpdateApiVersionsUseCase
2528
import io.mockk.MockKAnnotations
2629
import io.mockk.coEvery
2730
import io.mockk.coVerify
2831
import io.mockk.impl.annotations.MockK
29-
import kotlinx.coroutines.InternalCoroutinesApi
3032
import kotlinx.coroutines.delay
3133
import kotlinx.coroutines.test.advanceUntilIdle
3234
import kotlinx.coroutines.test.runTest
@@ -42,6 +44,9 @@ class AppSyncViewModelTest {
4244
withFeatureFlagsSyncWorker()
4345
withSyncCertificateRevocationListUseCase()
4446
withUpdateApiVersions()
47+
withMlsClientManager()
48+
withMlsMigrationManager()
49+
withKeyingMaterialsManager()
4550
}
4651

4752
viewModel.startSyncingAppConfig()
@@ -51,6 +56,9 @@ class AppSyncViewModelTest {
5156
coVerify { arrangement.syncCertificateRevocationListUseCase.invoke() }
5257
coVerify { arrangement.featureFlagsSyncWorker.execute() }
5358
coVerify { arrangement.updateApiVersions() }
59+
coVerify { arrangement.mlsClientManager() }
60+
coVerify { arrangement.mlsMigrationManager() }
61+
coVerify { arrangement.keyingMaterialsManager() }
5462
}
5563

5664
@Test
@@ -60,6 +68,9 @@ class AppSyncViewModelTest {
6068
withFeatureFlagsSyncWorker(1000)
6169
withSyncCertificateRevocationListUseCase(1000)
6270
withUpdateApiVersions(1000)
71+
withMlsClientManager(1000)
72+
withMlsMigrationManager(1000)
73+
withKeyingMaterialsManager(1000)
6374
}
6475

6576
viewModel.startSyncingAppConfig()
@@ -71,6 +82,9 @@ class AppSyncViewModelTest {
7182
coVerify(exactly = 1) { arrangement.syncCertificateRevocationListUseCase.invoke() }
7283
coVerify(exactly = 1) { arrangement.featureFlagsSyncWorker.execute() }
7384
coVerify(exactly = 1) { arrangement.updateApiVersions() }
85+
coVerify(exactly = 1) { arrangement.mlsClientManager() }
86+
coVerify(exactly = 1) { arrangement.mlsMigrationManager() }
87+
coVerify(exactly = 1) { arrangement.keyingMaterialsManager() }
7488
}
7589

7690
private class Arrangement {
@@ -87,6 +101,15 @@ class AppSyncViewModelTest {
87101
@MockK
88102
lateinit var updateApiVersions: UpdateApiVersionsUseCase
89103

104+
@MockK
105+
lateinit var mlsClientManager: MLSClientManager
106+
107+
@MockK
108+
lateinit var mlsMigrationManager: MLSMigrationManager
109+
110+
@MockK
111+
lateinit var keyingMaterialsManager: KeyingMaterialsManager
112+
90113
init {
91114
MockKAnnotations.init(this)
92115
}
@@ -95,10 +118,12 @@ class AppSyncViewModelTest {
95118
syncCertificateRevocationListUseCase,
96119
observeCertificateRevocationForSelfClient,
97120
featureFlagsSyncWorker,
98-
updateApiVersions
121+
updateApiVersions,
122+
mLSClientManager = mlsClientManager,
123+
mLSMigrationManager = mlsMigrationManager,
124+
keyingMaterialsManager = keyingMaterialsManager
99125
)
100126

101-
@OptIn(InternalCoroutinesApi::class)
102127
fun withObserveCertificateRevocationForSelfClient(delayMs: Long = 0) {
103128
coEvery { observeCertificateRevocationForSelfClient.invoke() } coAnswers {
104129
delay(delayMs)
@@ -123,6 +148,24 @@ class AppSyncViewModelTest {
123148
}
124149
}
125150

151+
fun withMlsClientManager(delayMs: Long = 0) {
152+
coEvery { mlsClientManager() } coAnswers {
153+
delay(delayMs)
154+
}
155+
}
156+
157+
fun withMlsMigrationManager(delayMs: Long = 0) {
158+
coEvery { mlsMigrationManager() } coAnswers {
159+
delay(delayMs)
160+
}
161+
}
162+
163+
fun withKeyingMaterialsManager(delayMs: Long = 0) {
164+
coEvery { keyingMaterialsManager() } coAnswers {
165+
delay(delayMs)
166+
}
167+
}
168+
126169
fun arrange(block: Arrangement.() -> Unit) = apply(block).let {
127170
this to viewModel
128171
}

0 commit comments

Comments
 (0)