ChooseAccountProviderEvents -> ChooseAccountProviderEvent

This commit is contained in:
Benoit Marty
2026-08-25 10:01:04 +02:00
parent 0ee7ed3a78
commit 1fd102ffc3
7 changed files with 25 additions and 25 deletions
@@ -10,8 +10,8 @@ package io.element.android.features.login.impl.screens.chooseaccountprovider
import io.element.android.features.login.impl.accountprovider.AccountProvider
sealed interface ChooseAccountProviderEvents {
data class SelectAccountProvider(val accountProvider: AccountProvider) : ChooseAccountProviderEvents
data object Continue : ChooseAccountProviderEvents
data object ClearError : ChooseAccountProviderEvents
sealed interface ChooseAccountProviderEvent {
data class SelectAccountProvider(val accountProvider: AccountProvider) : ChooseAccountProviderEvent
data object Continue : ChooseAccountProviderEvent
data object ClearError : ChooseAccountProviderEvent
}
@@ -34,9 +34,9 @@ class ChooseAccountProviderPresenter(
val loginModeState = loginModePresenter.present()
var selectedAccountProvider: AccountProvider? by remember { mutableStateOf(null) }
fun handleEvent(event: ChooseAccountProviderEvents) {
fun handleEvent(event: ChooseAccountProviderEvent) {
when (event) {
ChooseAccountProviderEvents.Continue -> {
ChooseAccountProviderEvent.Continue -> {
selectedAccountProvider?.let { provider ->
loginModeState.eventSink(
LoginModeEvent.Submit(
@@ -48,13 +48,13 @@ class ChooseAccountProviderPresenter(
)
}
}
is ChooseAccountProviderEvents.SelectAccountProvider -> {
is ChooseAccountProviderEvent.SelectAccountProvider -> {
// Ensure that the user does not change the server during processing.
if (loginModeState.loginMode is AsyncData.Uninitialized) {
selectedAccountProvider = event.accountProvider
}
}
ChooseAccountProviderEvents.ClearError -> loginModeState.eventSink(LoginModeEvent.ClearError)
ChooseAccountProviderEvent.ClearError -> loginModeState.eventSink(LoginModeEvent.ClearError)
}
}
@@ -17,7 +17,7 @@ data class ChooseAccountProviderState(
val accountProviders: ImmutableList<AccountProvider>,
val selectedAccountProvider: AccountProvider?,
val loginModeState: LoginModeState,
val eventSink: (ChooseAccountProviderEvents) -> Unit,
val eventSink: (ChooseAccountProviderEvent) -> Unit,
) {
val submitEnabled: Boolean
get() = selectedAccountProvider != null &&
@@ -71,7 +71,7 @@ fun aChooseAccountProviderState(
),
selectedAccountProvider: AccountProvider? = null,
loginModeState: LoginModeState = aLoginModeState(),
eventSink: (ChooseAccountProviderEvents) -> Unit = {},
eventSink: (ChooseAccountProviderEvent) -> Unit = {},
) = ChooseAccountProviderState(
accountProviders = accountProviders.toImmutableList(),
selectedAccountProvider = selectedAccountProvider,
@@ -108,7 +108,7 @@ fun ChooseAccountProviderView(
item = alteredItem,
selected = item == state.selectedAccountProvider,
onClick = {
state.eventSink(ChooseAccountProviderEvents.SelectAccountProvider(item))
state.eventSink(ChooseAccountProviderEvent.SelectAccountProvider(item))
}
)
}
@@ -119,7 +119,7 @@ fun ChooseAccountProviderView(
text = stringResource(id = CommonStrings.action_continue),
showProgress = isLoading,
onClick = {
state.eventSink(ChooseAccountProviderEvents.Continue)
state.eventSink(ChooseAccountProviderEvent.Continue)
},
enabled = state.submitEnabled || isLoading,
modifier = Modifier
@@ -131,7 +131,7 @@ fun ChooseAccountProviderView(
LoginModeView(
loginMode = state.loginModeState.loginMode,
onClearError = {
state.eventSink(ChooseAccountProviderEvents.ClearError)
state.eventSink(ChooseAccountProviderEvent.ClearError)
},
onLearnMoreClick = onLearnMoreClick,
onOAuthDetails = onOAuthDetails,
@@ -88,7 +88,7 @@ class ChooseAccountProviderPresenterTest {
presenter.test {
awaitItem().also {
assertThat(it.selectedAccountProvider).isNull()
it.eventSink(ChooseAccountProviderEvents.Continue)
it.eventSink(ChooseAccountProviderEvent.Continue)
expectNoEvents()
}
}
@@ -112,11 +112,11 @@ class ChooseAccountProviderPresenterTest {
presenter.test {
awaitItem().also {
assertThat(it.selectedAccountProvider).isNull()
it.eventSink(ChooseAccountProviderEvents.SelectAccountProvider(accountProvider1))
it.eventSink(ChooseAccountProviderEvent.SelectAccountProvider(accountProvider1))
}
awaitItem().also {
assertThat(it.selectedAccountProvider).isEqualTo(accountProvider1)
it.eventSink(ChooseAccountProviderEvents.Continue)
it.eventSink(ChooseAccountProviderEvent.Continue)
skipItems(1) // Loading
// Check an error was returned
@@ -124,7 +124,7 @@ class ChooseAccountProviderPresenterTest {
assertThat(submittedState.loginModeState.loginMode).isInstanceOf(AsyncData.Failure::class.java)
// Assert the error is then cleared
submittedState.eventSink(ChooseAccountProviderEvents.ClearError)
submittedState.eventSink(ChooseAccountProviderEvent.ClearError)
val clearedState = awaitItem()
assertThat(clearedState.loginModeState.loginMode).isEqualTo(AsyncData.Uninitialized)
}
@@ -145,15 +145,15 @@ class ChooseAccountProviderPresenterTest {
presenter.test {
awaitItem().also {
assertThat(it.selectedAccountProvider).isNull()
it.eventSink(ChooseAccountProviderEvents.SelectAccountProvider(accountProvider1))
it.eventSink(ChooseAccountProviderEvent.SelectAccountProvider(accountProvider1))
}
awaitItem().also {
assertThat(it.selectedAccountProvider).isEqualTo(accountProvider1)
it.eventSink(ChooseAccountProviderEvents.Continue)
it.eventSink(ChooseAccountProviderEvent.Continue)
}
awaitItem().also {
assertThat(it.loginModeState.loginMode.isLoading()).isTrue()
it.eventSink(ChooseAccountProviderEvents.SelectAccountProvider(accountProvider2))
it.eventSink(ChooseAccountProviderEvent.SelectAccountProvider(accountProvider2))
}
expectNoEvents()
}
@@ -35,7 +35,7 @@ import org.robolectric.annotation.Config
class ChooseAccountProviderViewTest : RobolectricTest() {
@Test
fun `clicking on back invokes the expected callback`() = runAndroidComposeUiTest {
val eventSink = EventsRecorder<ChooseAccountProviderEvents>(expectEvents = false)
val eventSink = EventsRecorder<ChooseAccountProviderEvent>(expectEvents = false)
ensureCalledOnce {
setChooseAccountProviderView(
state = aChooseAccountProviderState(
@@ -50,7 +50,7 @@ class ChooseAccountProviderViewTest : RobolectricTest() {
@Config(qualifiers = "h1024dp")
@Test
fun `selecting an account provider emits the the expected event`() = runAndroidComposeUiTest {
val eventSink = EventsRecorder<ChooseAccountProviderEvents>()
val eventSink = EventsRecorder<ChooseAccountProviderEvent>()
setChooseAccountProviderView(
state = aChooseAccountProviderState(
accountProviders = listOf(
@@ -62,12 +62,12 @@ class ChooseAccountProviderViewTest : RobolectricTest() {
),
)
onNodeWithText(ChooseAccountProviderPresenterTest.accountProvider1.title).performClick()
eventSink.assertSingle(ChooseAccountProviderEvents.SelectAccountProvider(ChooseAccountProviderPresenterTest.accountProvider1))
eventSink.assertSingle(ChooseAccountProviderEvent.SelectAccountProvider(ChooseAccountProviderPresenterTest.accountProvider1))
}
@Test
fun `when error is displayed - closing the dialog emits the expected event`() = runAndroidComposeUiTest {
val eventSink = EventsRecorder<ChooseAccountProviderEvents>()
val eventSink = EventsRecorder<ChooseAccountProviderEvent>()
setChooseAccountProviderView(
state = aChooseAccountProviderState(
loginModeState = aLoginModeState(loginMode = AsyncData.Failure(AN_EXCEPTION)),
@@ -75,7 +75,7 @@ class ChooseAccountProviderViewTest : RobolectricTest() {
),
)
clickOn(CommonStrings.action_ok)
eventSink.assertSingle(ChooseAccountProviderEvents.ClearError)
eventSink.assertSingle(ChooseAccountProviderEvent.ClearError)
}
private fun AndroidComposeUiTest<ComponentActivity>.setChooseAccountProviderView(