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