Browse Source

Merge pull request #3535 from element-hq/feature/bma/alwaysMigrateApp

Perform the migration, even if the current version is not known.
pull/3538/head
ganfra 3 weeks ago committed by GitHub
parent
commit
14dc0da2b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 5
      features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt
  2. 12
      features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt

5
features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt

@ -45,10 +45,7 @@ class MigrationPresenter @Inject constructor( @@ -45,10 +45,7 @@ class MigrationPresenter @Inject constructor(
LaunchedEffect(migrationStoreVersion) {
val migrationValue = migrationStoreVersion ?: return@LaunchedEffect
if (migrationValue == -1) {
// Fresh install, no migration needed
Timber.d("Fresh install, no migration needed.")
migrationStore.setApplicationMigrationVersion(lastMigration)
return@LaunchedEffect
Timber.d("Fresh install, or previous installed application did not have the migration mechanism.")
}
if (migrationValue == lastMigration) {
Timber.d("Current app migration version: $migrationValue. No migration needed.")

12
features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt

@ -27,12 +27,9 @@ class MigrationPresenterTest { @@ -27,12 +27,9 @@ class MigrationPresenterTest {
val warmUpRule = WarmUpRule()
@Test
fun `present - no migration should occurs on fresh installation, and last version should be stored`() = runTest {
fun `present - run all migrations on fresh installation, and last version should be stored`() = runTest {
val migrations = (1..10).map { order ->
FakeAppMigration(
order = order,
migrateLambda = LambdaNoParamRecorder(ensureNeverCalled = true) { },
)
FakeAppMigration(order = order)
}
val store = InMemoryMigrationStore(initialApplicationMigrationVersion = -1)
val presenter = createPresenter(
@ -44,12 +41,15 @@ class MigrationPresenterTest { @@ -44,12 +41,15 @@ class MigrationPresenterTest {
}.test {
val initialState = awaitItem()
assertThat(initialState.migrationAction).isEqualTo(AsyncData.Uninitialized)
skipItems(1)
skipItems(migrations.size)
awaitItem().also { state ->
assertThat(state.migrationAction).isEqualTo(AsyncData.Success(Unit))
}
assertThat(store.applicationMigrationVersion().first()).isEqualTo(migrations.maxOf { it.order })
}
for (migration in migrations) {
migration.migrateLambda.assertions().isCalledOnce()
}
}
@Test

Loading…
Cancel
Save