From c8638f6fd4b4325e4f5aa0f9639820d04ab1ed4a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 25 Sep 2024 11:54:31 +0200 Subject: [PATCH 1/3] Perform the migration, even if the current version is not known. --- .../android/features/migration/impl/MigrationPresenter.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt index 21d18f1e6c..b3fd21d8e6 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt @@ -46,9 +46,7 @@ class MigrationPresenter @Inject constructor( 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.") From 0246fec77d66f5f24c08ad758c7f089b52d4b1da Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 25 Sep 2024 11:58:04 +0200 Subject: [PATCH 2/3] Remove useless and obsolete comment. --- .../android/features/migration/impl/MigrationPresenter.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt index b3fd21d8e6..c219c83bcd 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt @@ -45,7 +45,6 @@ class MigrationPresenter @Inject constructor( LaunchedEffect(migrationStoreVersion) { val migrationValue = migrationStoreVersion ?: return@LaunchedEffect if (migrationValue == -1) { - // Fresh install, no migration needed Timber.d("Fresh install, or previous installed application did not have the migration mechanism.") } if (migrationValue == lastMigration) { From 23ed755f30a11f8a4790c5a49e75b3341d4b7f54 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 25 Sep 2024 14:12:11 +0200 Subject: [PATCH 3/3] migration : fix presenter test for fresh/old install --- .../migration/impl/MigrationPresenterTest.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt index 9213d35a62..082c20c29c 100644 --- a/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt +++ b/features/migration/impl/src/test/kotlin/io/element/android/features/migration/impl/MigrationPresenterTest.kt @@ -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 { }.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