Test poll view events when poll is edited.
This commit is contained in:
parent
b558d14a48
commit
841b63b819
|
@ -18,42 +18,38 @@ package im.vector.app.features.poll.create
|
|||
|
||||
import com.airbnb.mvrx.test.MvRxTestRule
|
||||
import im.vector.app.features.poll.PollMode
|
||||
import im.vector.app.features.poll.create.CreatePollViewStates.createPollArgs
|
||||
import im.vector.app.features.poll.create.CreatePollViewStates.editPollArgs
|
||||
import im.vector.app.features.poll.create.CreatePollViewStates.fakeOptions
|
||||
import im.vector.app.features.poll.create.CreatePollViewStates.fakeQuestion
|
||||
import im.vector.app.features.poll.create.CreatePollViewStates.fakeRoomId
|
||||
import im.vector.app.features.poll.create.CreatePollViewStates.initialCreatePollViewState
|
||||
import im.vector.app.features.poll.create.CreatePollViewStates.pollViewStateWithOnlyQuestion
|
||||
import im.vector.app.features.poll.create.CreatePollViewStates.pollViewStateWithQuestionAndEnoughOptions
|
||||
import im.vector.app.features.poll.create.CreatePollViewStates.pollViewStateWithQuestionAndMaxOptions
|
||||
import im.vector.app.features.poll.create.CreatePollViewStates.pollViewStateWithQuestionAndNotEnoughOptions
|
||||
import im.vector.app.features.poll.create.CreatePollViewStates.pollViewStateWithoutQuestionAndEnoughOptions
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.A_FAKE_OPTIONS
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.A_FAKE_QUESTION
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.A_FAKE_ROOM_ID
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.A_POLL_START_TIMELINE_EVENT
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.createPollArgs
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.editPollArgs
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.editedPollViewState
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.initialCreatePollViewState
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.pollViewStateWithOnlyQuestion
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.pollViewStateWithQuestionAndEnoughOptions
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.pollViewStateWithQuestionAndMaxOptions
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.pollViewStateWithQuestionAndNotEnoughOptions
|
||||
import im.vector.app.features.poll.create.FakeCreatePollViewStates.pollViewStateWithoutQuestionAndEnoughOptions
|
||||
import im.vector.app.test.fakes.FakeSession
|
||||
import im.vector.app.test.test
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import io.mockk.unmockkAll
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.amshove.kluent.shouldBe
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.matrix.android.sdk.api.session.Session
|
||||
import org.matrix.android.sdk.api.session.getRoom
|
||||
import org.matrix.android.sdk.api.session.room.Room
|
||||
import org.matrix.android.sdk.api.session.room.model.message.PollType
|
||||
import org.matrix.android.sdk.api.session.room.send.SendService
|
||||
import org.matrix.android.sdk.api.util.Cancelable
|
||||
|
||||
class CreatePollViewModelTest {
|
||||
|
||||
@get:Rule
|
||||
val mvrxTestRule = MvRxTestRule()
|
||||
|
||||
private val fakeSession = mockk<Session>()
|
||||
private val fakeRoom = mockk<Room>()
|
||||
private val fakeSendService = mockk<SendService>()
|
||||
private val fakeCancellable = mockk<Cancelable>()
|
||||
private val fakeSession = FakeSession()
|
||||
|
||||
private fun createPollViewModel(pollMode: PollMode): CreatePollViewModel {
|
||||
return if (pollMode == PollMode.EDIT) {
|
||||
|
@ -65,9 +61,16 @@ class CreatePollViewModelTest {
|
|||
|
||||
@Before
|
||||
fun setup() {
|
||||
every { fakeSession.getRoom(fakeRoomId) } returns fakeRoom
|
||||
every { fakeRoom.sendService() } returns fakeSendService
|
||||
every { fakeSendService.sendPoll(any(), fakeQuestion, any()) } returns fakeCancellable
|
||||
fakeSession
|
||||
.roomService()
|
||||
.getRoom(A_FAKE_ROOM_ID)
|
||||
.timelineService()
|
||||
.givenTimelineEvent(A_POLL_START_TIMELINE_EVENT)
|
||||
}
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
unmockkAll()
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -82,7 +85,7 @@ class CreatePollViewModelTest {
|
|||
@Test
|
||||
fun `given there is not any options when the question is added then poll cannot be created and more options can be added`() = runTest {
|
||||
val createPollViewModel = createPollViewModel(PollMode.CREATE)
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(fakeQuestion))
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(A_FAKE_QUESTION))
|
||||
|
||||
// We need to wait for createPollViewModel.onChange is triggered
|
||||
delay(10)
|
||||
|
@ -95,9 +98,9 @@ class CreatePollViewModelTest {
|
|||
@Test
|
||||
fun `given there is not enough options when the question is added then poll cannot be created and more options can be added`() = runTest {
|
||||
val createPollViewModel = createPollViewModel(PollMode.CREATE)
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(fakeQuestion))
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(A_FAKE_QUESTION))
|
||||
repeat(CreatePollViewModel.MIN_OPTIONS_COUNT - 1) {
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(it, fakeOptions[it]))
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(it, A_FAKE_OPTIONS[it]))
|
||||
}
|
||||
|
||||
delay(10)
|
||||
|
@ -111,7 +114,7 @@ class CreatePollViewModelTest {
|
|||
fun `given there is not a question when enough options are added then poll cannot be created and more options can be added`() = runTest {
|
||||
val createPollViewModel = createPollViewModel(PollMode.CREATE)
|
||||
repeat(CreatePollViewModel.MIN_OPTIONS_COUNT) {
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(it, fakeOptions[it]))
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(it, A_FAKE_OPTIONS[it]))
|
||||
}
|
||||
|
||||
delay(10)
|
||||
|
@ -124,9 +127,9 @@ class CreatePollViewModelTest {
|
|||
@Test
|
||||
fun `given there is a question when enough options are added then poll can be created and more options can be added`() = runTest {
|
||||
val createPollViewModel = createPollViewModel(PollMode.CREATE)
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(fakeQuestion))
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(A_FAKE_QUESTION))
|
||||
repeat(CreatePollViewModel.MIN_OPTIONS_COUNT) {
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(it, fakeOptions[it]))
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(it, A_FAKE_OPTIONS[it]))
|
||||
}
|
||||
|
||||
delay(10)
|
||||
|
@ -139,12 +142,12 @@ class CreatePollViewModelTest {
|
|||
@Test
|
||||
fun `given there is a question when max number of options are added then poll can be created and more options cannot be added`() = runTest {
|
||||
val createPollViewModel = createPollViewModel(PollMode.CREATE)
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(fakeQuestion))
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(A_FAKE_QUESTION))
|
||||
repeat(CreatePollViewModel.MAX_OPTIONS_COUNT) {
|
||||
if (it >= CreatePollViewModel.MIN_OPTIONS_COUNT) {
|
||||
createPollViewModel.handle(CreatePollAction.OnAddOption)
|
||||
}
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(it, fakeOptions[it]))
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(it, A_FAKE_OPTIONS[it]))
|
||||
}
|
||||
|
||||
delay(10)
|
||||
|
@ -170,10 +173,10 @@ class CreatePollViewModelTest {
|
|||
|
||||
createPollViewModel.handle(CreatePollAction.OnCreatePoll)
|
||||
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(fakeQuestion))
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(A_FAKE_QUESTION))
|
||||
createPollViewModel.handle(CreatePollAction.OnCreatePoll)
|
||||
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(0, fakeOptions[0]))
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(0, A_FAKE_OPTIONS[0]))
|
||||
createPollViewModel.handle(CreatePollAction.OnCreatePoll)
|
||||
|
||||
test
|
||||
|
@ -189,9 +192,30 @@ class CreatePollViewModelTest {
|
|||
val createPollViewModel = createPollViewModel(PollMode.CREATE)
|
||||
val test = createPollViewModel.test()
|
||||
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(fakeQuestion))
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(0, fakeOptions[0]))
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(1, fakeOptions[1]))
|
||||
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(A_FAKE_QUESTION))
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(0, A_FAKE_OPTIONS[0]))
|
||||
createPollViewModel.handle(CreatePollAction.OnOptionChanged(1, A_FAKE_OPTIONS[1]))
|
||||
createPollViewModel.handle(CreatePollAction.OnCreatePoll)
|
||||
|
||||
test
|
||||
.assertEvents(
|
||||
CreatePollViewEvents.Success
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given an edited poll event when question and options are changed then view state is updated accordingly`() = runTest {
|
||||
val createPollViewModel = createPollViewModel(PollMode.EDIT)
|
||||
|
||||
delay(10)
|
||||
createPollViewModel.test().assertState(editedPollViewState)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `given an edited poll event then able to be edited`() = runTest {
|
||||
val createPollViewModel = createPollViewModel(PollMode.EDIT)
|
||||
val test = createPollViewModel.test()
|
||||
|
||||
createPollViewModel.handle(CreatePollAction.OnCreatePoll)
|
||||
|
||||
test
|
||||
|
|
Loading…
Reference in New Issue