Test poll view events when create poll is requested.
This commit is contained in:
parent
0ed9a1885c
commit
24d59eba87
@ -22,25 +22,38 @@ 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.editPollArgs
|
||||||
import im.vector.app.features.poll.create.CreatePollViewStates.fakeOptions
|
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.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.initialCreatePollViewState
|
||||||
import im.vector.app.features.poll.create.CreatePollViewStates.pollViewStateWithOnlyQuestion
|
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.pollViewStateWithQuestionAndEnoughOptions
|
||||||
import im.vector.app.features.poll.create.CreatePollViewStates.pollViewStateWithQuestionAndMaxOptions
|
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.pollViewStateWithQuestionAndNotEnoughOptions
|
||||||
import im.vector.app.features.poll.create.CreatePollViewStates.pollViewStateWithoutQuestionAndEnoughOptions
|
import im.vector.app.features.poll.create.CreatePollViewStates.pollViewStateWithoutQuestionAndEnoughOptions
|
||||||
import im.vector.app.test.fakes.FakeSession
|
|
||||||
import im.vector.app.test.test
|
import im.vector.app.test.test
|
||||||
|
import io.mockk.every
|
||||||
|
import io.mockk.mockk
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
|
import org.amshove.kluent.shouldBe
|
||||||
|
import org.junit.Before
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
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 {
|
class CreatePollViewModelTest {
|
||||||
|
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val mvrxTestRule = MvRxTestRule()
|
val mvrxTestRule = MvRxTestRule()
|
||||||
|
|
||||||
private val fakeSession = FakeSession()
|
private val fakeSession = mockk<Session>()
|
||||||
|
private val fakeRoom = mockk<Room>()
|
||||||
|
private val fakeSendService = mockk<SendService>()
|
||||||
|
private val fakeCancellable = mockk<Cancelable>()
|
||||||
|
|
||||||
private fun createPollViewModel(pollMode: PollMode): CreatePollViewModel {
|
private fun createPollViewModel(pollMode: PollMode): CreatePollViewModel {
|
||||||
return if (pollMode == PollMode.EDIT) {
|
return if (pollMode == PollMode.EDIT) {
|
||||||
@ -50,6 +63,13 @@ class CreatePollViewModelTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setup() {
|
||||||
|
every { fakeSession.getRoom(fakeRoomId) } returns fakeRoom
|
||||||
|
every { fakeRoom.sendService() } returns fakeSendService
|
||||||
|
every { fakeSendService.sendPoll(any(), fakeQuestion, any()) } returns fakeCancellable
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `given the view model is initialized then poll cannot be created and more options can be added`() = runTest {
|
fun `given the view model is initialized then poll cannot be created and more options can be added`() = runTest {
|
||||||
val createPollViewModel = createPollViewModel(PollMode.CREATE)
|
val createPollViewModel = createPollViewModel(PollMode.CREATE)
|
||||||
@ -133,4 +153,50 @@ class CreatePollViewModelTest {
|
|||||||
.assertState(pollViewStateWithQuestionAndMaxOptions)
|
.assertState(pollViewStateWithQuestionAndMaxOptions)
|
||||||
.finish()
|
.finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given an initial poll state when poll type is changed then view state is updated accordingly`() = runTest {
|
||||||
|
val createPollViewModel = createPollViewModel(PollMode.CREATE)
|
||||||
|
createPollViewModel.handle(CreatePollAction.OnPollTypeChanged(PollType.DISCLOSED))
|
||||||
|
createPollViewModel.awaitState().pollType shouldBe PollType.DISCLOSED
|
||||||
|
createPollViewModel.handle(CreatePollAction.OnPollTypeChanged(PollType.UNDISCLOSED))
|
||||||
|
createPollViewModel.awaitState().pollType shouldBe PollType.UNDISCLOSED
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given there is not a question and enough options when create poll is requested then error view events are post`() = runTest {
|
||||||
|
val createPollViewModel = createPollViewModel(PollMode.CREATE)
|
||||||
|
val test = createPollViewModel.test()
|
||||||
|
|
||||||
|
createPollViewModel.handle(CreatePollAction.OnCreatePoll)
|
||||||
|
|
||||||
|
createPollViewModel.handle(CreatePollAction.OnQuestionChanged(fakeQuestion))
|
||||||
|
createPollViewModel.handle(CreatePollAction.OnCreatePoll)
|
||||||
|
|
||||||
|
createPollViewModel.handle(CreatePollAction.OnOptionChanged(0, fakeOptions[0]))
|
||||||
|
createPollViewModel.handle(CreatePollAction.OnCreatePoll)
|
||||||
|
|
||||||
|
test
|
||||||
|
.assertEvents(
|
||||||
|
CreatePollViewEvents.EmptyQuestionError,
|
||||||
|
CreatePollViewEvents.NotEnoughOptionsError(requiredOptionsCount = CreatePollViewModel.MIN_OPTIONS_COUNT),
|
||||||
|
CreatePollViewEvents.NotEnoughOptionsError(requiredOptionsCount = CreatePollViewModel.MIN_OPTIONS_COUNT)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given there is a question and enough options when create poll is requested then success view event is post`() = runTest {
|
||||||
|
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.OnCreatePoll)
|
||||||
|
|
||||||
|
test
|
||||||
|
.assertEvents(
|
||||||
|
CreatePollViewEvents.Success
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user