mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-02 03:06:14 +00:00
OnBoardingEvents -> OnBoardingEvent
This commit is contained in:
+4
-4
@@ -8,11 +8,11 @@
|
||||
|
||||
package io.element.android.features.login.impl.screens.onboarding
|
||||
|
||||
sealed interface OnBoardingEvents {
|
||||
sealed interface OnBoardingEvent {
|
||||
data class OnSignIn(
|
||||
val defaultAccountProvider: String
|
||||
) : OnBoardingEvents
|
||||
) : OnBoardingEvent
|
||||
|
||||
data object OnVersionClick : OnBoardingEvents
|
||||
data object ClearError : OnBoardingEvents
|
||||
data object OnVersionClick : OnBoardingEvent
|
||||
data object ClearError : OnBoardingEvent
|
||||
}
|
||||
+4
-4
@@ -101,9 +101,9 @@ class OnBoardingPresenter(
|
||||
|
||||
val loginModeState = loginModePresenter.present()
|
||||
|
||||
fun handleEvent(event: OnBoardingEvents) {
|
||||
fun handleEvent(event: OnBoardingEvent) {
|
||||
when (event) {
|
||||
is OnBoardingEvents.OnSignIn -> localCoroutineScope.launch {
|
||||
is OnBoardingEvent.OnSignIn -> localCoroutineScope.launch {
|
||||
// Ensure that the current account provider is set
|
||||
accountProviderDataSource.setUrl(event.defaultAccountProvider)
|
||||
loginModeState.eventSink(
|
||||
@@ -115,8 +115,8 @@ class OnBoardingPresenter(
|
||||
)
|
||||
)
|
||||
}
|
||||
OnBoardingEvents.ClearError -> loginModeState.eventSink(LoginModeEvent.ClearError)
|
||||
OnBoardingEvents.OnVersionClick -> {
|
||||
OnBoardingEvent.ClearError -> loginModeState.eventSink(LoginModeEvent.ClearError)
|
||||
OnBoardingEvent.OnVersionClick -> {
|
||||
if (canReportBug) {
|
||||
if (multipleTapToUnlock.unlock(localCoroutineScope)) {
|
||||
showReportBug = true
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ data class OnBoardingState(
|
||||
@DrawableRes
|
||||
val onBoardingLogoResId: Int?,
|
||||
val loginModeState: LoginModeState,
|
||||
val eventSink: (OnBoardingEvents) -> Unit,
|
||||
val eventSink: (OnBoardingEvent) -> Unit,
|
||||
) {
|
||||
val submitEnabled: Boolean
|
||||
get() = defaultAccountProvider != null &&
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ fun anOnBoardingState(
|
||||
@DrawableRes
|
||||
customLogoResId: Int? = null,
|
||||
loginModeState: LoginModeState = aLoginModeState(),
|
||||
eventSink: (OnBoardingEvents) -> Unit = {},
|
||||
eventSink: (OnBoardingEvent) -> Unit = {},
|
||||
) = OnBoardingState(
|
||||
isAddingAccount = isAddingAccount,
|
||||
showBackButton = showBackButton,
|
||||
|
||||
+3
-3
@@ -78,7 +78,7 @@ fun OnBoardingView(
|
||||
LoginModeView(
|
||||
loginMode = state.loginModeState.loginMode,
|
||||
onClearError = {
|
||||
state.eventSink(OnBoardingEvents.ClearError)
|
||||
state.eventSink(OnBoardingEvent.ClearError)
|
||||
},
|
||||
onLearnMoreClick = onLearnMoreClick,
|
||||
onOAuthDetails = onOAuthDetails,
|
||||
@@ -306,7 +306,7 @@ private fun OnBoardingButtons(
|
||||
text = stringResource(id = R.string.screen_onboarding_sign_in_to, defaultAccountProvider),
|
||||
showProgress = isLoading,
|
||||
onClick = {
|
||||
state.eventSink(OnBoardingEvents.OnSignIn(defaultAccountProvider))
|
||||
state.eventSink(OnBoardingEvent.OnSignIn(defaultAccountProvider))
|
||||
},
|
||||
enabled = state.submitEnabled || isLoading,
|
||||
modifier = Modifier
|
||||
@@ -336,7 +336,7 @@ private fun OnBoardingButtons(
|
||||
Text(
|
||||
modifier = Modifier
|
||||
.clickable(role = Role.Button) {
|
||||
state.eventSink(OnBoardingEvents.OnVersionClick)
|
||||
state.eventSink(OnBoardingEvent.OnVersionClick)
|
||||
}
|
||||
.padding(16.dp),
|
||||
text = stringResource(id = R.string.screen_onboarding_app_version, state.version),
|
||||
|
||||
+4
-4
@@ -153,7 +153,7 @@ class OnBoardingPresenterTest {
|
||||
awaitItem().also { state ->
|
||||
assertThat(state.canReportBug).isFalse()
|
||||
repeat(7) {
|
||||
state.eventSink(OnBoardingEvents.OnVersionClick)
|
||||
state.eventSink(OnBoardingEvent.OnVersionClick)
|
||||
}
|
||||
}
|
||||
expectNoEvents()
|
||||
@@ -168,7 +168,7 @@ class OnBoardingPresenterTest {
|
||||
awaitItem().also { state ->
|
||||
assertThat(state.canReportBug).isFalse()
|
||||
repeat(7) {
|
||||
state.eventSink(OnBoardingEvents.OnVersionClick)
|
||||
state.eventSink(OnBoardingEvent.OnVersionClick)
|
||||
}
|
||||
}
|
||||
assertThat(awaitItem().canReportBug).isTrue()
|
||||
@@ -272,7 +272,7 @@ class OnBoardingPresenterTest {
|
||||
awaitItem().also {
|
||||
assertThat(it.defaultAccountProvider).isEqualTo(A_HOMESERVER_URL)
|
||||
assertThat(accountProviderDataSource.flow.first().url).isEqualTo(AuthenticationConfig.MATRIX_ORG_URL)
|
||||
it.eventSink(OnBoardingEvents.OnSignIn(A_HOMESERVER_URL_2))
|
||||
it.eventSink(OnBoardingEvent.OnSignIn(A_HOMESERVER_URL_2))
|
||||
skipItems(1) // Loading
|
||||
// Account data source has been updated
|
||||
assertThat(accountProviderDataSource.flow.first().url).isEqualTo(A_HOMESERVER_URL_2)
|
||||
@@ -281,7 +281,7 @@ class OnBoardingPresenterTest {
|
||||
assertThat(submittedState.loginModeState.loginMode).isInstanceOf(AsyncData.Failure::class.java)
|
||||
|
||||
// Assert the error is then cleared
|
||||
submittedState.eventSink(OnBoardingEvents.ClearError)
|
||||
submittedState.eventSink(OnBoardingEvent.ClearError)
|
||||
val clearedState = awaitItem()
|
||||
assertThat(clearedState.loginModeState.loginMode).isEqualTo(AsyncData.Uninitialized)
|
||||
}
|
||||
|
||||
+16
-16
@@ -39,7 +39,7 @@ import org.junit.Test
|
||||
class OnboardingViewTest : RobolectricTestParameter() {
|
||||
@Test
|
||||
fun `when can create account - clicking on create account calls the expected callback`() = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>(expectEvents = false)
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>(expectEvents = false)
|
||||
ensureCalledOnce { callback ->
|
||||
setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
@@ -58,7 +58,7 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
|
||||
@Test
|
||||
fun `when can go back - clicking on back calls the expected callback`() = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>(expectEvents = false)
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>(expectEvents = false)
|
||||
ensureCalledOnce { callback ->
|
||||
setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
@@ -73,7 +73,7 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
|
||||
@Test
|
||||
fun `when can login with QR code - clicking on sign in with QR code calls the expected callback`() = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>(expectEvents = false)
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>(expectEvents = false)
|
||||
ensureCalledOnce { callback ->
|
||||
setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
@@ -93,7 +93,7 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
"cannot search account provider" to true,
|
||||
)
|
||||
) = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>(expectEvents = false)
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>(expectEvents = false)
|
||||
ensureCalledOnceWithParam(mustChooseAccountProvider) { callback ->
|
||||
setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
@@ -114,7 +114,7 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
"cannot search account provider" to true,
|
||||
)
|
||||
) = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>(expectEvents = false)
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>(expectEvents = false)
|
||||
ensureCalledOnceWithParam(mustChooseAccountProvider) { callback ->
|
||||
setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
@@ -131,7 +131,7 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
|
||||
@Test
|
||||
fun `when sign in to pre defined account provider - clicking on button emits the expected event`() = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>()
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>()
|
||||
setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
defaultAccountProvider = "element.io",
|
||||
@@ -140,12 +140,12 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
)
|
||||
val buttonText = activity!!.getString(R.string.screen_onboarding_sign_in_to, "element.io")
|
||||
onNodeWithText(buttonText).performClick()
|
||||
eventSink.assertSingle(OnBoardingEvents.OnSignIn("element.io"))
|
||||
eventSink.assertSingle(OnBoardingEvent.OnSignIn("element.io"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when error is displayed - closing the dialog emits the expected event`() = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>()
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>()
|
||||
setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
defaultAccountProvider = "element.io",
|
||||
@@ -154,12 +154,12 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
),
|
||||
)
|
||||
clickOn(CommonStrings.action_ok)
|
||||
eventSink.assertSingle(OnBoardingEvents.ClearError)
|
||||
eventSink.assertSingle(OnBoardingEvent.ClearError)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `clicking on report a problem calls the sign in callback`() = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>(expectEvents = false)
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>(expectEvents = false)
|
||||
ensureCalledOnce { callback ->
|
||||
setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
@@ -176,7 +176,7 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
|
||||
@Test
|
||||
fun `clicking on settings calls the developer settings callback`() = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>(expectEvents = false)
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>(expectEvents = false)
|
||||
ensureCalledOnce { callback ->
|
||||
setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
@@ -192,7 +192,7 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
|
||||
@Test
|
||||
fun `cannot report a problem when the feature is disabled`() = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>(expectEvents = false)
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>(expectEvents = false)
|
||||
setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
canReportBug = false,
|
||||
@@ -205,7 +205,7 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
|
||||
@Test
|
||||
fun `when success PasswordLogin - the expected callback is invoked and the event is received`() = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>()
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>()
|
||||
ensureCalledOnce { callback ->
|
||||
setOnboardingView(
|
||||
state = anOnBoardingState(
|
||||
@@ -215,12 +215,12 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
onNeedLoginPassword = callback,
|
||||
)
|
||||
}
|
||||
eventSink.assertSingle(OnBoardingEvents.ClearError)
|
||||
eventSink.assertSingle(OnBoardingEvent.ClearError)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when success Oidc - the expected callback is invoked and the event is received`() = runAndroidComposeUiTest {
|
||||
val eventSink = EventsRecorder<OnBoardingEvents>()
|
||||
val eventSink = EventsRecorder<OnBoardingEvent>()
|
||||
val oAuthDetails = OAuthDetails("aUrl")
|
||||
ensureCalledOnceWithParam(oAuthDetails) { callback ->
|
||||
setOnboardingView(
|
||||
@@ -231,7 +231,7 @@ class OnboardingViewTest : RobolectricTestParameter() {
|
||||
onOAuthDetails = callback,
|
||||
)
|
||||
}
|
||||
eventSink.assertSingle(OnBoardingEvents.ClearError)
|
||||
eventSink.assertSingle(OnBoardingEvent.ClearError)
|
||||
}
|
||||
|
||||
private fun AndroidComposeUiTest<ComponentActivity>.setOnboardingView(
|
||||
|
||||
Reference in New Issue
Block a user