mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-02 12:07:28 +00:00
SpaceEvents -> SpaceEvent
This commit is contained in:
+14
-14
@@ -11,21 +11,21 @@ package io.element.android.features.space.impl.root
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.spaces.SpaceRoom
|
||||
|
||||
sealed interface SpaceEvents {
|
||||
data object LoadMore : SpaceEvents
|
||||
data class Join(val spaceRoom: SpaceRoom) : SpaceEvents
|
||||
data object ClearFailures : SpaceEvents
|
||||
data class AcceptInvite(val spaceRoom: SpaceRoom) : SpaceEvents
|
||||
data class DeclineInvite(val spaceRoom: SpaceRoom) : SpaceEvents
|
||||
sealed interface SpaceEvent {
|
||||
data object LoadMore : SpaceEvent
|
||||
data class Join(val spaceRoom: SpaceRoom) : SpaceEvent
|
||||
data object ClearFailures : SpaceEvent
|
||||
data class AcceptInvite(val spaceRoom: SpaceRoom) : SpaceEvent
|
||||
data class DeclineInvite(val spaceRoom: SpaceRoom) : SpaceEvent
|
||||
|
||||
data class ShowTopicViewer(val topic: String) : SpaceEvents
|
||||
data object HideTopicViewer : SpaceEvents
|
||||
data class ShowTopicViewer(val topic: String) : SpaceEvent
|
||||
data object HideTopicViewer : SpaceEvent
|
||||
|
||||
// Manage mode events
|
||||
data object EnterManageMode : SpaceEvents
|
||||
data object ExitManageMode : SpaceEvents
|
||||
data class ToggleRoomSelection(val roomId: RoomId) : SpaceEvents
|
||||
data object ConfirmRoomRemoval : SpaceEvents
|
||||
data object RemoveSelectedRooms : SpaceEvents
|
||||
data object ClearRemoveAction : SpaceEvents
|
||||
data object EnterManageMode : SpaceEvent
|
||||
data object ExitManageMode : SpaceEvent
|
||||
data class ToggleRoomSelection(val roomId: RoomId) : SpaceEvent
|
||||
data object ConfirmRoomRemoval : SpaceEvent
|
||||
data object RemoveSelectedRooms : SpaceEvent
|
||||
data object ClearRemoveAction : SpaceEvent
|
||||
}
|
||||
+14
-14
@@ -150,51 +150,51 @@ class SpacePresenter(
|
||||
}
|
||||
}
|
||||
|
||||
fun handleEvent(event: SpaceEvents) {
|
||||
fun handleEvent(event: SpaceEvent) {
|
||||
when (event) {
|
||||
// SpaceRoomList is loaded automatically as backend is really slow. Event is kept for future.
|
||||
SpaceEvents.LoadMore -> Unit
|
||||
is SpaceEvents.Join -> {
|
||||
SpaceEvent.LoadMore -> Unit
|
||||
is SpaceEvent.Join -> {
|
||||
sessionCoroutineScope.joinRoom(event.spaceRoom, joinActions, setJoinActions)
|
||||
}
|
||||
SpaceEvents.ClearFailures -> {
|
||||
SpaceEvent.ClearFailures -> {
|
||||
val failedActions = joinActions
|
||||
.filterValues { it is AsyncAction.Failure }
|
||||
.mapValues { AsyncAction.Uninitialized }
|
||||
setJoinActions(joinActions + failedActions)
|
||||
}
|
||||
is SpaceEvents.AcceptInvite -> {
|
||||
is SpaceEvent.AcceptInvite -> {
|
||||
acceptDeclineInviteState.eventSink(
|
||||
AcceptDeclineInviteEvent.AcceptInvite(event.spaceRoom.toInviteData())
|
||||
)
|
||||
}
|
||||
is SpaceEvents.DeclineInvite -> {
|
||||
is SpaceEvent.DeclineInvite -> {
|
||||
acceptDeclineInviteState.eventSink(
|
||||
AcceptDeclineInviteEvent.DeclineInvite(invite = event.spaceRoom.toInviteData(), shouldConfirm = true, blockUser = false)
|
||||
)
|
||||
}
|
||||
SpaceEvents.HideTopicViewer -> topicViewerState = TopicViewerState.Hidden
|
||||
is SpaceEvents.ShowTopicViewer -> topicViewerState = TopicViewerState.Shown(event.topic)
|
||||
SpaceEvent.HideTopicViewer -> topicViewerState = TopicViewerState.Hidden
|
||||
is SpaceEvent.ShowTopicViewer -> topicViewerState = TopicViewerState.Shown(event.topic)
|
||||
|
||||
// Manage mode events
|
||||
SpaceEvents.EnterManageMode -> {
|
||||
SpaceEvent.EnterManageMode -> {
|
||||
isManageMode = true
|
||||
selectedRoomIds = emptySet()
|
||||
}
|
||||
SpaceEvents.ExitManageMode -> {
|
||||
SpaceEvent.ExitManageMode -> {
|
||||
localCoroutineScope.launch { exitManageMode(shouldReset = removedRoomIds.isNotEmpty()) }
|
||||
}
|
||||
is SpaceEvents.ToggleRoomSelection -> {
|
||||
is SpaceEvent.ToggleRoomSelection -> {
|
||||
selectedRoomIds = if (event.roomId in selectedRoomIds) {
|
||||
selectedRoomIds - event.roomId
|
||||
} else {
|
||||
selectedRoomIds + event.roomId
|
||||
}
|
||||
}
|
||||
SpaceEvents.RemoveSelectedRooms -> {
|
||||
SpaceEvent.RemoveSelectedRooms -> {
|
||||
removeRoomsAction = AsyncAction.ConfirmingNoParams
|
||||
}
|
||||
SpaceEvents.ConfirmRoomRemoval -> {
|
||||
SpaceEvent.ConfirmRoomRemoval -> {
|
||||
localCoroutineScope.launch {
|
||||
removeRoomsAction = AsyncAction.Loading
|
||||
val spaceId = spaceRoomList.spaceId
|
||||
@@ -219,7 +219,7 @@ class SpacePresenter(
|
||||
}
|
||||
}
|
||||
}
|
||||
SpaceEvents.ClearRemoveAction -> {
|
||||
SpaceEvent.ClearRemoveAction -> {
|
||||
removeRoomsAction = AsyncAction.Uninitialized
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ data class SpaceState(
|
||||
val selectedRoomIds: ImmutableSet<RoomId>,
|
||||
val canEditSpaceGraph: Boolean,
|
||||
val removeRoomsAction: AsyncAction<Unit>,
|
||||
val eventSink: (SpaceEvents) -> Unit
|
||||
val eventSink: (SpaceEvent) -> Unit
|
||||
) {
|
||||
fun isJoining(spaceId: RoomId): Boolean = joinActions[spaceId] == AsyncAction.Loading
|
||||
fun isSelected(spaceId: RoomId): Boolean = selectedRoomIds.contains(spaceId)
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ fun aSpaceState(
|
||||
selectedRoomIds: Set<RoomId> = emptySet(),
|
||||
canManageRooms: Boolean = true,
|
||||
removeRoomsAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
|
||||
eventSink: (SpaceEvents) -> Unit = { },
|
||||
eventSink: (SpaceEvent) -> Unit = { },
|
||||
) = SpaceState(
|
||||
spaceInfo = spaceInfo,
|
||||
children = children.toImmutableList(),
|
||||
|
||||
+16
-16
@@ -114,7 +114,7 @@ fun SpaceView(
|
||||
var handledBack by remember { mutableStateOf(false) }
|
||||
BackHandler(enabled = !handledBack) {
|
||||
if (state.isManageMode) {
|
||||
state.eventSink(SpaceEvents.ExitManageMode)
|
||||
state.eventSink(SpaceEvent.ExitManageMode)
|
||||
} else {
|
||||
handledBack = true
|
||||
onBackClick()
|
||||
@@ -133,8 +133,8 @@ fun SpaceView(
|
||||
ManageModeTopBar(
|
||||
selectedCount = state.selectedCount,
|
||||
isRemoveButtonEnabled = state.isRemoveButtonEnabled,
|
||||
onCancelClick = { state.eventSink(SpaceEvents.ExitManageMode) },
|
||||
onRemoveClick = { state.eventSink(SpaceEvents.RemoveSelectedRooms) },
|
||||
onCancelClick = { state.eventSink(SpaceEvent.ExitManageMode) },
|
||||
onRemoveClick = { state.eventSink(SpaceEvent.RemoveSelectedRooms) },
|
||||
)
|
||||
}
|
||||
AnimatedVisibility(
|
||||
@@ -152,7 +152,7 @@ fun SpaceView(
|
||||
onSettingsClick = onSettingsClick,
|
||||
onShareSpace = onShareSpace,
|
||||
onViewMembersClick = onViewMembersClick,
|
||||
onManageRoomsClick = { state.eventSink(SpaceEvents.EnterManageMode) },
|
||||
onManageRoomsClick = { state.eventSink(SpaceEvent.EnterManageMode) },
|
||||
onAddRoomClick = onAddRoomClick,
|
||||
onCreateRoomClick = onCreateRoomClick,
|
||||
)
|
||||
@@ -168,13 +168,13 @@ fun SpaceView(
|
||||
state = state,
|
||||
onRoomClick = { spaceRoom ->
|
||||
if (state.isManageMode) {
|
||||
state.eventSink(SpaceEvents.ToggleRoomSelection(spaceRoom.roomId))
|
||||
state.eventSink(SpaceEvent.ToggleRoomSelection(spaceRoom.roomId))
|
||||
} else {
|
||||
onRoomClick(spaceRoom)
|
||||
}
|
||||
},
|
||||
onTopicClick = { topic ->
|
||||
state.eventSink(SpaceEvents.ShowTopicViewer(topic))
|
||||
state.eventSink(SpaceEvent.ShowTopicViewer(topic))
|
||||
},
|
||||
onCreateRoomClick = onCreateRoomClick,
|
||||
onAddRoomClick = onAddRoomClick,
|
||||
@@ -187,8 +187,8 @@ fun SpaceView(
|
||||
spaceDisplayName = state.spaceInfo.name ?: state.spaceInfo.id.value,
|
||||
removeRoomsAction = state.removeRoomsAction,
|
||||
selectedCount = state.selectedCount,
|
||||
onConfirm = { state.eventSink(SpaceEvents.ConfirmRoomRemoval) },
|
||||
onDismiss = { state.eventSink(SpaceEvents.ClearRemoveAction) },
|
||||
onConfirm = { state.eventSink(SpaceEvent.ConfirmRoomRemoval) },
|
||||
onDismiss = { state.eventSink(SpaceEvent.ClearRemoveAction) },
|
||||
)
|
||||
acceptDeclineInviteView()
|
||||
}
|
||||
@@ -198,7 +198,7 @@ fun SpaceView(
|
||||
TopicViewerBottomSheet(
|
||||
topicViewerState = state.topicViewerState,
|
||||
onDismiss = {
|
||||
state.eventSink(SpaceEvents.HideTopicViewer)
|
||||
state.eventSink(SpaceEvent.HideTopicViewer)
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -207,7 +207,7 @@ fun SpaceView(
|
||||
@Composable
|
||||
private fun JoinFailuresEffect(
|
||||
hasAnyFailure: Boolean,
|
||||
eventSink: (SpaceEvents) -> Unit,
|
||||
eventSink: (SpaceEvent) -> Unit,
|
||||
) {
|
||||
val asyncIndicatorState = rememberAsyncIndicatorState()
|
||||
val updatedEventSink by rememberUpdatedState(eventSink)
|
||||
@@ -218,7 +218,7 @@ private fun JoinFailuresEffect(
|
||||
AsyncIndicator.Failure(text = stringResource(CommonStrings.common_something_went_wrong))
|
||||
}
|
||||
delay(AsyncIndicator.DURATION_SHORT)
|
||||
updatedEventSink(SpaceEvents.ClearFailures)
|
||||
updatedEventSink(SpaceEvent.ClearFailures)
|
||||
} else {
|
||||
asyncIndicatorState.clear()
|
||||
}
|
||||
@@ -317,7 +317,7 @@ private fun SpaceViewContent(
|
||||
}
|
||||
} else {
|
||||
spaceRoom.trailingAction(isCurrentlyJoining = isCurrentlyJoining) {
|
||||
state.eventSink(SpaceEvents.Join(spaceRoom))
|
||||
state.eventSink(SpaceEvent.Join(spaceRoom))
|
||||
}
|
||||
},
|
||||
bottomAction = if (state.isManageMode) {
|
||||
@@ -325,10 +325,10 @@ private fun SpaceViewContent(
|
||||
} else {
|
||||
spaceRoom.inviteButtons(
|
||||
onAcceptClick = {
|
||||
state.eventSink(SpaceEvents.AcceptInvite(spaceRoom))
|
||||
state.eventSink(SpaceEvent.AcceptInvite(spaceRoom))
|
||||
},
|
||||
onDeclineClick = {
|
||||
state.eventSink(SpaceEvents.DeclineInvite(spaceRoom))
|
||||
state.eventSink(SpaceEvent.DeclineInvite(spaceRoom))
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -384,7 +384,7 @@ private fun EmptySpaceView(
|
||||
|
||||
@Composable
|
||||
private fun LoadingMoreIndicator(
|
||||
eventSink: (SpaceEvents) -> Unit,
|
||||
eventSink: (SpaceEvent) -> Unit,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
Box(
|
||||
@@ -397,7 +397,7 @@ private fun LoadingMoreIndicator(
|
||||
)
|
||||
val latestEventSink by rememberUpdatedState(eventSink)
|
||||
LaunchedEffect(Unit) {
|
||||
latestEventSink(SpaceEvents.LoadMore)
|
||||
latestEventSink(SpaceEvent.LoadMore)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+36
-36
@@ -106,7 +106,7 @@ class SpacePresenterTest {
|
||||
presenter.test {
|
||||
val state = awaitItem()
|
||||
// LoadMore event should not cause any state change
|
||||
state.eventSink(SpaceEvents.LoadMore)
|
||||
state.eventSink(SpaceEvent.LoadMore)
|
||||
expectNoEvents()
|
||||
}
|
||||
}
|
||||
@@ -181,7 +181,7 @@ class SpacePresenterTest {
|
||||
skipItems(1)
|
||||
val state = awaitItem()
|
||||
assertThat(state.joinActions[A_ROOM_ID_2]).isNull()
|
||||
state.eventSink(SpaceEvents.Join(aNotJoinedRoom))
|
||||
state.eventSink(SpaceEvent.Join(aNotJoinedRoom))
|
||||
val joiningState = awaitItem()
|
||||
assertThat(joiningState.joinActions[A_ROOM_ID_2]).isEqualTo(AsyncAction.Loading)
|
||||
// Let the joinRoom call complete
|
||||
@@ -234,14 +234,14 @@ class SpacePresenterTest {
|
||||
skipItems(1)
|
||||
val state = awaitItem()
|
||||
assertThat(state.joinActions[A_ROOM_ID_2]).isNull()
|
||||
state.eventSink(SpaceEvents.Join(aNotJoinedRoom))
|
||||
state.eventSink(SpaceEvent.Join(aNotJoinedRoom))
|
||||
val joiningState = awaitItem()
|
||||
assertThat(joiningState.joinActions[A_ROOM_ID_2]).isEqualTo(AsyncAction.Loading)
|
||||
val errorState = awaitItem()
|
||||
// Joined room is removed from the join actions
|
||||
assertThat(errorState.joinActions[A_ROOM_ID_2]!!.isFailure()).isTrue()
|
||||
// Clear error
|
||||
errorState.eventSink(SpaceEvents.ClearFailures)
|
||||
errorState.eventSink(SpaceEvent.ClearFailures)
|
||||
val clearedState = awaitItem()
|
||||
assertThat(clearedState.joinActions[A_ROOM_ID_2]).isEqualTo(AsyncAction.Uninitialized)
|
||||
}
|
||||
@@ -258,9 +258,9 @@ class SpacePresenterTest {
|
||||
val state = awaitItem()
|
||||
assertThat(state.topicViewerState).isEqualTo(TopicViewerState.Hidden)
|
||||
advanceUntilIdle()
|
||||
state.eventSink(SpaceEvents.ShowTopicViewer("topic"))
|
||||
state.eventSink(SpaceEvent.ShowTopicViewer("topic"))
|
||||
assertThat(awaitItem().topicViewerState).isEqualTo(TopicViewerState.Shown("topic"))
|
||||
state.eventSink(SpaceEvents.HideTopicViewer)
|
||||
state.eventSink(SpaceEvent.HideTopicViewer)
|
||||
assertThat(awaitItem().topicViewerState).isEqualTo(TopicViewerState.Hidden)
|
||||
}
|
||||
}
|
||||
@@ -300,14 +300,14 @@ class SpacePresenterTest {
|
||||
val state = awaitItem()
|
||||
assertThat(state.joinActions[A_ROOM_ID_2]).isNull()
|
||||
if (acceptInvite) {
|
||||
state.eventSink(SpaceEvents.AcceptInvite(anInvitedRoom))
|
||||
state.eventSink(SpaceEvent.AcceptInvite(anInvitedRoom))
|
||||
eventRecorder.assertSingle(
|
||||
AcceptDeclineInviteEvent.AcceptInvite(
|
||||
invite = anInvitedRoom.toInviteData(),
|
||||
)
|
||||
)
|
||||
} else {
|
||||
state.eventSink(SpaceEvents.DeclineInvite(anInvitedRoom))
|
||||
state.eventSink(SpaceEvent.DeclineInvite(anInvitedRoom))
|
||||
eventRecorder.assertSingle(
|
||||
AcceptDeclineInviteEvent.DeclineInvite(
|
||||
invite = anInvitedRoom.toInviteData(),
|
||||
@@ -325,7 +325,7 @@ class SpacePresenterTest {
|
||||
presenter.test {
|
||||
val state = awaitItem()
|
||||
assertThat(state.isManageMode).isFalse()
|
||||
state.eventSink(SpaceEvents.EnterManageMode)
|
||||
state.eventSink(SpaceEvent.EnterManageMode)
|
||||
val manageModeState = awaitItem()
|
||||
assertThat(manageModeState.isManageMode).isTrue()
|
||||
assertThat(manageModeState.selectedRoomIds).isEmpty()
|
||||
@@ -342,9 +342,9 @@ class SpacePresenterTest {
|
||||
val presenter = createSpacePresenter(spaceRoomList = fakeSpaceRoomList)
|
||||
presenter.test {
|
||||
val initialState = awaitItem()
|
||||
initialState.eventSink(SpaceEvents.EnterManageMode)
|
||||
initialState.eventSink(SpaceEvents.ToggleRoomSelection(A_ROOM_ID))
|
||||
initialState.eventSink(SpaceEvents.ExitManageMode)
|
||||
initialState.eventSink(SpaceEvent.EnterManageMode)
|
||||
initialState.eventSink(SpaceEvent.ToggleRoomSelection(A_ROOM_ID))
|
||||
initialState.eventSink(SpaceEvent.ExitManageMode)
|
||||
advanceUntilIdle()
|
||||
val finalState = expectMostRecentItem()
|
||||
assertThat(finalState.isManageMode).isFalse()
|
||||
@@ -359,13 +359,13 @@ class SpacePresenterTest {
|
||||
val presenter = createSpacePresenter()
|
||||
presenter.test {
|
||||
val initialState = awaitItem()
|
||||
initialState.eventSink(SpaceEvents.EnterManageMode)
|
||||
initialState.eventSink(SpaceEvent.EnterManageMode)
|
||||
// Select a room
|
||||
initialState.eventSink(SpaceEvents.ToggleRoomSelection(A_ROOM_ID))
|
||||
initialState.eventSink(SpaceEvent.ToggleRoomSelection(A_ROOM_ID))
|
||||
var latestState = expectMostRecentItem()
|
||||
assertThat(latestState.selectedRoomIds).containsExactly(A_ROOM_ID)
|
||||
// Deselect the room
|
||||
latestState.eventSink(SpaceEvents.ToggleRoomSelection(A_ROOM_ID))
|
||||
latestState.eventSink(SpaceEvent.ToggleRoomSelection(A_ROOM_ID))
|
||||
latestState = expectMostRecentItem()
|
||||
assertThat(latestState.selectedRoomIds).isEmpty()
|
||||
}
|
||||
@@ -397,10 +397,10 @@ class SpacePresenterTest {
|
||||
advanceUntilIdle()
|
||||
val stateWithChildren = awaitItem()
|
||||
assertThat(stateWithChildren.children).hasSize(1)
|
||||
stateWithChildren.eventSink(SpaceEvents.EnterManageMode)
|
||||
stateWithChildren.eventSink(SpaceEvents.ToggleRoomSelection(A_ROOM_ID))
|
||||
stateWithChildren.eventSink(SpaceEvents.RemoveSelectedRooms)
|
||||
stateWithChildren.eventSink(SpaceEvents.ConfirmRoomRemoval)
|
||||
stateWithChildren.eventSink(SpaceEvent.EnterManageMode)
|
||||
stateWithChildren.eventSink(SpaceEvent.ToggleRoomSelection(A_ROOM_ID))
|
||||
stateWithChildren.eventSink(SpaceEvent.RemoveSelectedRooms)
|
||||
stateWithChildren.eventSink(SpaceEvent.ConfirmRoomRemoval)
|
||||
advanceUntilIdle()
|
||||
val successState = expectMostRecentItem()
|
||||
assertThat(successState.removeRoomsAction).isEqualTo(AsyncAction.Success(Unit))
|
||||
@@ -442,11 +442,11 @@ class SpacePresenterTest {
|
||||
advanceUntilIdle()
|
||||
val stateWithChildren = awaitItem()
|
||||
assertThat(stateWithChildren.children).hasSize(2)
|
||||
stateWithChildren.eventSink(SpaceEvents.EnterManageMode)
|
||||
stateWithChildren.eventSink(SpaceEvents.ToggleRoomSelection(A_ROOM_ID))
|
||||
stateWithChildren.eventSink(SpaceEvents.ToggleRoomSelection(A_ROOM_ID_2))
|
||||
stateWithChildren.eventSink(SpaceEvents.RemoveSelectedRooms)
|
||||
stateWithChildren.eventSink(SpaceEvents.ConfirmRoomRemoval)
|
||||
stateWithChildren.eventSink(SpaceEvent.EnterManageMode)
|
||||
stateWithChildren.eventSink(SpaceEvent.ToggleRoomSelection(A_ROOM_ID))
|
||||
stateWithChildren.eventSink(SpaceEvent.ToggleRoomSelection(A_ROOM_ID_2))
|
||||
stateWithChildren.eventSink(SpaceEvent.RemoveSelectedRooms)
|
||||
stateWithChildren.eventSink(SpaceEvent.ConfirmRoomRemoval)
|
||||
advanceUntilIdle()
|
||||
val failureState = expectMostRecentItem()
|
||||
assertThat(failureState.removeRoomsAction.isFailure()).isTrue()
|
||||
@@ -492,16 +492,16 @@ class SpacePresenterTest {
|
||||
awaitItem() // Initial empty state
|
||||
advanceUntilIdle()
|
||||
val stateWithChildren = awaitItem()
|
||||
stateWithChildren.eventSink(SpaceEvents.EnterManageMode)
|
||||
stateWithChildren.eventSink(SpaceEvents.ToggleRoomSelection(A_ROOM_ID))
|
||||
stateWithChildren.eventSink(SpaceEvents.ToggleRoomSelection(A_ROOM_ID_2))
|
||||
stateWithChildren.eventSink(SpaceEvents.RemoveSelectedRooms)
|
||||
stateWithChildren.eventSink(SpaceEvents.ConfirmRoomRemoval)
|
||||
stateWithChildren.eventSink(SpaceEvent.EnterManageMode)
|
||||
stateWithChildren.eventSink(SpaceEvent.ToggleRoomSelection(A_ROOM_ID))
|
||||
stateWithChildren.eventSink(SpaceEvent.ToggleRoomSelection(A_ROOM_ID_2))
|
||||
stateWithChildren.eventSink(SpaceEvent.RemoveSelectedRooms)
|
||||
stateWithChildren.eventSink(SpaceEvent.ConfirmRoomRemoval)
|
||||
advanceUntilIdle()
|
||||
val failureState = expectMostRecentItem()
|
||||
assertThat(failureState.removeRoomsAction.isFailure()).isTrue()
|
||||
// Exit manage mode after partial failure - reset should be called
|
||||
failureState.eventSink(SpaceEvents.ExitManageMode)
|
||||
failureState.eventSink(SpaceEvent.ExitManageMode)
|
||||
advanceUntilIdle()
|
||||
expectMostRecentItem()
|
||||
assert(resetResult).isCalledOnce()
|
||||
@@ -530,7 +530,7 @@ class SpacePresenterTest {
|
||||
// Both room and space visible initially
|
||||
assertThat(stateWithChildren.children).hasSize(2)
|
||||
assertThat(stateWithChildren.isManageMode).isFalse()
|
||||
stateWithChildren.eventSink(SpaceEvents.EnterManageMode)
|
||||
stateWithChildren.eventSink(SpaceEvent.EnterManageMode)
|
||||
val manageModeState = expectMostRecentItem()
|
||||
// Only rooms visible in manage mode
|
||||
assertThat(manageModeState.children).hasSize(1)
|
||||
@@ -648,12 +648,12 @@ class SpacePresenterTest {
|
||||
awaitItem() // Initial empty state
|
||||
advanceUntilIdle()
|
||||
val stateWithChildren = awaitItem()
|
||||
stateWithChildren.eventSink(SpaceEvents.EnterManageMode)
|
||||
stateWithChildren.eventSink(SpaceEvent.EnterManageMode)
|
||||
// Select both rooms for removal
|
||||
stateWithChildren.eventSink(SpaceEvents.ToggleRoomSelection(A_ROOM_ID))
|
||||
stateWithChildren.eventSink(SpaceEvents.ToggleRoomSelection(A_ROOM_ID_2))
|
||||
stateWithChildren.eventSink(SpaceEvents.RemoveSelectedRooms)
|
||||
stateWithChildren.eventSink(SpaceEvents.ConfirmRoomRemoval)
|
||||
stateWithChildren.eventSink(SpaceEvent.ToggleRoomSelection(A_ROOM_ID))
|
||||
stateWithChildren.eventSink(SpaceEvent.ToggleRoomSelection(A_ROOM_ID_2))
|
||||
stateWithChildren.eventSink(SpaceEvent.RemoveSelectedRooms)
|
||||
stateWithChildren.eventSink(SpaceEvent.ConfirmRoomRemoval)
|
||||
advanceUntilIdle()
|
||||
val failureState = expectMostRecentItem()
|
||||
assertThat(failureState.removeRoomsAction.isFailure()).isTrue()
|
||||
|
||||
+18
-18
@@ -42,7 +42,7 @@ import org.robolectric.annotation.Config
|
||||
class SpaceViewTest : RobolectricTest() {
|
||||
@Test
|
||||
fun `clicking on back invokes the expected callback`() = runAndroidComposeUiTest {
|
||||
val eventsRecorder = EventsRecorder<SpaceEvents>(expectEvents = false)
|
||||
val eventsRecorder = EventsRecorder<SpaceEvent>(expectEvents = false)
|
||||
ensureCalledOnce {
|
||||
setSpaceView(
|
||||
aSpaceState(
|
||||
@@ -58,7 +58,7 @@ class SpaceViewTest : RobolectricTest() {
|
||||
@Test
|
||||
fun `clicking on a room name invokes the expected callback`() = runAndroidComposeUiTest {
|
||||
val aSpaceRoom = aSpaceRoom(roomId = A_ROOM_ID, displayName = A_ROOM_NAME)
|
||||
val eventsRecorder = EventsRecorder<SpaceEvents>(expectEvents = false)
|
||||
val eventsRecorder = EventsRecorder<SpaceEvent>(expectEvents = false)
|
||||
ensureCalledOnceWithParam(aSpaceRoom) {
|
||||
setSpaceView(
|
||||
aSpaceState(
|
||||
@@ -75,7 +75,7 @@ class SpaceViewTest : RobolectricTest() {
|
||||
@Test
|
||||
fun `clicking on Join room emits the expected Event`() = runAndroidComposeUiTest {
|
||||
val aSpaceRoom = aSpaceRoom(roomId = A_ROOM_ID, state = null)
|
||||
val eventsRecorder = EventsRecorder<SpaceEvents>()
|
||||
val eventsRecorder = EventsRecorder<SpaceEvent>()
|
||||
setSpaceView(
|
||||
aSpaceState(
|
||||
children = listOf(aSpaceRoom),
|
||||
@@ -84,14 +84,14 @@ class SpaceViewTest : RobolectricTest() {
|
||||
),
|
||||
)
|
||||
clickOn(CommonStrings.action_join)
|
||||
eventsRecorder.assertSingle(SpaceEvents.Join(aSpaceRoom))
|
||||
eventsRecorder.assertSingle(SpaceEvent.Join(aSpaceRoom))
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `clicking on accept invite emits the expected Event`() = runAndroidComposeUiTest {
|
||||
val aSpaceRoom = aSpaceRoom(roomId = A_ROOM_ID, state = CurrentUserMembership.INVITED)
|
||||
val eventsRecorder = EventsRecorder<SpaceEvents>()
|
||||
val eventsRecorder = EventsRecorder<SpaceEvent>()
|
||||
setSpaceView(
|
||||
aSpaceState(
|
||||
hasMoreToLoad = false,
|
||||
@@ -100,14 +100,14 @@ class SpaceViewTest : RobolectricTest() {
|
||||
),
|
||||
)
|
||||
clickOn(CommonStrings.action_accept)
|
||||
eventsRecorder.assertSingle(SpaceEvents.AcceptInvite(aSpaceRoom))
|
||||
eventsRecorder.assertSingle(SpaceEvent.AcceptInvite(aSpaceRoom))
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `clicking on decline invite emits the expected Event`() = runAndroidComposeUiTest {
|
||||
val aSpaceRoom = aSpaceRoom(roomId = A_ROOM_ID, state = CurrentUserMembership.INVITED)
|
||||
val eventsRecorder = EventsRecorder<SpaceEvents>()
|
||||
val eventsRecorder = EventsRecorder<SpaceEvent>()
|
||||
setSpaceView(
|
||||
aSpaceState(
|
||||
hasMoreToLoad = false,
|
||||
@@ -116,13 +116,13 @@ class SpaceViewTest : RobolectricTest() {
|
||||
),
|
||||
)
|
||||
clickOn(CommonStrings.action_decline)
|
||||
eventsRecorder.assertSingle(SpaceEvents.DeclineInvite(aSpaceRoom))
|
||||
eventsRecorder.assertSingle(SpaceEvent.DeclineInvite(aSpaceRoom))
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `clicking on topic emits the expected Event`() = runAndroidComposeUiTest {
|
||||
val eventsRecorder = EventsRecorder<SpaceEvents>()
|
||||
val eventsRecorder = EventsRecorder<SpaceEvent>()
|
||||
setSpaceView(
|
||||
aSpaceState(
|
||||
spaceInfo = aRoomInfo(topic = A_ROOM_TOPIC),
|
||||
@@ -131,12 +131,12 @@ class SpaceViewTest : RobolectricTest() {
|
||||
)
|
||||
)
|
||||
onNodeWithText(A_ROOM_TOPIC).performClick()
|
||||
eventsRecorder.assertSingle(SpaceEvents.ShowTopicViewer(A_ROOM_TOPIC))
|
||||
eventsRecorder.assertSingle(SpaceEvent.ShowTopicViewer(A_ROOM_TOPIC))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `clicking back in manage mode emits ExitManageMode event`() = runAndroidComposeUiTest {
|
||||
val eventsRecorder = EventsRecorder<SpaceEvents>()
|
||||
val eventsRecorder = EventsRecorder<SpaceEvent>()
|
||||
setSpaceView(
|
||||
aSpaceState(
|
||||
hasMoreToLoad = false,
|
||||
@@ -145,13 +145,13 @@ class SpaceViewTest : RobolectricTest() {
|
||||
)
|
||||
)
|
||||
pressBackKey()
|
||||
eventsRecorder.assertSingle(SpaceEvents.ExitManageMode)
|
||||
eventsRecorder.assertSingle(SpaceEvent.ExitManageMode)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `clicking on room in manage mode emits ToggleRoomSelection event`() = runAndroidComposeUiTest {
|
||||
val aSpaceRoom = aSpaceRoom(roomId = A_ROOM_ID, displayName = A_ROOM_NAME)
|
||||
val eventsRecorder = EventsRecorder<SpaceEvents>()
|
||||
val eventsRecorder = EventsRecorder<SpaceEvent>()
|
||||
setSpaceView(
|
||||
aSpaceState(
|
||||
children = listOf(aSpaceRoom),
|
||||
@@ -161,12 +161,12 @@ class SpaceViewTest : RobolectricTest() {
|
||||
)
|
||||
)
|
||||
onNodeWithText(A_ROOM_NAME).performClick()
|
||||
eventsRecorder.assertSingle(SpaceEvents.ToggleRoomSelection(A_ROOM_ID))
|
||||
eventsRecorder.assertSingle(SpaceEvent.ToggleRoomSelection(A_ROOM_ID))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `clicking remove button emits RemoveSelectedRooms event`() = runAndroidComposeUiTest {
|
||||
val eventsRecorder = EventsRecorder<SpaceEvents>()
|
||||
val eventsRecorder = EventsRecorder<SpaceEvent>()
|
||||
setSpaceView(
|
||||
aSpaceState(
|
||||
children = listOf(aSpaceRoom(roomId = A_ROOM_ID)),
|
||||
@@ -177,13 +177,13 @@ class SpaceViewTest : RobolectricTest() {
|
||||
)
|
||||
)
|
||||
clickOn(CommonStrings.action_remove)
|
||||
eventsRecorder.assertSingle(SpaceEvents.RemoveSelectedRooms)
|
||||
eventsRecorder.assertSingle(SpaceEvent.RemoveSelectedRooms)
|
||||
}
|
||||
|
||||
@Config(qualifiers = "h1024dp")
|
||||
@Test
|
||||
fun `clicking confirm in removal dialog emits ConfirmRoomRemoval event`() = runAndroidComposeUiTest {
|
||||
val eventsRecorder = EventsRecorder<SpaceEvents>()
|
||||
val eventsRecorder = EventsRecorder<SpaceEvent>()
|
||||
setSpaceView(
|
||||
aSpaceState(
|
||||
children = listOf(aSpaceRoom(roomId = A_ROOM_ID)),
|
||||
@@ -196,7 +196,7 @@ class SpaceViewTest : RobolectricTest() {
|
||||
)
|
||||
// Click on the Remove button in the confirmation dialog
|
||||
clickOn(CommonStrings.action_remove, inDialog = true)
|
||||
eventsRecorder.assertSingle(SpaceEvents.ConfirmRoomRemoval)
|
||||
eventsRecorder.assertSingle(SpaceEvent.ConfirmRoomRemoval)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user