From 996d3627243f6087120b2f0a2bed5a32dd2445f6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 30 Jun 2023 18:25:15 +0200 Subject: [PATCH] Fix test. --- features/preferences/impl/build.gradle.kts | 1 + .../impl/root/PreferencesRootPresenter.kt | 15 ++---- .../preferences/impl/root/VersionFormatter.kt | 48 +++++++++++++++++++ .../impl/root/PreferencesRootPresenterTest.kt | 8 ++-- 4 files changed, 57 insertions(+), 15 deletions(-) create mode 100644 features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt diff --git a/features/preferences/impl/build.gradle.kts b/features/preferences/impl/build.gradle.kts index 0e53ef6716..682757d802 100644 --- a/features/preferences/impl/build.gradle.kts +++ b/features/preferences/impl/build.gradle.kts @@ -46,6 +46,7 @@ dependencies { implementation(projects.features.analytics.api) implementation(projects.libraries.matrixui) implementation(projects.features.logout.api) + implementation(projects.services.toolbox.api) implementation(libs.datetime) implementation(libs.accompanist.placeholder) implementation(libs.coil.compose) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt index 871ff98442..18147fd197 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt @@ -25,16 +25,13 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.ui.res.stringResource import io.element.android.features.logout.api.LogoutPreferencePresenter import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType import io.element.android.libraries.matrix.api.user.CurrentUserProvider import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus -import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import javax.inject.Inject @@ -43,7 +40,8 @@ class PreferencesRootPresenter @Inject constructor( private val logoutPresenter: LogoutPreferencePresenter, private val currentUserProvider: CurrentUserProvider, private val sessionVerificationService: SessionVerificationService, - private val buildMeta: BuildMeta, + private val buildType: BuildType, + private val versionFormatter: VersionFormatter, ) : Presenter { @Composable @@ -61,17 +59,12 @@ class PreferencesRootPresenter @Inject constructor( derivedStateOf { sessionVerifiedStatus == SessionVerifiedStatus.NotVerified } } - val version = stringResource( - id = CommonStrings.settings_version_number, - buildMeta.versionName, - buildMeta.versionCode.toString() - ) val logoutState = logoutPresenter.present() - val showDeveloperSettings = buildMeta.buildType != BuildType.RELEASE + val showDeveloperSettings = buildType != BuildType.RELEASE return PreferencesRootState( logoutState = logoutState, myUser = matrixUser.value, - version = version, + version = versionFormatter.get(), showCompleteVerification = sessionIsNotVerified, showDeveloperSettings = showDeveloperSettings ) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt new file mode 100644 index 0000000000..7eff670951 --- /dev/null +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.preferences.impl.root + +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.libraries.core.meta.BuildMeta +import io.element.android.libraries.di.AppScope +import io.element.android.libraries.ui.strings.CommonStrings +import io.element.android.services.toolbox.api.strings.StringProvider +import javax.inject.Inject + +interface VersionFormatter { + fun get(): String +} + +@ContributesBinding(AppScope::class) +class DefaultVersionFormatter @Inject constructor( + private val stringProvider: StringProvider, + private val buildMeta: BuildMeta, +) : VersionFormatter { + override fun get(): String { + return stringProvider.getString( + CommonStrings.settings_version_number, + buildMeta.versionName, + buildMeta.versionCode.toString() + ) + } +} + +class FakeVersionFormatter : VersionFormatter { + override fun get(): String { + return "A Version" + } +} diff --git a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt index 1dd4c6c67a..bd5ec02b10 100644 --- a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt +++ b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenterTest.kt @@ -22,12 +22,12 @@ import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.logout.impl.DefaultLogoutPreferencePresenter import io.element.android.libraries.architecture.Async +import io.element.android.libraries.core.meta.BuildType import io.element.android.libraries.matrix.api.user.CurrentUserProvider import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.test.AN_AVATAR_URL import io.element.android.libraries.matrix.test.A_USER_NAME import io.element.android.libraries.matrix.test.FakeMatrixClient -import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService import kotlinx.coroutines.test.runTest import org.junit.Test @@ -35,21 +35,21 @@ import org.junit.Test class PreferencesRootPresenterTest { @Test fun `present - initial state`() = runTest { - val buildMeta = aBuildMeta() val matrixClient = FakeMatrixClient() val logoutPresenter = DefaultLogoutPreferencePresenter(matrixClient) val presenter = PreferencesRootPresenter( logoutPresenter, CurrentUserProvider(matrixClient), FakeSessionVerificationService(), - buildMeta, + BuildType.DEBUG, + FakeVersionFormatter() ) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { val initialState = awaitItem() assertThat(initialState.myUser).isNull() - assertThat(initialState.version).isEqualTo("Version " + buildMeta.versionName + " (" + buildMeta.versionCode + ")") + assertThat(initialState.version).isEqualTo("A Version") val loadedState = awaitItem() assertThat(loadedState.logoutState.logoutAction).isEqualTo(Async.Uninitialized) assertThat(loadedState.myUser).isEqualTo(