Unit and Snapshot tests for error and loading states.
This commit is contained in:
parent
470eeb3132
commit
241056b892
7 changed files with 159 additions and 41 deletions
|
|
@ -24,31 +24,31 @@ import io.element.android.libraries.matrix.api.room.RoomNotificationSettings
|
|||
internal class RoomNotificationSettingsStateProvider : PreviewParameterProvider<RoomNotificationSettingsState> {
|
||||
override val values: Sequence<RoomNotificationSettingsState>
|
||||
get() = sequenceOf(
|
||||
RoomNotificationSettingsState(
|
||||
showUserDefinedSettingStyle = false,
|
||||
roomName = "Room 1",
|
||||
Async.Success(RoomNotificationSettings(
|
||||
mode = RoomNotificationMode.MUTE,
|
||||
isDefault = true)),
|
||||
pendingRoomNotificationMode = null,
|
||||
pendingSetDefault = null,
|
||||
defaultRoomNotificationMode = RoomNotificationMode.ALL_MESSAGES,
|
||||
setNotificationSettingAction = Async.Uninitialized,
|
||||
restoreDefaultAction = Async.Uninitialized,
|
||||
eventSink = { },
|
||||
),
|
||||
RoomNotificationSettingsState(
|
||||
showUserDefinedSettingStyle = false,
|
||||
roomName = "Room 1",
|
||||
Async.Success(RoomNotificationSettings(
|
||||
mode = RoomNotificationMode.MUTE,
|
||||
isDefault = false)),
|
||||
pendingRoomNotificationMode = null,
|
||||
pendingSetDefault = null,
|
||||
defaultRoomNotificationMode = RoomNotificationMode.ALL_MESSAGES,
|
||||
setNotificationSettingAction = Async.Uninitialized,
|
||||
restoreDefaultAction = Async.Uninitialized,
|
||||
eventSink = { },
|
||||
),
|
||||
aRoomNotificationSettingsState(),
|
||||
aRoomNotificationSettingsState(isDefault = false),
|
||||
aRoomNotificationSettingsState(setNotificationSettingAction = Async.Loading(Unit)),
|
||||
aRoomNotificationSettingsState(setNotificationSettingAction = Async.Failure(Throwable("error"))),
|
||||
aRoomNotificationSettingsState(restoreDefaultAction = Async.Loading(Unit)),
|
||||
aRoomNotificationSettingsState(restoreDefaultAction = Async.Failure(Throwable("error"))),
|
||||
)
|
||||
|
||||
private fun aRoomNotificationSettingsState(
|
||||
isDefault: Boolean = true,
|
||||
setNotificationSettingAction: Async<Unit> = Async.Uninitialized,
|
||||
restoreDefaultAction: Async<Unit> = Async.Uninitialized,
|
||||
): RoomNotificationSettingsState {
|
||||
return RoomNotificationSettingsState(
|
||||
showUserDefinedSettingStyle = false,
|
||||
roomName = "Room 1",
|
||||
Async.Success(RoomNotificationSettings(
|
||||
mode = RoomNotificationMode.MUTE,
|
||||
isDefault = isDefault)),
|
||||
pendingRoomNotificationMode = null,
|
||||
pendingSetDefault = null,
|
||||
defaultRoomNotificationMode = RoomNotificationMode.ALL_MESSAGES,
|
||||
setNotificationSettingAction = setNotificationSettingAction,
|
||||
restoreDefaultAction = restoreDefaultAction,
|
||||
eventSink = { },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ import io.element.android.libraries.matrix.test.notificationsettings.FakeNotific
|
|||
import io.element.android.tests.testutils.consumeItemsUntilPredicate
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Test
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
class RoomNotificationSettingsPresenterTests {
|
||||
@Test
|
||||
|
|
@ -76,7 +75,6 @@ class RoomNotificationSettingsPresenterTests {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
fun `present - notification settings set custom failed`() = runTest {
|
||||
val notificationSettingsService = FakeNotificationSettingsService()
|
||||
|
|
@ -87,13 +85,20 @@ class RoomNotificationSettingsPresenterTests {
|
|||
}.test {
|
||||
val initialState = awaitItem()
|
||||
initialState.eventSink(RoomNotificationSettingsEvents.SetNotificationMode(false))
|
||||
val states = consumeItemsUntilPredicate {
|
||||
it.roomNotificationSettings.dataOrNull()?.isDefault == false
|
||||
}
|
||||
states.forEach {
|
||||
Truth.assertThat(it.roomNotificationSettings.dataOrNull()?.isDefault).isTrue()
|
||||
Truth.assertThat(it.pendingSetDefault).isNull()
|
||||
}
|
||||
val failedState = consumeItemsUntilPredicate {
|
||||
it.setNotificationSettingAction.isFailure()
|
||||
}.last()
|
||||
|
||||
Truth.assertThat(failedState.roomNotificationSettings.dataOrNull()?.isDefault).isTrue()
|
||||
Truth.assertThat(failedState.pendingSetDefault).isNull()
|
||||
Truth.assertThat(failedState.setNotificationSettingAction.isFailure()).isTrue()
|
||||
|
||||
failedState.eventSink(RoomNotificationSettingsEvents.ClearSetNotificationError)
|
||||
|
||||
val errorClearedState = consumeItemsUntilPredicate {
|
||||
it.setNotificationSettingAction.isUninitialized()
|
||||
}.last()
|
||||
Truth.assertThat(errorClearedState.setNotificationSettingAction.isUninitialized()).isTrue()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -122,7 +127,7 @@ class RoomNotificationSettingsPresenterTests {
|
|||
val initialState = awaitItem()
|
||||
initialState.eventSink(RoomNotificationSettingsEvents.RoomNotificationModeChanged(RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY))
|
||||
initialState.eventSink(RoomNotificationSettingsEvents.SetNotificationMode(true))
|
||||
val defaultState = consumeItemsUntilPredicate(timeout = 2000.milliseconds) {
|
||||
val defaultState = consumeItemsUntilPredicate {
|
||||
it.roomNotificationSettings.dataOrNull()?.mode == RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY
|
||||
}.last()
|
||||
Truth.assertThat(defaultState.roomNotificationSettings.dataOrNull()?.mode).isEqualTo(RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY)
|
||||
|
|
@ -130,6 +135,30 @@ class RoomNotificationSettingsPresenterTests {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `present - notification settings restore default failed`() = runTest {
|
||||
val notificationSettingsService = FakeNotificationSettingsService()
|
||||
notificationSettingsService.givenRestoreDefaultNotificationModeError(A_THROWABLE)
|
||||
val presenter = createRoomNotificationSettingsPresenter(notificationSettingsService)
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
val initialState = awaitItem()
|
||||
initialState.eventSink(RoomNotificationSettingsEvents.RoomNotificationModeChanged(RoomNotificationMode.MENTIONS_AND_KEYWORDS_ONLY))
|
||||
initialState.eventSink(RoomNotificationSettingsEvents.SetNotificationMode(true))
|
||||
val failedState = consumeItemsUntilPredicate {
|
||||
it.restoreDefaultAction.isFailure()
|
||||
}.last()
|
||||
Truth.assertThat(failedState.restoreDefaultAction.isFailure()).isTrue()
|
||||
failedState.eventSink(RoomNotificationSettingsEvents.ClearRestoreDefaultError)
|
||||
|
||||
val errorClearedState = consumeItemsUntilPredicate {
|
||||
it.restoreDefaultAction.isUninitialized()
|
||||
}.last()
|
||||
Truth.assertThat(errorClearedState.restoreDefaultAction.isUninitialized()).isTrue()
|
||||
cancelAndIgnoreRemainingEvents()
|
||||
}
|
||||
}
|
||||
private fun createRoomNotificationSettingsPresenter(
|
||||
notificationSettingsService: FakeNotificationSettingsService = FakeNotificationSettingsService()
|
||||
): RoomNotificationSettingsPresenter{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue