diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListEvents.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListEvent.kt similarity index 61% rename from features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListEvents.kt rename to features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListEvent.kt index f1350b1669..6b9a6ac1a8 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListEvents.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListEvent.kt @@ -10,12 +10,12 @@ package io.element.android.features.knockrequests.impl.list import io.element.android.features.knockrequests.impl.data.KnockRequestPresentable -sealed interface KnockRequestsListEvents { - data class Accept(val knockRequest: KnockRequestPresentable) : KnockRequestsListEvents - data class Decline(val knockRequest: KnockRequestPresentable) : KnockRequestsListEvents - data class DeclineAndBan(val knockRequest: KnockRequestPresentable) : KnockRequestsListEvents - data object AcceptAll : KnockRequestsListEvents - data object ResetCurrentAction : KnockRequestsListEvents - data object RetryCurrentAction : KnockRequestsListEvents - data object ConfirmCurrentAction : KnockRequestsListEvents +sealed interface KnockRequestsListEvent { + data class Accept(val knockRequest: KnockRequestPresentable) : KnockRequestsListEvent + data class Decline(val knockRequest: KnockRequestPresentable) : KnockRequestsListEvent + data class DeclineAndBan(val knockRequest: KnockRequestPresentable) : KnockRequestsListEvent + data object AcceptAll : KnockRequestsListEvent + data object ResetCurrentAction : KnockRequestsListEvent + data object RetryCurrentAction : KnockRequestsListEvent + data object ConfirmCurrentAction : KnockRequestsListEvent } diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt index a56dc40731..76b562d8b3 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt @@ -39,28 +39,28 @@ class KnockRequestsListPresenter( val coroutineScope = rememberCoroutineScope() - fun handleEvent(event: KnockRequestsListEvents) { + fun handleEvent(event: KnockRequestsListEvent) { when (event) { - KnockRequestsListEvents.AcceptAll -> { + KnockRequestsListEvent.AcceptAll -> { currentAction = KnockRequestsAction.AcceptAll } - is KnockRequestsListEvents.Accept -> { + is KnockRequestsListEvent.Accept -> { currentAction = KnockRequestsAction.Accept(event.knockRequest) } - is KnockRequestsListEvents.Decline -> { + is KnockRequestsListEvent.Decline -> { currentAction = KnockRequestsAction.Decline(event.knockRequest) } - is KnockRequestsListEvents.DeclineAndBan -> { + is KnockRequestsListEvent.DeclineAndBan -> { currentAction = KnockRequestsAction.DeclineAndBan(event.knockRequest) } - KnockRequestsListEvents.ResetCurrentAction -> { + KnockRequestsListEvent.ResetCurrentAction -> { asyncAction.value = AsyncAction.Uninitialized currentAction = KnockRequestsAction.None } - KnockRequestsListEvents.RetryCurrentAction -> { + KnockRequestsListEvent.RetryCurrentAction -> { coroutineScope.executeAction(currentAction, asyncAction, isActionConfirmed = true) } - KnockRequestsListEvents.ConfirmCurrentAction -> { + KnockRequestsListEvent.ConfirmCurrentAction -> { coroutineScope.executeAction(currentAction, asyncAction, isActionConfirmed = true) } } diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListState.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListState.kt index ae770a297d..0a0e576eae 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListState.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListState.kt @@ -20,7 +20,7 @@ data class KnockRequestsListState( val currentAction: KnockRequestsAction, val asyncAction: AsyncAction, val permissions: KnockRequestPermissions, - val eventSink: (KnockRequestsListEvents) -> Unit, + val eventSink: (KnockRequestsListEvent) -> Unit, ) { val canAcceptAll = permissions.canAccept && knockRequests is AsyncData.Success && knockRequests.data.size > 1 } diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListStatePreviewParam.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListStatePreviewParam.kt index b51223a5e9..691d874af6 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListStatePreviewParam.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListStatePreviewParam.kt @@ -140,7 +140,7 @@ fun aKnockRequestsListState( canDecline = true, canBan = true, ), - eventSink: (KnockRequestsListEvents) -> Unit = {}, + eventSink: (KnockRequestsListEvent) -> Unit = {}, ) = KnockRequestsListState( knockRequests = knockRequests, currentAction = currentAction, diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt index d750927f74..52b11bc8c4 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListView.kt @@ -108,15 +108,15 @@ private fun KnockRequestsListContent( modifier: Modifier = Modifier, ) { fun onAcceptClick(knockRequest: KnockRequestPresentable) { - state.eventSink(KnockRequestsListEvents.Accept(knockRequest)) + state.eventSink(KnockRequestsListEvent.Accept(knockRequest)) } fun onDeclineClick(knockRequest: KnockRequestPresentable) { - state.eventSink(KnockRequestsListEvents.Decline(knockRequest)) + state.eventSink(KnockRequestsListEvent.Decline(knockRequest)) } fun onBanClick(knockRequest: KnockRequestPresentable) { - state.eventSink(KnockRequestsListEvents.DeclineAndBan(knockRequest)) + state.eventSink(KnockRequestsListEvent.DeclineAndBan(knockRequest)) } var bottomPaddingInPixels by remember { mutableIntStateOf(0) } @@ -160,19 +160,19 @@ private fun KnockRequestsListContent( currentAction = state.currentAction, asyncAction = state.asyncAction, onConfirm = { - state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction) + state.eventSink(KnockRequestsListEvent.ConfirmCurrentAction) }, onRetry = { - state.eventSink(KnockRequestsListEvents.RetryCurrentAction) + state.eventSink(KnockRequestsListEvent.RetryCurrentAction) }, onDismiss = { - state.eventSink(KnockRequestsListEvents.ResetCurrentAction) + state.eventSink(KnockRequestsListEvent.ResetCurrentAction) }, ) if (state.canAcceptAll) { KnockRequestsAcceptAll( onClick = { - state.eventSink(KnockRequestsListEvents.AcceptAll) + state.eventSink(KnockRequestsListEvent.AcceptAll) }, onHeightChange = { height -> bottomPaddingInPixels = height diff --git a/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenterTest.kt b/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenterTest.kt index 209e67cadf..dc04889d32 100644 --- a/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenterTest.kt +++ b/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenterTest.kt @@ -65,7 +65,7 @@ class KnockRequestsListPresenterTest { skipItems(2) awaitItem().also { state -> val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!! - state.eventSink(KnockRequestsListEvents.Accept(knockRequestPresentable)) + state.eventSink(KnockRequestsListEvent.Accept(knockRequestPresentable)) } skipItems(1) awaitItem().also { state -> @@ -75,7 +75,7 @@ class KnockRequestsListPresenterTest { } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Success::class.java) - state.eventSink(KnockRequestsListEvents.ResetCurrentAction) + state.eventSink(KnockRequestsListEvent.ResetCurrentAction) } skipItems(2) awaitItem().also { state -> @@ -99,7 +99,7 @@ class KnockRequestsListPresenterTest { skipItems(2) awaitItem().also { state -> val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!! - state.eventSink(KnockRequestsListEvents.Accept(knockRequestPresentable)) + state.eventSink(KnockRequestsListEvent.Accept(knockRequestPresentable)) } skipItems(1) awaitItem().also { state -> @@ -109,14 +109,14 @@ class KnockRequestsListPresenterTest { } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Failure::class.java) - state.eventSink(KnockRequestsListEvents.RetryCurrentAction) + state.eventSink(KnockRequestsListEvent.RetryCurrentAction) } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Loading::class.java) } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Failure::class.java) - state.eventSink(KnockRequestsListEvents.ResetCurrentAction) + state.eventSink(KnockRequestsListEvent.ResetCurrentAction) } skipItems(1) awaitItem().also { state -> @@ -140,21 +140,21 @@ class KnockRequestsListPresenterTest { skipItems(2) awaitItem().also { state -> val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!! - state.eventSink(KnockRequestsListEvents.Decline(knockRequestPresentable)) + state.eventSink(KnockRequestsListEvent.Decline(knockRequestPresentable)) } skipItems(1) awaitItem().also { state -> val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!! assertThat(state.currentAction).isEqualTo(KnockRequestsAction.Decline(knockRequestPresentable)) assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java) - state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction) + state.eventSink(KnockRequestsListEvent.ConfirmCurrentAction) } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Loading::class.java) } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Success::class.java) - state.eventSink(KnockRequestsListEvents.ResetCurrentAction) + state.eventSink(KnockRequestsListEvent.ResetCurrentAction) } skipItems(2) awaitItem().also { state -> @@ -178,21 +178,21 @@ class KnockRequestsListPresenterTest { skipItems(2) awaitItem().also { state -> val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!! - state.eventSink(KnockRequestsListEvents.DeclineAndBan(knockRequestPresentable)) + state.eventSink(KnockRequestsListEvent.DeclineAndBan(knockRequestPresentable)) } skipItems(1) awaitItem().also { state -> val knockRequestPresentable = state.knockRequests.dataOrNull()?.first()!! assertThat(state.currentAction).isEqualTo(KnockRequestsAction.DeclineAndBan(knockRequestPresentable)) assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java) - state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction) + state.eventSink(KnockRequestsListEvent.ConfirmCurrentAction) } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Loading::class.java) } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Success::class.java) - state.eventSink(KnockRequestsListEvents.ResetCurrentAction) + state.eventSink(KnockRequestsListEvent.ResetCurrentAction) } skipItems(2) awaitItem().also { state -> @@ -220,20 +220,20 @@ class KnockRequestsListPresenterTest { skipItems(2) awaitItem().also { state -> assertThat(state.canAcceptAll).isTrue() - state.eventSink(KnockRequestsListEvents.AcceptAll) + state.eventSink(KnockRequestsListEvent.AcceptAll) } skipItems(1) awaitItem().also { state -> assertThat(state.currentAction).isEqualTo(KnockRequestsAction.AcceptAll) assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java) - state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction) + state.eventSink(KnockRequestsListEvent.ConfirmCurrentAction) } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Loading::class.java) } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Success::class.java) - state.eventSink(KnockRequestsListEvents.ResetCurrentAction) + state.eventSink(KnockRequestsListEvent.ResetCurrentAction) } skipItems(2) awaitItem().also { state -> @@ -262,20 +262,20 @@ class KnockRequestsListPresenterTest { skipItems(2) awaitItem().also { state -> assertThat(state.canAcceptAll).isTrue() - state.eventSink(KnockRequestsListEvents.AcceptAll) + state.eventSink(KnockRequestsListEvent.AcceptAll) } skipItems(1) awaitItem().also { state -> assertThat(state.currentAction).isEqualTo(KnockRequestsAction.AcceptAll) assertThat(state.asyncAction).isInstanceOf(AsyncAction.ConfirmingNoParams::class.java) - state.eventSink(KnockRequestsListEvents.ConfirmCurrentAction) + state.eventSink(KnockRequestsListEvent.ConfirmCurrentAction) } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Loading::class.java) } awaitItem().also { state -> assertThat(state.asyncAction).isInstanceOf(AsyncAction.Failure::class.java) - state.eventSink(KnockRequestsListEvents.ResetCurrentAction) + state.eventSink(KnockRequestsListEvent.ResetCurrentAction) } skipItems(2) awaitItem().also { state -> diff --git a/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListViewTest.kt b/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListViewTest.kt index 1fbcb67b21..c1caaddb1e 100644 --- a/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListViewTest.kt +++ b/features/knockrequests/impl/src/test/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListViewTest.kt @@ -31,7 +31,7 @@ import org.junit.Test class KnockRequestsListViewTest : RobolectricTest() { @Test fun `clicking on back invoke the expected callback`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder(expectEvents = false) + val eventsRecorder = EventsRecorder(expectEvents = false) ensureCalledOnce { setKnockRequestsListView( aKnockRequestsListState( @@ -45,7 +45,7 @@ class KnockRequestsListViewTest : RobolectricTest() { @Test fun `clicking on accept emit the expected event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() val knockRequest = aKnockRequestPresentable() setKnockRequestsListView( aKnockRequestsListState( @@ -54,12 +54,12 @@ class KnockRequestsListViewTest : RobolectricTest() { ), ) clickOn(CommonStrings.action_accept) - eventsRecorder.assertSingle(KnockRequestsListEvents.Accept(knockRequest)) + eventsRecorder.assertSingle(KnockRequestsListEvent.Accept(knockRequest)) } @Test fun `clicking on decline emit the expected event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() val knockRequest = aKnockRequestPresentable() setKnockRequestsListView( aKnockRequestsListState( @@ -68,12 +68,12 @@ class KnockRequestsListViewTest : RobolectricTest() { ), ) clickOn(CommonStrings.action_decline) - eventsRecorder.assertSingle(KnockRequestsListEvents.Decline(knockRequest)) + eventsRecorder.assertSingle(KnockRequestsListEvent.Decline(knockRequest)) } @Test fun `clicking on decline and ban emit the expected event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() val knockRequest = aKnockRequestPresentable() setKnockRequestsListView( aKnockRequestsListState( @@ -82,12 +82,12 @@ class KnockRequestsListViewTest : RobolectricTest() { ), ) clickOn(R.string.screen_knock_requests_list_decline_and_ban_action_title) - eventsRecorder.assertSingle(KnockRequestsListEvents.DeclineAndBan(knockRequest)) + eventsRecorder.assertSingle(KnockRequestsListEvent.DeclineAndBan(knockRequest)) } @Test fun `clicking on accept all emit the expected event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() val knockRequests = persistentListOf(aKnockRequestPresentable(), aKnockRequestPresentable()) setKnockRequestsListView( aKnockRequestsListState( @@ -96,12 +96,12 @@ class KnockRequestsListViewTest : RobolectricTest() { ), ) clickOn(R.string.screen_knock_requests_list_accept_all_button_title) - eventsRecorder.assertSingle(KnockRequestsListEvents.AcceptAll) + eventsRecorder.assertSingle(KnockRequestsListEvent.AcceptAll) } @Test fun `retry on async view retry emit the expected event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() val knockRequests = persistentListOf(aKnockRequestPresentable(), aKnockRequestPresentable()) setKnockRequestsListView( aKnockRequestsListState( @@ -112,12 +112,12 @@ class KnockRequestsListViewTest : RobolectricTest() { ), ) clickOn(CommonStrings.action_retry) - eventsRecorder.assertSingle(KnockRequestsListEvents.RetryCurrentAction) + eventsRecorder.assertSingle(KnockRequestsListEvent.RetryCurrentAction) } @Test fun `canceling async view emit the expected event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() val knockRequests = persistentListOf(aKnockRequestPresentable(), aKnockRequestPresentable()) setKnockRequestsListView( aKnockRequestsListState( @@ -128,12 +128,12 @@ class KnockRequestsListViewTest : RobolectricTest() { ), ) clickOn(CommonStrings.action_cancel) - eventsRecorder.assertSingle(KnockRequestsListEvents.ResetCurrentAction) + eventsRecorder.assertSingle(KnockRequestsListEvent.ResetCurrentAction) } @Test fun `confirming async view emit the expected event`() = runAndroidComposeUiTest { - val eventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() val knockRequests = persistentListOf(aKnockRequestPresentable(), aKnockRequestPresentable()) setKnockRequestsListView( aKnockRequestsListState( @@ -144,7 +144,7 @@ class KnockRequestsListViewTest : RobolectricTest() { ), ) clickOn(R.string.screen_knock_requests_list_accept_all_alert_confirm_button_title) - eventsRecorder.assertSingle(KnockRequestsListEvents.ConfirmCurrentAction) + eventsRecorder.assertSingle(KnockRequestsListEvent.ConfirmCurrentAction) } }