Use presenter test extension

This commit is contained in:
Benoit Marty 2025-11-06 15:25:39 +01:00 committed by Benoit Marty
parent 0c5912ded4
commit 8e72ea4e7c
6 changed files with 39 additions and 120 deletions

View file

@ -7,9 +7,6 @@
package io.element.android.features.login.impl.screens.changeaccountprovider package io.element.android.features.login.impl.screens.changeaccountprovider
import app.cash.molecule.RecompositionMode
import app.cash.molecule.moleculeFlow
import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.enterprise.api.EnterpriseService
import io.element.android.features.enterprise.test.FakeEnterpriseService import io.element.android.features.enterprise.test.FakeEnterpriseService
@ -18,6 +15,7 @@ import io.element.android.features.login.impl.changeserver.aChangeServerState
import io.element.android.libraries.matrix.test.AN_ACCOUNT_PROVIDER import io.element.android.libraries.matrix.test.AN_ACCOUNT_PROVIDER
import io.element.android.libraries.matrix.test.AN_ACCOUNT_PROVIDER_2 import io.element.android.libraries.matrix.test.AN_ACCOUNT_PROVIDER_2
import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.WarmUpRule
import io.element.android.tests.testutils.test
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
@ -34,9 +32,7 @@ class ChangeAccountProviderPresenterTest {
defaultHomeserverListResult = { emptyList() } defaultHomeserverListResult = { emptyList() }
), ),
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.accountProviders).isEqualTo( assertThat(initialState.accountProviders).isEqualTo(
listOf( listOf(
@ -63,9 +59,7 @@ class ChangeAccountProviderPresenterTest {
} }
), ),
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.accountProviders).isEqualTo( assertThat(initialState.accountProviders).isEqualTo(
listOf( listOf(
@ -99,9 +93,7 @@ class ChangeAccountProviderPresenterTest {
} }
), ),
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.accountProviders).isEqualTo( assertThat(initialState.accountProviders).isEqualTo(
listOf( listOf(

View file

@ -7,9 +7,6 @@
package io.element.android.features.login.impl.screens.confirmaccountprovider package io.element.android.features.login.impl.screens.confirmaccountprovider
import app.cash.molecule.RecompositionMode
import app.cash.molecule.moleculeFlow
import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.appconfig.AuthenticationConfig import io.element.android.appconfig.AuthenticationConfig
import io.element.android.features.enterprise.test.FakeEnterpriseService import io.element.android.features.enterprise.test.FakeEnterpriseService
@ -28,6 +25,7 @@ import io.element.android.libraries.oidc.api.OidcAction
import io.element.android.libraries.oidc.api.OidcActionFlow import io.element.android.libraries.oidc.api.OidcActionFlow
import io.element.android.libraries.oidc.test.customtab.FakeOidcActionFlow import io.element.android.libraries.oidc.test.customtab.FakeOidcActionFlow
import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.WarmUpRule
import io.element.android.tests.testutils.test
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
@ -39,9 +37,7 @@ class ConfirmAccountProviderPresenterTest {
@Test @Test
fun `present - initial test`() = runTest { fun `present - initial test`() = runTest {
val presenter = createConfirmAccountProviderPresenter() val presenter = createConfirmAccountProviderPresenter()
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.isAccountCreation).isFalse() assertThat(initialState.isAccountCreation).isFalse()
assertThat(initialState.submitEnabled).isTrue() assertThat(initialState.submitEnabled).isTrue()
@ -60,9 +56,7 @@ class ConfirmAccountProviderPresenterTest {
val presenter = createConfirmAccountProviderPresenter( val presenter = createConfirmAccountProviderPresenter(
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue) initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue)
val loadingState = awaitItem() val loadingState = awaitItem()
@ -85,9 +79,7 @@ class ConfirmAccountProviderPresenterTest {
val presenter = createConfirmAccountProviderPresenter( val presenter = createConfirmAccountProviderPresenter(
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue) initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue)
val loadingState = awaitItem() val loadingState = awaitItem()
@ -112,9 +104,7 @@ class ConfirmAccountProviderPresenterTest {
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
defaultOidcActionFlow = defaultOidcActionFlow, defaultOidcActionFlow = defaultOidcActionFlow,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue) initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue)
val loadingState = awaitItem() val loadingState = awaitItem()
@ -143,9 +133,7 @@ class ConfirmAccountProviderPresenterTest {
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
defaultOidcActionFlow = defaultOidcActionFlow, defaultOidcActionFlow = defaultOidcActionFlow,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue) initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue)
val loadingState = awaitItem() val loadingState = awaitItem()
@ -173,9 +161,7 @@ class ConfirmAccountProviderPresenterTest {
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
defaultOidcActionFlow = defaultOidcActionFlow, defaultOidcActionFlow = defaultOidcActionFlow,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue) initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue)
val loadingState = awaitItem() val loadingState = awaitItem()
@ -199,9 +185,7 @@ class ConfirmAccountProviderPresenterTest {
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
defaultOidcActionFlow = defaultOidcActionFlow, defaultOidcActionFlow = defaultOidcActionFlow,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue) initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue)
val loadingState = awaitItem() val loadingState = awaitItem()
@ -232,9 +216,7 @@ class ConfirmAccountProviderPresenterTest {
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
defaultOidcActionFlow = defaultOidcActionFlow, defaultOidcActionFlow = defaultOidcActionFlow,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue) initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue)
val loadingState = awaitItem() val loadingState = awaitItem()
@ -260,9 +242,7 @@ class ConfirmAccountProviderPresenterTest {
val presenter = createConfirmAccountProviderPresenter( val presenter = createConfirmAccountProviderPresenter(
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue) initialState.eventSink.invoke(ConfirmAccountProviderEvents.Continue)
skipItems(1) // Loading skipItems(1) // Loading
@ -282,9 +262,7 @@ class ConfirmAccountProviderPresenterTest {
val presenter = createConfirmAccountProviderPresenter( val presenter = createConfirmAccountProviderPresenter(
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
// Submit will return an error // Submit will return an error
@ -317,9 +295,7 @@ class ConfirmAccountProviderPresenterTest {
throw AccountCreationNotSupported() throw AccountCreationNotSupported()
}, },
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(ConfirmAccountProviderEvents.Continue) initialState.eventSink(ConfirmAccountProviderEvents.Continue)
skipItems(1) // Loading skipItems(1) // Loading
@ -344,9 +320,7 @@ class ConfirmAccountProviderPresenterTest {
params = ConfirmAccountProviderPresenter.Params(isAccountCreation = true), params = ConfirmAccountProviderPresenter.Params(isAccountCreation = true),
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(ConfirmAccountProviderEvents.Continue) initialState.eventSink(ConfirmAccountProviderEvents.Continue)
skipItems(1) // Loading skipItems(1) // Loading
@ -369,9 +343,7 @@ class ConfirmAccountProviderPresenterTest {
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
webClientUrlForAuthenticationRetriever = FakeWebClientUrlForAuthenticationRetriever { aUrl }, webClientUrlForAuthenticationRetriever = FakeWebClientUrlForAuthenticationRetriever { aUrl },
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(ConfirmAccountProviderEvents.Continue) initialState.eventSink(ConfirmAccountProviderEvents.Continue)
skipItems(1) // Loading skipItems(1) // Loading
@ -394,9 +366,7 @@ class ConfirmAccountProviderPresenterTest {
matrixAuthenticationService = authenticationService, matrixAuthenticationService = authenticationService,
webClientUrlForAuthenticationRetriever = FakeWebClientUrlForAuthenticationRetriever { aUrl }, webClientUrlForAuthenticationRetriever = FakeWebClientUrlForAuthenticationRetriever { aUrl },
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(ConfirmAccountProviderEvents.Continue) initialState.eventSink(ConfirmAccountProviderEvents.Continue)
skipItems(1) // Loading skipItems(1) // Loading

View file

@ -7,9 +7,6 @@
package io.element.android.features.login.impl.screens.createaccount package io.element.android.features.login.impl.screens.createaccount
import app.cash.molecule.RecompositionMode
import app.cash.molecule.moleculeFlow
import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildMeta
@ -26,6 +23,7 @@ import io.element.android.libraries.matrix.test.verification.FakeSessionVerifica
import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.WarmUpRule
import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.lambda.lambdaRecorder
import io.element.android.tests.testutils.lambda.value import io.element.android.tests.testutils.lambda.value
import io.element.android.tests.testutils.test
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
@ -37,9 +35,7 @@ class CreateAccountPresenterTest {
@Test @Test
fun `present - initial state`() = runTest { fun `present - initial state`() = runTest {
val presenter = createPresenter() val presenter = createPresenter()
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.url).isEqualTo("aUrl") assertThat(initialState.url).isEqualTo("aUrl")
assertThat(initialState.pageProgress).isEqualTo(0) assertThat(initialState.pageProgress).isEqualTo(0)
@ -51,9 +47,7 @@ class CreateAccountPresenterTest {
@Test @Test
fun `present - set up progress update the state`() = runTest { fun `present - set up progress update the state`() = runTest {
val presenter = createPresenter() val presenter = createPresenter()
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(CreateAccountEvents.SetPageProgress(33)) initialState.eventSink(CreateAccountEvents.SetPageProgress(33))
assertThat(awaitItem().pageProgress).isEqualTo(33) assertThat(awaitItem().pageProgress).isEqualTo(33)
@ -65,9 +59,7 @@ class CreateAccountPresenterTest {
val presenter = createPresenter( val presenter = createPresenter(
messageParser = FakeMessageParser { error("An error") } messageParser = FakeMessageParser { error("An error") }
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(CreateAccountEvents.OnMessageReceived("")) initialState.eventSink(CreateAccountEvents.OnMessageReceived(""))
assertThat(awaitItem().createAction).isInstanceOf(AsyncAction.Failure::class.java) assertThat(awaitItem().createAction).isInstanceOf(AsyncAction.Failure::class.java)
@ -77,9 +69,7 @@ class CreateAccountPresenterTest {
@Test @Test
fun `present - receiving a message containing isTrusted is ignored`() = runTest { fun `present - receiving a message containing isTrusted is ignored`() = runTest {
val presenter = createPresenter() val presenter = createPresenter()
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(CreateAccountEvents.OnMessageReceived("isTrusted")) initialState.eventSink(CreateAccountEvents.OnMessageReceived("isTrusted"))
} }
@ -98,9 +88,7 @@ class CreateAccountPresenterTest {
messageParser = FakeMessageParser(lambda), messageParser = FakeMessageParser(lambda),
clientProvider = clientProvider, clientProvider = clientProvider,
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(CreateAccountEvents.OnMessageReceived("aMessage")) initialState.eventSink(CreateAccountEvents.OnMessageReceived("aMessage"))
assertThat(awaitItem().createAction.isLoading()).isTrue() assertThat(awaitItem().createAction.isLoading()).isTrue()
@ -118,9 +106,7 @@ class CreateAccountPresenterTest {
), ),
messageParser = FakeMessageParser { anExternalSession() } messageParser = FakeMessageParser { anExternalSession() }
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(CreateAccountEvents.OnMessageReceived("")) initialState.eventSink(CreateAccountEvents.OnMessageReceived(""))
assertThat(awaitItem().createAction.isLoading()).isTrue() assertThat(awaitItem().createAction.isLoading()).isTrue()

View file

@ -7,14 +7,12 @@
package io.element.android.features.login.impl.screens.qrcode.intro package io.element.android.features.login.impl.screens.qrcode.intro
import app.cash.molecule.RecompositionMode
import app.cash.molecule.moleculeFlow
import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildMeta
import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.libraries.matrix.test.core.aBuildMeta
import io.element.android.libraries.permissions.test.FakePermissionsPresenter import io.element.android.libraries.permissions.test.FakePermissionsPresenter
import io.element.android.libraries.permissions.test.FakePermissionsPresenterFactory import io.element.android.libraries.permissions.test.FakePermissionsPresenterFactory
import io.element.android.tests.testutils.test
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Test import org.junit.Test
@ -22,9 +20,7 @@ class QrCodeIntroPresenterTest {
@Test @Test
fun `present - initial state`() = runTest { fun `present - initial state`() = runTest {
val presenter = createQrCodeIntroPresenter() val presenter = createQrCodeIntroPresenter()
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
awaitItem().run { awaitItem().run {
assertThat(appName).isEqualTo("AppName") assertThat(appName).isEqualTo("AppName")
assertThat(desktopAppName).isEqualTo("DesktopAppName") assertThat(desktopAppName).isEqualTo("DesktopAppName")
@ -39,9 +35,7 @@ class QrCodeIntroPresenterTest {
val permissionsPresenter = FakePermissionsPresenter().apply { setPermissionGranted() } val permissionsPresenter = FakePermissionsPresenter().apply { setPermissionGranted() }
val permissionsPresenterFactory = FakePermissionsPresenterFactory(permissionsPresenter) val permissionsPresenterFactory = FakePermissionsPresenterFactory(permissionsPresenter)
val presenter = createQrCodeIntroPresenter(permissionsPresenterFactory = permissionsPresenterFactory) val presenter = createQrCodeIntroPresenter(permissionsPresenterFactory = permissionsPresenterFactory)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
awaitItem().eventSink(QrCodeIntroEvents.Continue) awaitItem().eventSink(QrCodeIntroEvents.Continue)
assertThat(awaitItem().canContinue).isTrue() assertThat(awaitItem().canContinue).isTrue()
} }
@ -52,9 +46,7 @@ class QrCodeIntroPresenterTest {
val permissionsPresenter = FakePermissionsPresenter() val permissionsPresenter = FakePermissionsPresenter()
val permissionsPresenterFactory = FakePermissionsPresenterFactory(permissionsPresenter) val permissionsPresenterFactory = FakePermissionsPresenterFactory(permissionsPresenter)
val presenter = createQrCodeIntroPresenter(permissionsPresenterFactory = permissionsPresenterFactory) val presenter = createQrCodeIntroPresenter(permissionsPresenterFactory = permissionsPresenterFactory)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
awaitItem().eventSink(QrCodeIntroEvents.Continue) awaitItem().eventSink(QrCodeIntroEvents.Continue)
assertThat(awaitItem().cameraPermissionState.showDialog).isTrue() assertThat(awaitItem().cameraPermissionState.showDialog).isTrue()
} }

View file

@ -7,9 +7,6 @@
package io.element.android.features.login.impl.screens.qrcode.scan package io.element.android.features.login.impl.screens.qrcode.scan
import app.cash.molecule.RecompositionMode
import app.cash.molecule.moleculeFlow
import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.enterprise.api.EnterpriseService
import io.element.android.features.enterprise.test.FakeEnterpriseService import io.element.android.features.enterprise.test.FakeEnterpriseService
@ -34,9 +31,7 @@ class QrCodeScanPresenterTest {
@Test @Test
fun `present - initial state`() = runTest { fun `present - initial state`() = runTest {
val presenter = createQrCodeScanPresenter() val presenter = createQrCodeScanPresenter()
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
awaitItem().run { awaitItem().run {
assertThat(isScanning).isTrue() assertThat(isScanning).isTrue()
assertThat(authenticationAction.isUninitialized()).isTrue() assertThat(authenticationAction.isUninitialized()).isTrue()
@ -114,9 +109,7 @@ class QrCodeScanPresenterTest {
parseQrCodeLoginDataResult = { Result.failure(Exception("Failed to parse QR code")) } parseQrCodeLoginDataResult = { Result.failure(Exception("Failed to parse QR code")) }
) )
val presenter = createQrCodeScanPresenter(qrCodeLoginDataFactory = qrCodeLoginDataFactory) val presenter = createQrCodeScanPresenter(qrCodeLoginDataFactory = qrCodeLoginDataFactory)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink(QrCodeScanEvents.QrCodeScanned(byteArrayOf())) initialState.eventSink(QrCodeScanEvents.QrCodeScanned(byteArrayOf()))
assertThat(awaitItem().isScanning).isFalse() assertThat(awaitItem().isScanning).isFalse()
@ -140,9 +133,7 @@ class QrCodeScanPresenterTest {
} }
qrCodeLoginManager.resetAction = resetAction qrCodeLoginManager.resetAction = resetAction
val presenter = createQrCodeScanPresenter(qrCodeLoginDataFactory = qrCodeLoginDataFactory, qrCodeLoginManager = qrCodeLoginManager) val presenter = createQrCodeScanPresenter(qrCodeLoginDataFactory = qrCodeLoginDataFactory, qrCodeLoginManager = qrCodeLoginManager)
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
// Skip initial item // Skip initial item
skipItems(1) skipItems(1)

View file

@ -7,9 +7,6 @@
package io.element.android.features.login.impl.screens.searchaccountprovider package io.element.android.features.login.impl.screens.searchaccountprovider
import app.cash.molecule.RecompositionMode
import app.cash.molecule.moleculeFlow
import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.features.login.impl.changeserver.aChangeServerState import io.element.android.features.login.impl.changeserver.aChangeServerState
import io.element.android.features.login.impl.resolver.HomeserverResolver import io.element.android.features.login.impl.resolver.HomeserverResolver
@ -18,6 +15,7 @@ import io.element.android.libraries.matrix.test.auth.FakeHomeServerLoginCompatib
import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.WarmUpRule
import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.lambda.lambdaRecorder
import io.element.android.tests.testutils.lambda.value import io.element.android.tests.testutils.lambda.value
import io.element.android.tests.testutils.test
import io.element.android.tests.testutils.testCoroutineDispatchers import io.element.android.tests.testutils.testCoroutineDispatchers
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Rule import org.junit.Rule
@ -34,9 +32,7 @@ class SearchAccountProviderPresenterTest {
homeserverResolver = HomeserverResolver(testCoroutineDispatchers(), fakeLoginCompatibilityChecker), homeserverResolver = HomeserverResolver(testCoroutineDispatchers(), fakeLoginCompatibilityChecker),
changeServerPresenter = { aChangeServerState() } changeServerPresenter = { aChangeServerState() }
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.userInput).isEmpty() assertThat(initialState.userInput).isEmpty()
assertThat(initialState.userInputResult).isEqualTo(AsyncData.Uninitialized) assertThat(initialState.userInputResult).isEqualTo(AsyncData.Uninitialized)
@ -50,9 +46,7 @@ class SearchAccountProviderPresenterTest {
homeserverResolver = HomeserverResolver(testCoroutineDispatchers(), fakeLoginCompatibilityChecker), homeserverResolver = HomeserverResolver(testCoroutineDispatchers(), fakeLoginCompatibilityChecker),
changeServerPresenter = { aChangeServerState() } changeServerPresenter = { aChangeServerState() }
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(SearchAccountProviderEvents.UserInput("https://test.org")) initialState.eventSink.invoke(SearchAccountProviderEvents.UserInput("https://test.org"))
val withInputState = awaitItem() val withInputState = awaitItem()
@ -76,9 +70,7 @@ class SearchAccountProviderPresenterTest {
homeserverResolver = HomeserverResolver(testCoroutineDispatchers(), fakeWellknownRetriever), homeserverResolver = HomeserverResolver(testCoroutineDispatchers(), fakeWellknownRetriever),
changeServerPresenter = { aChangeServerState() } changeServerPresenter = { aChangeServerState() }
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(SearchAccountProviderEvents.UserInput("test")) initialState.eventSink.invoke(SearchAccountProviderEvents.UserInput("test"))
val withInputState = awaitItem() val withInputState = awaitItem()
@ -111,9 +103,7 @@ class SearchAccountProviderPresenterTest {
homeserverResolver = HomeserverResolver(testCoroutineDispatchers(), fakeLoginCompatibilityChecker), homeserverResolver = HomeserverResolver(testCoroutineDispatchers(), fakeLoginCompatibilityChecker),
changeServerPresenter = { aChangeServerState() } changeServerPresenter = { aChangeServerState() }
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(SearchAccountProviderEvents.UserInput("test")) initialState.eventSink.invoke(SearchAccountProviderEvents.UserInput("test"))
val withInputState = awaitItem() val withInputState = awaitItem()
@ -153,9 +143,7 @@ class SearchAccountProviderPresenterTest {
homeserverResolver = HomeserverResolver(testCoroutineDispatchers(), fakeLoginCompatibilityChecker), homeserverResolver = HomeserverResolver(testCoroutineDispatchers(), fakeLoginCompatibilityChecker),
changeServerPresenter = { aChangeServerState() } changeServerPresenter = { aChangeServerState() }
) )
moleculeFlow(RecompositionMode.Immediate) { presenter.test {
presenter.present()
}.test {
val initialState = awaitItem() val initialState = awaitItem()
initialState.eventSink.invoke(SearchAccountProviderEvents.UserInput("test")) initialState.eventSink.invoke(SearchAccountProviderEvents.UserInput("test"))
val withInputState = awaitItem() val withInputState = awaitItem()