Update tests

This commit is contained in:
Benoit Marty 2023-07-06 12:01:16 +02:00 committed by Benoit Marty
parent aafd4f8347
commit 9dc8633b7b
2 changed files with 26 additions and 0 deletions

View file

@ -20,6 +20,7 @@ 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.DefaultLoginUserStory
import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource
import io.element.android.features.login.impl.util.defaultAccountProvider
import io.element.android.libraries.architecture.Async
@ -30,6 +31,7 @@ import io.element.android.libraries.matrix.test.A_SESSION_ID
import io.element.android.libraries.matrix.test.A_THROWABLE
import io.element.android.libraries.matrix.test.A_USER_NAME
import io.element.android.libraries.matrix.test.auth.FakeAuthenticationService
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
import org.junit.Test
@ -38,9 +40,11 @@ class LoginPasswordPresenterTest {
fun `present - initial state`() = runTest {
val authenticationService = FakeAuthenticationService()
val accountProviderDataSource = AccountProviderDataSource()
val loginUserStory = DefaultLoginUserStory()
val presenter = LoginPasswordPresenter(
authenticationService,
accountProviderDataSource,
loginUserStory,
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
@ -57,9 +61,11 @@ class LoginPasswordPresenterTest {
fun `present - enter login and password`() = runTest {
val authenticationService = FakeAuthenticationService()
val accountProviderDataSource = AccountProviderDataSource()
val loginUserStory = DefaultLoginUserStory()
val presenter = LoginPasswordPresenter(
authenticationService,
accountProviderDataSource,
loginUserStory,
)
authenticationService.givenHomeserver(A_HOMESERVER)
moleculeFlow(RecompositionClock.Immediate) {
@ -81,14 +87,17 @@ class LoginPasswordPresenterTest {
fun `present - submit`() = runTest {
val authenticationService = FakeAuthenticationService()
val accountProviderDataSource = AccountProviderDataSource()
val loginUserStory = DefaultLoginUserStory().apply { setLoginFlowIsDone(false) }
val presenter = LoginPasswordPresenter(
authenticationService,
accountProviderDataSource,
loginUserStory,
)
authenticationService.givenHomeserver(A_HOMESERVER)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
}.test {
assertThat(loginUserStory.loginFlowIsDone().first()).isFalse()
val initialState = awaitItem()
initialState.eventSink.invoke(LoginPasswordEvents.SetLogin(A_USER_NAME))
initialState.eventSink.invoke(LoginPasswordEvents.SetPassword(A_PASSWORD))
@ -99,6 +108,7 @@ class LoginPasswordPresenterTest {
assertThat(submitState.loginAction).isInstanceOf(Async.Loading::class.java)
val loggedInState = awaitItem()
assertThat(loggedInState.loginAction).isEqualTo(Async.Success(A_SESSION_ID))
assertThat(loginUserStory.loginFlowIsDone().first()).isTrue()
}
}
@ -106,9 +116,11 @@ class LoginPasswordPresenterTest {
fun `present - submit with error`() = runTest {
val authenticationService = FakeAuthenticationService()
val accountProviderDataSource = AccountProviderDataSource()
val loginUserStory = DefaultLoginUserStory()
val presenter = LoginPasswordPresenter(
authenticationService,
accountProviderDataSource,
loginUserStory,
)
authenticationService.givenHomeserver(A_HOMESERVER)
moleculeFlow(RecompositionClock.Immediate) {
@ -132,9 +144,11 @@ class LoginPasswordPresenterTest {
fun `present - clear error`() = runTest {
val authenticationService = FakeAuthenticationService()
val accountProviderDataSource = AccountProviderDataSource()
val loginUserStory = DefaultLoginUserStory()
val presenter = LoginPasswordPresenter(
authenticationService,
accountProviderDataSource,
loginUserStory,
)
authenticationService.givenHomeserver(A_HOMESERVER)
moleculeFlow(RecompositionClock.Immediate) {

View file

@ -20,6 +20,7 @@ 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.DefaultLoginUserStory
import io.element.android.features.login.impl.screens.loginpassword.LoginFormState
import io.element.android.libraries.architecture.Async
import io.element.android.libraries.matrix.api.core.SessionId
@ -29,6 +30,7 @@ import io.element.android.libraries.matrix.test.A_THROWABLE
import io.element.android.libraries.matrix.test.A_USER_ID
import io.element.android.libraries.matrix.test.auth.FakeAuthenticationService
import io.element.android.libraries.matrix.test.core.aBuildMeta
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
import org.junit.Test
@ -38,10 +40,12 @@ class WaitListPresenterTest {
val authenticationService = FakeAuthenticationService().apply {
givenHomeserver(A_HOMESERVER)
}
val loginUserStory = DefaultLoginUserStory()
val presenter = WaitListPresenter(
LoginFormState.Default,
aBuildMeta(applicationName = "Application Name"),
authenticationService,
loginUserStory,
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
@ -58,10 +62,12 @@ class WaitListPresenterTest {
val authenticationService = FakeAuthenticationService().apply {
givenLoginError(A_THROWABLE)
}
val loginUserStory = DefaultLoginUserStory()
val presenter = WaitListPresenter(
LoginFormState.Default,
aBuildMeta(),
authenticationService,
loginUserStory,
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
@ -85,14 +91,17 @@ class WaitListPresenterTest {
@Test
fun `present - attempt login with success`() = runTest {
val authenticationService = FakeAuthenticationService()
val loginUserStory = DefaultLoginUserStory().apply { setLoginFlowIsDone(false) }
val presenter = WaitListPresenter(
LoginFormState.Default,
aBuildMeta(),
authenticationService,
loginUserStory,
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
}.test {
assertThat(loginUserStory.loginFlowIsDone().first()).isFalse()
val initialState = awaitItem()
// First usage of AttemptLogin, nothing should happen
initialState.eventSink.invoke(WaitListEvents.AttemptLogin)
@ -102,6 +111,9 @@ class WaitListPresenterTest {
assertThat(submitState.loginAction).isInstanceOf(Async.Loading::class.java)
val successState = awaitItem()
assertThat(successState.loginAction).isEqualTo(Async.Success(A_USER_ID))
assertThat(loginUserStory.loginFlowIsDone().first()).isFalse()
successState.eventSink.invoke(WaitListEvents.Continue)
assertThat(loginUserStory.loginFlowIsDone().first()).isTrue()
}
}
}