From 4cc5cf008407e4f36370f2a713632d63c8fcc906 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 6 Nov 2025 14:23:41 +0100 Subject: [PATCH] Fix test --- .../changeserver/ChangeServerPresenterTest.kt | 14 ++- .../ChooseAccountProviderPresenterTest.kt | 7 +- .../ConfirmAccountProviderPresenterTest.kt | 91 +++++++++++++------ .../LoginPasswordPresenterTest.kt | 28 ++++-- .../onboarding/OnBoardingPresenterTest.kt | 7 +- .../auth/FakeMatrixAuthenticationService.kt | 23 +---- 6 files changed, 111 insertions(+), 59 deletions(-) diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt index 3b88ab03c0..47f9fee728 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenterTest.kt @@ -18,6 +18,7 @@ import io.element.android.features.wellknown.test.FakeWellknownRetriever import io.element.android.features.wellknown.test.anElementWellKnown import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.core.uri.ensureProtocol +import io.element.android.libraries.matrix.test.AN_EXCEPTION import io.element.android.libraries.matrix.test.A_HOMESERVER import io.element.android.libraries.matrix.test.A_HOMESERVER_URL import io.element.android.libraries.matrix.test.auth.FakeMatrixAuthenticationService @@ -46,7 +47,11 @@ class ChangeServerPresenterTest { @Test fun `present - change server ok`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER) + }, + ) createPresenter( authenticationService = authenticationService, enterpriseService = FakeEnterpriseService( @@ -55,7 +60,6 @@ class ChangeServerPresenterTest { ).test { val initialState = awaitItem() assertThat(initialState.changeServerAction).isEqualTo(AsyncData.Uninitialized) - authenticationService.givenHomeserver(A_HOMESERVER) initialState.eventSink.invoke(ChangeServerEvents.ChangeServer(AccountProvider(url = A_HOMESERVER_URL))) val loadingState = awaitItem() assertThat(loadingState.changeServerAction).isInstanceOf(AsyncData.Loading::class.java) @@ -66,10 +70,16 @@ class ChangeServerPresenterTest { @Test fun `present - change server error`() = runTest { + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.failure(AN_EXCEPTION) + }, + ) createPresenter( enterpriseService = FakeEnterpriseService( isAllowedToConnectToHomeserverResult = { true }, ), + authenticationService = authenticationService, ).test { val initialState = awaitItem() assertThat(initialState.changeServerAction).isEqualTo(AsyncData.Uninitialized) diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenterTest.kt index 2e13b0e555..96dc5b87ff 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenterTest.kt @@ -95,7 +95,11 @@ class ChooseAccountProviderPresenterTest { @Test fun `present - select account provider and continue - error then clear error`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.failure(AN_EXCEPTION) + }, + ) val presenter = createPresenter( enterpriseService = FakeEnterpriseService( defaultHomeserverListResult = { listOf(ACCOUNT_PROVIDER_FROM_CONFIG_1, ACCOUNT_PROVIDER_FROM_CONFIG_2) }, @@ -111,7 +115,6 @@ class ChooseAccountProviderPresenterTest { } awaitItem().also { assertThat(it.selectedAccountProvider).isEqualTo(accountProvider1) - authenticationService.givenChangeServerError(AN_EXCEPTION) it.eventSink(ChooseAccountProviderEvents.Continue) skipItems(1) // Loading diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenterTest.kt index 3978d3be6e..82c2caff61 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenterTest.kt @@ -53,11 +53,14 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - continue password login`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER) + }, + ) val presenter = createConfirmAccountProviderPresenter( matrixAuthenticationService = authenticationService, ) - authenticationService.givenHomeserver(A_HOMESERVER) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { @@ -75,11 +78,14 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - continue oidc`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER_OIDC) + }, + ) val presenter = createConfirmAccountProviderPresenter( matrixAuthenticationService = authenticationService, ) - authenticationService.givenHomeserver(A_HOMESERVER_OIDC) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { @@ -97,13 +103,16 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - oidc - cancel with failure`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER_OIDC) + }, + ) val defaultOidcActionFlow = FakeOidcActionFlow() val presenter = createConfirmAccountProviderPresenter( matrixAuthenticationService = authenticationService, defaultOidcActionFlow = defaultOidcActionFlow, ) - authenticationService.givenHomeserver(A_HOMESERVER_OIDC) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { @@ -125,13 +134,16 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - oidc - cancel with success`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER_OIDC) + }, + ) val defaultOidcActionFlow = FakeOidcActionFlow() val presenter = createConfirmAccountProviderPresenter( matrixAuthenticationService = authenticationService, defaultOidcActionFlow = defaultOidcActionFlow, ) - authenticationService.givenHomeserver(A_HOMESERVER_OIDC) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { @@ -152,13 +164,16 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - oidc - cancel to unblock`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER_OIDC) + }, + ) val defaultOidcActionFlow = FakeOidcActionFlow() val presenter = createConfirmAccountProviderPresenter( matrixAuthenticationService = authenticationService, defaultOidcActionFlow = defaultOidcActionFlow, ) - authenticationService.givenHomeserver(A_HOMESERVER_OIDC) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { @@ -175,13 +190,16 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - oidc - success with failure`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER_OIDC) + }, + ) val defaultOidcActionFlow = FakeOidcActionFlow() val presenter = createConfirmAccountProviderPresenter( matrixAuthenticationService = authenticationService, defaultOidcActionFlow = defaultOidcActionFlow, ) - authenticationService.givenHomeserver(A_HOMESERVER_OIDC) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { @@ -205,13 +223,16 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - oidc - success with success`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER_OIDC) + }, + ) val defaultOidcActionFlow = FakeOidcActionFlow() val presenter = createConfirmAccountProviderPresenter( matrixAuthenticationService = authenticationService, defaultOidcActionFlow = defaultOidcActionFlow, ) - authenticationService.givenHomeserver(A_HOMESERVER_OIDC) moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { @@ -232,7 +253,11 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - submit fails`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.failure(AN_EXCEPTION) + }, + ) val presenter = createConfirmAccountProviderPresenter( matrixAuthenticationService = authenticationService, ) @@ -240,7 +265,6 @@ class ConfirmAccountProviderPresenterTest { presenter.present() }.test { val initialState = awaitItem() - authenticationService.givenChangeServerError(RuntimeException()) initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue) skipItems(1) // Loading val failureState = awaitItem() @@ -251,7 +275,11 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - clear error`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.failure(AN_EXCEPTION) + }, + ) val presenter = createConfirmAccountProviderPresenter( matrixAuthenticationService = authenticationService, ) @@ -261,7 +289,6 @@ class ConfirmAccountProviderPresenterTest { val initialState = awaitItem() // Submit will return an error - authenticationService.givenChangeServerError(AN_EXCEPTION) initialState.eventSink(ConfirmAccountProviderEvents.Continue) skipItems(1) // Loading @@ -279,8 +306,11 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - confirm account creation without oidc and without url generates an error`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() - authenticationService.givenHomeserver(A_HOMESERVER) + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER) + }, + ) val presenter = createConfirmAccountProviderPresenter( params = ConfirmAccountProviderPresenter.Params(isAccountCreation = true), matrixAuthenticationService = authenticationService, @@ -306,8 +336,11 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - confirm account creation with oidc is successful`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() - authenticationService.givenHomeserver(A_HOMESERVER_OIDC) + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER_OIDC) + }, + ) val presenter = createConfirmAccountProviderPresenter( params = ConfirmAccountProviderPresenter.Params(isAccountCreation = true), matrixAuthenticationService = authenticationService, @@ -327,8 +360,11 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - confirm account creation with oidc and url continues with oidc`() = runTest { val aUrl = "aUrl" - val authenticationService = FakeMatrixAuthenticationService() - authenticationService.givenHomeserver(A_HOMESERVER_OIDC) + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER_OIDC) + }, + ) val presenter = createConfirmAccountProviderPresenter( params = ConfirmAccountProviderPresenter.Params(isAccountCreation = true), matrixAuthenticationService = authenticationService, @@ -349,8 +385,11 @@ class ConfirmAccountProviderPresenterTest { @Test fun `present - confirm account creation without oidc and with url continuing with url`() = runTest { val aUrl = "aUrl" - val authenticationService = FakeMatrixAuthenticationService() - authenticationService.givenHomeserver(A_HOMESERVER) + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER) + }, + ) val presenter = createConfirmAccountProviderPresenter( params = ConfirmAccountProviderPresenter.Params(isAccountCreation = true), matrixAuthenticationService = authenticationService, diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt index af158ec0da..fd048d1db0 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenterTest.kt @@ -42,8 +42,11 @@ class LoginPasswordPresenterTest { @Test fun `present - enter login and password`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() - authenticationService.givenHomeserver(A_HOMESERVER) + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER) + }, + ) createLoginPasswordPresenter( authenticationService = authenticationService, ).test { @@ -61,8 +64,11 @@ class LoginPasswordPresenterTest { @Test fun `present - submit`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() - authenticationService.givenHomeserver(A_HOMESERVER) + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER) + }, + ) createLoginPasswordPresenter( authenticationService = authenticationService, ).test { @@ -81,8 +87,11 @@ class LoginPasswordPresenterTest { @Test fun `present - submit with error`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() - authenticationService.givenHomeserver(A_HOMESERVER) + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER) + }, + ) createLoginPasswordPresenter( authenticationService = authenticationService, ).test { @@ -102,8 +111,11 @@ class LoginPasswordPresenterTest { @Test fun `present - clear error`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() - authenticationService.givenHomeserver(A_HOMESERVER) + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.success(A_HOMESERVER) + }, + ) createLoginPasswordPresenter( authenticationService = authenticationService, ).test { diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingPresenterTest.kt index 16f6c649fa..1cbbda450b 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingPresenterTest.kt @@ -214,7 +214,11 @@ class OnBoardingPresenterTest { @Test fun `present - default account provider - login and clear error`() = runTest { - val authenticationService = FakeMatrixAuthenticationService() + val authenticationService = FakeMatrixAuthenticationService( + setHomeserverResult = { + Result.failure(AN_EXCEPTION) + }, + ) val presenter = createPresenter( params = OnBoardingNode.Params( accountProvider = A_HOMESERVER_URL, @@ -231,7 +235,6 @@ class OnBoardingPresenterTest { skipItems(3) awaitItem().also { assertThat(it.defaultAccountProvider).isEqualTo(A_HOMESERVER_URL) - authenticationService.givenChangeServerError(AN_EXCEPTION) it.eventSink(OnBoardingEvents.OnSignIn(A_HOMESERVER_URL)) skipItems(1) // Loading diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/auth/FakeMatrixAuthenticationService.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/auth/FakeMatrixAuthenticationService.kt index f1554df1d0..7901eafeea 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/auth/FakeMatrixAuthenticationService.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/auth/FakeMatrixAuthenticationService.kt @@ -22,8 +22,6 @@ import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.tests.testutils.lambda.lambdaError import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.simulateLongTask -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow val A_OIDC_DATA = OidcDetails(url = "a-url") @@ -31,13 +29,12 @@ class FakeMatrixAuthenticationService( var matrixClientResult: ((SessionId) -> Result)? = null, var loginWithQrCodeResult: (qrCodeData: MatrixQrCodeLoginData, progress: (QrCodeLoginStep) -> Unit) -> Result = lambdaRecorder Unit, Result> { _, _ -> Result.success(A_SESSION_ID) }, - private val importCreatedSessionLambda: (ExternalSession) -> Result = { lambdaError() } + private val importCreatedSessionLambda: (ExternalSession) -> Result = { lambdaError() }, + private val setHomeserverResult: (String) -> Result = { lambdaError() }, ) : MatrixAuthenticationService { - private val homeserver = MutableStateFlow(null) private var oidcError: Throwable? = null private var oidcCancelError: Throwable? = null private var loginError: Throwable? = null - private var changeServerError: Throwable? = null private var matrixClient: MatrixClient? = null private var onAuthenticationListener: ((MatrixClient) -> Unit)? = null @@ -53,16 +50,8 @@ class FakeMatrixAuthenticationService( } } - override fun getHomeserverDetails(): StateFlow { - return homeserver - } - - fun givenHomeserver(homeserver: MatrixHomeServerDetails) { - this.homeserver.value = homeserver - } - - override suspend fun setHomeserver(homeserver: String): Result = simulateLongTask { - changeServerError?.let { Result.failure(it) } ?: Result.success(Unit) + override suspend fun setHomeserver(homeserver: String): Result = simulateLongTask { + setHomeserverResult(homeserver) } override suspend fun login(username: String, password: String): Result = simulateLongTask { @@ -115,10 +104,6 @@ class FakeMatrixAuthenticationService( loginError = throwable } - fun givenChangeServerError(throwable: Throwable?) { - changeServerError = throwable - } - fun givenMatrixClient(matrixClient: MatrixClient) { this.matrixClient = matrixClient }