From 199decdd1d9039f1554f15f62047751168dc06d1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Jun 2023 16:30:08 +0200 Subject: [PATCH] Test ChangeServerPresenter --- .../ChangeAccountProviderPresenterTest.kt | 8 ++ .../common/ChangeServerPresenterTest.kt | 91 +++++++++++++++++++ .../ChangeAccountProviderFormPresenterTest.kt | 24 ++++- 3 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/common/ChangeServerPresenterTest.kt diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/ChangeAccountProviderPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/ChangeAccountProviderPresenterTest.kt index 911ecaab78..e6f4a84471 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/ChangeAccountProviderPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/ChangeAccountProviderPresenterTest.kt @@ -21,13 +21,21 @@ import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.login.impl.accountprovider.item.AccountProvider +import io.element.android.features.login.impl.changeaccountprovider.common.ChangeServerPresenter +import io.element.android.features.login.impl.datasource.AccountProviderDataSource +import io.element.android.libraries.matrix.test.auth.FakeAuthenticationService import kotlinx.coroutines.test.runTest import org.junit.Test class ChangeAccountProviderPresenterTest { @Test fun `present - initial state`() = runTest { + val changeServerPresenter = ChangeServerPresenter( + FakeAuthenticationService(), + AccountProviderDataSource() + ) val presenter = ChangeAccountProviderPresenter( + changeServerPresenter ) moleculeFlow(RecompositionClock.Immediate) { presenter.present() diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/common/ChangeServerPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/common/ChangeServerPresenterTest.kt new file mode 100644 index 0000000000..cc668f8217 --- /dev/null +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/common/ChangeServerPresenterTest.kt @@ -0,0 +1,91 @@ +/* + * 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.login.impl.changeaccountprovider.common + +import app.cash.molecule.RecompositionClock +import app.cash.molecule.moleculeFlow +import app.cash.turbine.test +import com.google.common.truth.Truth.assertThat +import io.element.android.features.login.impl.accountprovider.item.AccountProvider +import io.element.android.features.login.impl.datasource.AccountProviderDataSource +import io.element.android.libraries.architecture.Async +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.FakeAuthenticationService +import kotlinx.coroutines.test.runTest +import org.junit.Test + +class ChangeServerPresenterTest { + @Test + fun `present - initial state`() = runTest { + val presenter = ChangeServerPresenter( + FakeAuthenticationService(), + AccountProviderDataSource() + ) + moleculeFlow(RecompositionClock.Immediate) { + presenter.present() + }.test { + val initialState = awaitItem() + assertThat(initialState.changeServerAction).isEqualTo(Async.Uninitialized) + } + } + + @Test + fun `present - change server ok`() = runTest { + val authenticationService = FakeAuthenticationService() + val presenter = ChangeServerPresenter( + authenticationService, + AccountProviderDataSource() + ) + moleculeFlow(RecompositionClock.Immediate) { + presenter.present() + }.test { + val initialState = awaitItem() + assertThat(initialState.changeServerAction).isEqualTo(Async.Uninitialized) + authenticationService.givenHomeserver(A_HOMESERVER) + initialState.eventSink.invoke(ChangeServerEvents.ChangeServer(AccountProvider(A_HOMESERVER_URL))) + val loadingState = awaitItem() + assertThat(loadingState.changeServerAction).isInstanceOf(Async.Loading::class.java) + val successState = awaitItem() + assertThat(successState.changeServerAction).isEqualTo(Async.Success(Unit)) + } + } + + @Test + fun `present - change server error`() = runTest { + val authenticationService = FakeAuthenticationService() + val presenter = ChangeServerPresenter( + authenticationService, + AccountProviderDataSource() + ) + moleculeFlow(RecompositionClock.Immediate) { + presenter.present() + }.test { + val initialState = awaitItem() + assertThat(initialState.changeServerAction).isEqualTo(Async.Uninitialized) + initialState.eventSink.invoke(ChangeServerEvents.ChangeServer(AccountProvider(A_HOMESERVER_URL))) + val loadingState = awaitItem() + assertThat(loadingState.changeServerAction).isInstanceOf(Async.Loading::class.java) + val failureState = awaitItem() + assertThat(failureState.changeServerAction).isInstanceOf(Async.Failure::class.java) + // Clear error + failureState.eventSink.invoke(ChangeServerEvents.ClearError) + val finalState = awaitItem() + assertThat(finalState.changeServerAction).isEqualTo(Async.Uninitialized) + } + } +} diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/form/ChangeAccountProviderFormPresenterTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/form/ChangeAccountProviderFormPresenterTest.kt index e2b2a8f546..1a425993a8 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/form/ChangeAccountProviderFormPresenterTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/changeaccountprovider/form/ChangeAccountProviderFormPresenterTest.kt @@ -20,7 +20,10 @@ import app.cash.molecule.RecompositionClock import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat +import io.element.android.features.login.impl.changeaccountprovider.common.ChangeServerPresenter +import io.element.android.features.login.impl.datasource.AccountProviderDataSource import io.element.android.libraries.architecture.Async +import io.element.android.libraries.matrix.test.auth.FakeAuthenticationService import kotlinx.coroutines.test.runTest import org.junit.Test @@ -28,8 +31,13 @@ class ChangeAccountProviderFormPresenterTest { @Test fun `present - initial state`() = runTest { val homeServerResolver = FakeHomeServerResolver() + val changeServerPresenter = ChangeServerPresenter( + FakeAuthenticationService(), + AccountProviderDataSource() + ) val presenter = ChangeAccountProviderFormPresenter( - homeServerResolver + homeServerResolver, + changeServerPresenter ) moleculeFlow(RecompositionClock.Immediate) { presenter.present() @@ -43,8 +51,13 @@ class ChangeAccountProviderFormPresenterTest { @Test fun `present - enter text no result`() = runTest { val homeServerResolver = FakeHomeServerResolver() + val changeServerPresenter = ChangeServerPresenter( + FakeAuthenticationService(), + AccountProviderDataSource() + ) val presenter = ChangeAccountProviderFormPresenter( - homeServerResolver + homeServerResolver, + changeServerPresenter ) moleculeFlow(RecompositionClock.Immediate) { presenter.present() @@ -68,8 +81,13 @@ class ChangeAccountProviderFormPresenterTest { listOf(aHomeserverData(), aHomeserverData()), ) ) + val changeServerPresenter = ChangeServerPresenter( + FakeAuthenticationService(), + AccountProviderDataSource() + ) val presenter = ChangeAccountProviderFormPresenter( - homeServerResolver + homeServerResolver, + changeServerPresenter ) moleculeFlow(RecompositionClock.Immediate) { presenter.present()