Add leave room test cases

This commit is contained in:
Adam Brown 2023-01-07 14:58:04 +00:00
parent f1e05e0a6f
commit e990227f81
2 changed files with 66 additions and 6 deletions

View File

@ -15,14 +15,12 @@ import fake.FakeChatEngine
import fake.FakeJobBag
import fake.FakeMessageOptionsStore
import fixture.*
import io.mockk.coEvery
import io.mockk.every
import io.mockk.mockk
import kotlinx.coroutines.flow.flowOf
import org.junit.Test
import test.ReducerTestScope
import test.delegateReturn
import test.expect
import test.testReducer
import test.*
private const val READ_RECEIPTS_ARE_DISABLED = true
private val A_ROOM_ID = aRoomId("messenger state room id")
@ -37,11 +35,16 @@ private val AN_IMAGE_BUBBLE = BubbleModel.Image(
mockk(),
BubbleModel.Event("author-id", "author-name", edited = false, time = "10:27")
)
private val A_TEXT_BUBBLE = BubbleModel.Text(
content = RichText(listOf(RichText.Part.Normal(A_MESSAGE_CONTENT))),
BubbleModel.Event("author-id", "author-name", edited = false, time = "10:27")
)
private val A_DIALOG_STATE = DialogState.PositiveNegative(
"a title",
"a subtitle",
positiveAction = ScreenAction.LeaveRoomConfirmation.Confirm,
negativeAction = ScreenAction.LeaveRoomConfirmation.Deny,
)
class MessengerReducerTest {
@ -72,6 +75,7 @@ class MessengerReducerTest {
roomState = Lce.Loading(),
composerState = ComposerState.Text(value = "", reply = null),
viewerState = null,
dialogState = null,
)
)
}
@ -84,6 +88,7 @@ class MessengerReducerTest {
roomState = Lce.Loading(),
composerState = ComposerState.Text(value = "", reply = null),
viewerState = null,
dialogState = null,
)
)
}
@ -96,6 +101,7 @@ class MessengerReducerTest {
roomState = Lce.Loading(),
composerState = ComposerState.Attachments(listOf(A_MESSAGE_ATTACHMENT), reply = null),
viewerState = null,
dialogState = null,
)
)
}
@ -221,6 +227,60 @@ class MessengerReducerTest {
}
}
@Test
fun `when LeaveRoom, then updates dialog state with leave room confirmation`() = runReducerTest {
reduce(ScreenAction.LeaveRoom)
assertOnlyDispatches(
ScreenAction.UpdateDialogState(
DialogState.PositiveNegative(
title = "Leave room",
subtitle = "Are you sure you want you leave the room? If the room is private you will need to be invited again to rejoin.",
negativeAction = ScreenAction.LeaveRoomConfirmation.Deny,
positiveAction = ScreenAction.LeaveRoomConfirmation.Confirm,
)
)
)
}
@Test
fun `when UpdateDialogState, then updates dialog state`() = runReducerTest {
reduce(ScreenAction.UpdateDialogState(dialogState = A_DIALOG_STATE))
assertOnlyStateChange { it.copy(dialogState = A_DIALOG_STATE) }
}
@Test
fun `given can leave room, when LeaveConfirmation Confirm, then removes dialog and rejects room and emits OnLeftRoom`() = runReducerTest {
fakeChatEngine.expect { it.rejectRoom(A_ROOM_ID) }
reduce(ScreenAction.LeaveRoomConfirmation.Confirm)
assertDispatches(ScreenAction.UpdateDialogState(dialogState = null))
assertEvents(MessengerEvent.OnLeftRoom)
assertNoStateChange()
}
@Test
fun `given leave room fails, when LeaveConfirmation Confirm, then removes dialog and emits toast`() = runReducerTest {
fakeChatEngine.expectError(error = RuntimeException("an error")) { fakeChatEngine.rejectRoom(A_ROOM_ID) }
reduce(ScreenAction.LeaveRoomConfirmation.Confirm)
assertDispatches(ScreenAction.UpdateDialogState(dialogState = null))
assertEvents(MessengerEvent.Toast("Failed to leave room"))
assertNoStateChange()
}
@Test
fun `when LeaveConfirmation Deny, then removes dialog and does nothing`() = runReducerTest {
reduce(ScreenAction.LeaveRoomConfirmation.Deny)
assertDispatches(ScreenAction.UpdateDialogState(dialogState = null))
assertNoEvents()
assertNoStateChange()
}
@Test
fun `when OpenGalleryPicker, then emits event`() = runReducerTest {
reduce(ScreenAction.OpenGalleryPicker)

@ -1 +1 @@
Subproject commit d596949ac2b923b02da55ddd78e2e26dc46af82a
Subproject commit 337a65b27b9911205e52a87c075be4bbf70a557d