From e1e2718c54b220fd1e3065d2e979614f0911b69f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 25 Aug 2026 09:52:00 +0200 Subject: [PATCH] `AccountDeactivationEvents` -> `AccountDeactivationEvent` --- ...nEvents.kt => AccountDeactivationEvent.kt} | 10 +++---- .../impl/AccountDeactivationPresenter.kt | 10 +++---- .../logout/impl/AccountDeactivationState.kt | 2 +- .../AccountDeactivationStatePreviewParam.kt | 2 +- .../logout/impl/AccountDeactivationView.kt | 14 ++++----- .../impl/AccountDeactivationPresenterTest.kt | 30 +++++++++---------- .../impl/AccountDeactivationViewTest.kt | 26 ++++++++-------- 7 files changed, 47 insertions(+), 47 deletions(-) rename features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/{AccountDeactivationEvents.kt => AccountDeactivationEvent.kt} (76%) diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationEvents.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationEvent.kt similarity index 76% rename from features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationEvents.kt rename to features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationEvent.kt index 5ceb97b232..cc1f5093fd 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationEvents.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationEvent.kt @@ -8,9 +8,9 @@ package io.element.android.features.logout.impl -sealed interface AccountDeactivationEvents { - data class SetEraseData(val eraseData: Boolean) : AccountDeactivationEvents - data class SetPassword(val password: String) : AccountDeactivationEvents - data class DeactivateAccount(val isRetry: Boolean) : AccountDeactivationEvents - data object CloseDialogs : AccountDeactivationEvents +sealed interface AccountDeactivationEvent { + data class SetEraseData(val eraseData: Boolean) : AccountDeactivationEvent + data class SetPassword(val password: String) : AccountDeactivationEvent + data class DeactivateAccount(val isRetry: Boolean) : AccountDeactivationEvent + data object CloseDialogs : AccountDeactivationEvent } diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt index eaeacd022c..11e658aa7f 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt @@ -34,19 +34,19 @@ class AccountDeactivationPresenter( val formState = remember { mutableStateOf(DeactivateFormState.Default) } - fun handleEvent(event: AccountDeactivationEvents) { + fun handleEvent(event: AccountDeactivationEvent) { when (event) { - is AccountDeactivationEvents.SetEraseData -> { + is AccountDeactivationEvent.SetEraseData -> { updateFormState(formState) { copy(eraseData = event.eraseData) } } - is AccountDeactivationEvents.SetPassword -> { + is AccountDeactivationEvent.SetPassword -> { updateFormState(formState) { copy(password = event.password) } } - is AccountDeactivationEvents.DeactivateAccount -> + is AccountDeactivationEvent.DeactivateAccount -> if (action.value.isConfirming() || event.isRetry) { localCoroutineScope.deactivateAccount( formState = formState.value, @@ -55,7 +55,7 @@ class AccountDeactivationPresenter( } else { action.value = AsyncAction.ConfirmingNoParams } - AccountDeactivationEvents.CloseDialogs -> { + AccountDeactivationEvent.CloseDialogs -> { action.value = AsyncAction.Uninitialized } } diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationState.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationState.kt index ca9751efcc..ebf9fec3c4 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationState.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationState.kt @@ -15,7 +15,7 @@ import kotlinx.parcelize.Parcelize data class AccountDeactivationState( val deactivateFormState: DeactivateFormState, val accountDeactivationAction: AsyncAction, - val eventSink: (AccountDeactivationEvents) -> Unit, + val eventSink: (AccountDeactivationEvent) -> Unit, ) { val submitEnabled: Boolean get() = accountDeactivationAction is AsyncAction.Uninitialized && diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationStatePreviewParam.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationStatePreviewParam.kt index bd86af9572..b5ab948b05 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationStatePreviewParam.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationStatePreviewParam.kt @@ -45,7 +45,7 @@ internal fun aDeactivateFormState( internal fun anAccountDeactivationState( deactivateFormState: DeactivateFormState = aDeactivateFormState(), accountDeactivationAction: AsyncAction = AsyncAction.Uninitialized, - eventSink: (AccountDeactivationEvents) -> Unit = {}, + eventSink: (AccountDeactivationEvent) -> Unit = {}, ) = AccountDeactivationState( deactivateFormState = deactivateFormState, accountDeactivationAction = accountDeactivationAction, diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt index eb6b401667..d86eae41ff 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationView.kt @@ -102,14 +102,14 @@ fun AccountDeactivationView( Content( state = state, onSubmitClick = { - eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false)) + eventSink(AccountDeactivationEvent.DeactivateAccount(isRetry = false)) } ) Spacer(modifier = Modifier.height(32.dp)) Buttons( state = state, onSubmitClick = { - eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false)) + eventSink(AccountDeactivationEvent.DeactivateAccount(isRetry = false)) } ) } @@ -117,13 +117,13 @@ fun AccountDeactivationView( AccountDeactivationActionDialog( state.accountDeactivationAction, onConfirmClick = { - eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false)) + eventSink(AccountDeactivationEvent.DeactivateAccount(isRetry = false)) }, onRetryClick = { - eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = true)) + eventSink(AccountDeactivationEvent.DeactivateAccount(isRetry = true)) }, onDismissDialog = { - eventSink(AccountDeactivationEvents.CloseDialogs) + eventSink(AccountDeactivationEvent.CloseDialogs) }, ) } @@ -239,7 +239,7 @@ private fun Content( headline = stringResource(R.string.screen_deactivate_account_delete_all_messages), value = eraseData, onChange = { - eventSink(AccountDeactivationEvents.SetEraseData(it)) + eventSink(AccountDeactivationEvent.SetEraseData(it)) }, enabled = !isLoading, ) @@ -275,7 +275,7 @@ private fun Content( onValueChange = { val sanitized = it.sanitize() passwordFieldState = sanitized - eventSink(AccountDeactivationEvents.SetPassword(sanitized)) + eventSink(AccountDeactivationEvent.SetPassword(sanitized)) }, placeholder = stringResource(CommonStrings.common_password), visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(), diff --git a/features/deactivation/impl/src/test/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenterTest.kt b/features/deactivation/impl/src/test/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenterTest.kt index ee7f8e470d..d6402c2f59 100644 --- a/features/deactivation/impl/src/test/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenterTest.kt +++ b/features/deactivation/impl/src/test/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenterTest.kt @@ -47,11 +47,11 @@ class AccountDeactivationPresenterTest { }.test { val initialState = awaitItem() assertThat(initialState.deactivateFormState).isEqualTo(DeactivateFormState.Default) - initialState.eventSink(AccountDeactivationEvents.SetEraseData(true)) + initialState.eventSink(AccountDeactivationEvent.SetEraseData(true)) val updatedState = awaitItem() assertThat(updatedState.deactivateFormState).isEqualTo(DeactivateFormState.Default.copy(eraseData = true)) assertThat(updatedState.submitEnabled).isFalse() - updatedState.eventSink(AccountDeactivationEvents.SetPassword("password")) + updatedState.eventSink(AccountDeactivationEvent.SetPassword("password")) val updatedState2 = awaitItem() assertThat(updatedState2.deactivateFormState).isEqualTo(DeactivateFormState(password = "password", eraseData = true)) assertThat(updatedState2.submitEnabled).isTrue() @@ -71,12 +71,12 @@ class AccountDeactivationPresenterTest { presenter.present() }.test { val initialState = awaitItem() - initialState.eventSink(AccountDeactivationEvents.SetPassword("password")) + initialState.eventSink(AccountDeactivationEvent.SetPassword("password")) skipItems(1) - initialState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false)) + initialState.eventSink(AccountDeactivationEvent.DeactivateAccount(isRetry = false)) val updatedState = awaitItem() assertThat(updatedState.accountDeactivationAction).isEqualTo(AsyncAction.ConfirmingNoParams) - updatedState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false)) + updatedState.eventSink(AccountDeactivationEvent.DeactivateAccount(isRetry = false)) val updatedState2 = awaitItem() assertThat(updatedState2.accountDeactivationAction).isEqualTo(AsyncAction.Loading) val finalState = awaitItem() @@ -98,20 +98,20 @@ class AccountDeactivationPresenterTest { presenter.present() }.test { val initialState = awaitItem() - initialState.eventSink(AccountDeactivationEvents.SetPassword("password")) - initialState.eventSink(AccountDeactivationEvents.SetEraseData(true)) + initialState.eventSink(AccountDeactivationEvent.SetPassword("password")) + initialState.eventSink(AccountDeactivationEvent.SetEraseData(true)) skipItems(2) - initialState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false)) + initialState.eventSink(AccountDeactivationEvent.DeactivateAccount(isRetry = false)) val updatedState = awaitItem() assertThat(updatedState.accountDeactivationAction).isEqualTo(AsyncAction.ConfirmingNoParams) - updatedState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false)) + updatedState.eventSink(AccountDeactivationEvent.DeactivateAccount(isRetry = false)) val updatedState2 = awaitItem() assertThat(updatedState2.accountDeactivationAction).isEqualTo(AsyncAction.Loading) val finalState = awaitItem() assertThat(finalState.accountDeactivationAction).isEqualTo(AsyncAction.Failure(AN_EXCEPTION)) recorder.assertions().isCalledOnce().with(value("password"), value(true)) // Retry - finalState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = true)) + finalState.eventSink(AccountDeactivationEvent.DeactivateAccount(isRetry = true)) val finalState2 = awaitItem() assertThat(finalState2.accountDeactivationAction).isEqualTo(AsyncAction.Loading) assertThat(awaitItem().accountDeactivationAction).isEqualTo(AsyncAction.Failure(AN_EXCEPTION)) @@ -131,20 +131,20 @@ class AccountDeactivationPresenterTest { presenter.present() }.test { val initialState = awaitItem() - initialState.eventSink(AccountDeactivationEvents.SetPassword("password")) - initialState.eventSink(AccountDeactivationEvents.SetEraseData(true)) + initialState.eventSink(AccountDeactivationEvent.SetPassword("password")) + initialState.eventSink(AccountDeactivationEvent.SetEraseData(true)) skipItems(2) - initialState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false)) + initialState.eventSink(AccountDeactivationEvent.DeactivateAccount(isRetry = false)) val updatedState = awaitItem() assertThat(updatedState.accountDeactivationAction).isEqualTo(AsyncAction.ConfirmingNoParams) - updatedState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false)) + updatedState.eventSink(AccountDeactivationEvent.DeactivateAccount(isRetry = false)) val updatedState2 = awaitItem() assertThat(updatedState2.accountDeactivationAction).isEqualTo(AsyncAction.Loading) val finalState = awaitItem() assertThat(finalState.accountDeactivationAction).isEqualTo(AsyncAction.Failure(AN_EXCEPTION)) recorder.assertions().isCalledOnce().with(value("password"), value(true)) // Cancel - finalState.eventSink(AccountDeactivationEvents.CloseDialogs) + finalState.eventSink(AccountDeactivationEvent.CloseDialogs) val finalState2 = awaitItem() assertThat(finalState2.accountDeactivationAction).isEqualTo(AsyncAction.Uninitialized) } diff --git a/features/deactivation/impl/src/test/kotlin/io/element/android/features/logout/impl/AccountDeactivationViewTest.kt b/features/deactivation/impl/src/test/kotlin/io/element/android/features/logout/impl/AccountDeactivationViewTest.kt index caf4c0384f..5c650fea9d 100644 --- a/features/deactivation/impl/src/test/kotlin/io/element/android/features/logout/impl/AccountDeactivationViewTest.kt +++ b/features/deactivation/impl/src/test/kotlin/io/element/android/features/logout/impl/AccountDeactivationViewTest.kt @@ -35,7 +35,7 @@ import org.robolectric.annotation.Config class AccountDeactivationViewTest : RobolectricTest() { @Test fun `clicking on back invokes the expected callback`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder(expectEvents = false) + val eventsRecorder = EventsRecorder(expectEvents = false) ensureCalledOnce { setAccountDeactivationView( state = anAccountDeactivationState(eventSink = eventsRecorder), @@ -48,7 +48,7 @@ class AccountDeactivationViewTest : RobolectricTest() { @Config(qualifiers = "h1024dp") @Test fun `clicking on Deactivate emits the expected Event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() setAccountDeactivationView( state = anAccountDeactivationState( deactivateFormState = aDeactivateFormState( @@ -58,12 +58,12 @@ class AccountDeactivationViewTest : RobolectricTest() { ), ) clickOn(CommonStrings.action_delete) - eventsRecorder.assertSingle(AccountDeactivationEvents.DeactivateAccount(false)) + eventsRecorder.assertSingle(AccountDeactivationEvent.DeactivateAccount(false)) } @Test fun `clicking on Deactivate on the confirmation dialog emits the expected Event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() setAccountDeactivationView( state = anAccountDeactivationState( deactivateFormState = aDeactivateFormState( @@ -74,12 +74,12 @@ class AccountDeactivationViewTest : RobolectricTest() { ), ) pressTag(TestTags.dialogPositive.value) - eventsRecorder.assertSingle(AccountDeactivationEvents.DeactivateAccount(false)) + eventsRecorder.assertSingle(AccountDeactivationEvent.DeactivateAccount(false)) } @Test fun `clicking on retry on the confirmation dialog emits the expected Event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() setAccountDeactivationView( state = anAccountDeactivationState( deactivateFormState = aDeactivateFormState( @@ -90,24 +90,24 @@ class AccountDeactivationViewTest : RobolectricTest() { ), ) clickOn(CommonStrings.action_retry) - eventsRecorder.assertSingle(AccountDeactivationEvents.DeactivateAccount(true)) + eventsRecorder.assertSingle(AccountDeactivationEvent.DeactivateAccount(true)) } @Test fun `switching on the erase all switch emits the expected Event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() setAccountDeactivationView( state = anAccountDeactivationState( eventSink = eventsRecorder, ), ) clickOn(R.string.screen_deactivate_account_delete_all_messages) - eventsRecorder.assertSingle(AccountDeactivationEvents.SetEraseData(true)) + eventsRecorder.assertSingle(AccountDeactivationEvent.SetEraseData(true)) } @Test fun `switching off the erase all switch emits the expected Event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() setAccountDeactivationView( state = anAccountDeactivationState( deactivateFormState = aDeactivateFormState( @@ -117,13 +117,13 @@ class AccountDeactivationViewTest : RobolectricTest() { ), ) clickOn(R.string.screen_deactivate_account_delete_all_messages) - eventsRecorder.assertSingle(AccountDeactivationEvents.SetEraseData(false)) + eventsRecorder.assertSingle(AccountDeactivationEvent.SetEraseData(false)) } @Config(qualifiers = "h1024dp") @Test fun `typing text in the password field emits the expected Event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() setAccountDeactivationView( state = anAccountDeactivationState( deactivateFormState = aDeactivateFormState( @@ -133,7 +133,7 @@ class AccountDeactivationViewTest : RobolectricTest() { ), ) onNodeWithTag(TestTags.loginPassword.value).performTextInput("A") - eventsRecorder.assertSingle(AccountDeactivationEvents.SetPassword("A$A_PASSWORD")) + eventsRecorder.assertSingle(AccountDeactivationEvent.SetPassword("A$A_PASSWORD")) } }