Fix tests

This commit is contained in:
andrew 2023-09-20 11:31:51 +09:30
parent e700641da7
commit 668bf46655
2 changed files with 95 additions and 56 deletions

View File

@ -302,17 +302,17 @@ enum class ExpiryType(
R.string.expiration_type_disappear_legacy, R.string.expiration_type_disappear_legacy,
contentDescription = R.string.expiration_type_disappear_legacy_description contentDescription = R.string.expiration_type_disappear_legacy_description
), ),
AFTER_SEND(
ExpiryMode::AfterSend,
R.string.expiration_type_disappear_after_send,
R.string.expiration_type_disappear_after_read_description,
R.string.expiration_type_disappear_after_send_description
),
AFTER_READ( AFTER_READ(
ExpiryMode::AfterRead, ExpiryMode::AfterRead,
R.string.expiration_type_disappear_after_read, R.string.expiration_type_disappear_after_read,
R.string.expiration_type_disappear_after_read_description, R.string.expiration_type_disappear_after_read_description,
R.string.expiration_type_disappear_after_read_description R.string.expiration_type_disappear_after_read_description
),
AFTER_SEND(
ExpiryMode::AfterSend,
R.string.expiration_type_disappear_after_send,
R.string.expiration_type_disappear_after_read_description,
R.string.expiration_type_disappear_after_send_description
); );
fun mode(seconds: Long) = if (seconds != 0L) createMode(seconds) else ExpiryMode.NONE fun mode(seconds: Long) = if (seconds != 0L) createMode(seconds) else ExpiryMode.NONE

View File

@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.conversation.expiration
import android.app.Application import android.app.Application
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import network.loki.messenger.R import network.loki.messenger.R
@ -31,7 +32,6 @@ import kotlin.time.Duration.Companion.minutes
private const val THREAD_ID = 1L private const val THREAD_ID = 1L
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
@RunWith(MockitoJUnitRunner::class) @RunWith(MockitoJUnitRunner::class)
class ExpirationSettingsViewModelTest { class ExpirationSettingsViewModelTest {
@ -112,9 +112,6 @@ class ExpirationSettingsViewModelTest {
) )
) )
val newTypeOption = TypeOptionCreator(time)
val newTimeOption = TimeOptionCreator(ExpiryType.AFTER_SEND)
assertThat( assertThat(
viewModel.uiState.value viewModel.uiState.value
).isEqualTo( ).isEqualTo(
@ -122,16 +119,16 @@ class ExpirationSettingsViewModelTest {
showGroupFooter = false, showGroupFooter = false,
CardModel( CardModel(
R.string.activity_expiration_settings_delete_type, R.string.activity_expiration_settings_delete_type,
newTypeOption(ExpiryType.NONE), typeOption(ExpiryMode.NONE),
newTypeOption(ExpiryType.AFTER_READ), typeOption(time, ExpiryType.AFTER_READ),
newTypeOption(ExpiryType.AFTER_SEND, selected = true) typeOption(time, ExpiryType.AFTER_SEND, selected = true)
), ),
CardModel( CardModel(
GetString(R.string.activity_expiration_settings_timer), GetString(R.string.activity_expiration_settings_timer),
newTimeOption(duration = 12.hours, selected = true), timeOption(ExpiryType.AFTER_SEND, 12.hours, selected = true),
newTimeOption(duration = 1.days), timeOption(ExpiryType.AFTER_SEND, 1.days),
newTimeOption(duration = 7.days), timeOption(ExpiryType.AFTER_SEND, 7.days),
newTimeOption(duration = 14.days) timeOption(ExpiryType.AFTER_SEND, 14.days)
) )
) )
) )
@ -162,9 +159,6 @@ class ExpirationSettingsViewModelTest {
) )
) )
val newTypeOption = TypeOptionCreator(time)
val newTimeOption = TimeOptionCreator(ExpiryType.AFTER_SEND)
assertThat( assertThat(
viewModel.uiState.value viewModel.uiState.value
).isEqualTo( ).isEqualTo(
@ -172,16 +166,16 @@ class ExpirationSettingsViewModelTest {
showGroupFooter = false, showGroupFooter = false,
CardModel( CardModel(
R.string.activity_expiration_settings_delete_type, R.string.activity_expiration_settings_delete_type,
newTypeOption(ExpiryType.NONE), typeOption(ExpiryMode.NONE),
typeOption(12.hours, ExpiryType.AFTER_READ), typeOption(12.hours, ExpiryType.AFTER_READ),
newTypeOption(ExpiryType.AFTER_SEND, selected = true) typeOption(time, ExpiryType.AFTER_SEND, selected = true)
), ),
CardModel( CardModel(
GetString(R.string.activity_expiration_settings_timer), GetString(R.string.activity_expiration_settings_timer),
newTimeOption(duration = 12.hours), timeOption(ExpiryType.AFTER_SEND, 12.hours),
newTimeOption(duration = 1.days, selected = true), timeOption(ExpiryType.AFTER_SEND, 1.days, selected = true),
newTimeOption(duration = 7.days), timeOption(ExpiryType.AFTER_SEND, 7.days),
newTimeOption(duration = 14.days) timeOption(ExpiryType.AFTER_SEND, 14.days)
) )
) )
) )
@ -213,8 +207,59 @@ class ExpirationSettingsViewModelTest {
) )
) )
val newTypeOption = TypeOptionCreator(time) assertThat(
val newTimeOption = TimeOptionCreator(ExpiryType.AFTER_READ) viewModel.uiState.value
).isEqualTo(
UiState(
showGroupFooter = false,
CardModel(
R.string.activity_expiration_settings_delete_type,
typeOption(ExpiryMode.NONE),
typeOption(1.days, ExpiryType.AFTER_READ, selected = true),
typeOption(time, ExpiryType.AFTER_SEND)
),
CardModel(
GetString(R.string.activity_expiration_settings_timer),
timeOption(ExpiryType.AFTER_READ, 5.minutes),
timeOption(ExpiryType.AFTER_READ, 1.hours),
timeOption(ExpiryType.AFTER_READ, 12.hours),
timeOption(ExpiryType.AFTER_READ, 1.days, selected = true),
timeOption(ExpiryType.AFTER_READ, 7.days),
timeOption(ExpiryType.AFTER_READ, 14.days)
)
)
)
}
@Test
fun `1-1 conversation, init 12 hours after read, then select after send, new config`() = runTest {
val time = 12.hours
val someAddress = Address.fromSerialized("05---SOME---ADDRESS")
mock1on1AfterRead(time, someAddress)
val viewModel = createViewModel()
advanceUntilIdle()
viewModel.setMode(afterSendMode(1.days))
advanceUntilIdle()
assertThat(
viewModel.state.value
).isEqualTo(
State(
isGroup = false,
isSelfAdmin = true,
address = someAddress,
isNoteToSelf = false,
expiryMode = afterSendMode(1.days),
isNewConfigEnabled = true,
persistedMode = afterReadMode(12.hours),
showDebugOptions = false
)
)
assertThat( assertThat(
viewModel.uiState.value viewModel.uiState.value
@ -223,23 +268,36 @@ class ExpirationSettingsViewModelTest {
showGroupFooter = false, showGroupFooter = false,
CardModel( CardModel(
R.string.activity_expiration_settings_delete_type, R.string.activity_expiration_settings_delete_type,
newTypeOption(ExpiryType.NONE), typeOption(ExpiryMode.NONE),
typeOption(1.days, ExpiryType.AFTER_READ, selected = true), typeOption(12.hours, ExpiryType.AFTER_READ),
newTypeOption(ExpiryType.AFTER_SEND) typeOption(1.days, ExpiryType.AFTER_SEND, selected = true)
), ),
CardModel( CardModel(
GetString(R.string.activity_expiration_settings_timer), GetString(R.string.activity_expiration_settings_timer),
newTimeOption(duration = 5.minutes), timeOption(ExpiryType.AFTER_SEND, 12.hours),
newTimeOption(duration = 1.hours), timeOption(ExpiryType.AFTER_SEND, 1.days, selected = true),
newTimeOption(duration = 12.hours), timeOption(ExpiryType.AFTER_SEND, 7.days),
newTimeOption(duration = 1.days, selected = true), timeOption(ExpiryType.AFTER_SEND, 14.days)
newTimeOption(duration = 7.days),
newTimeOption(duration = 14.days)
) )
) )
) )
} }
private fun timeOption(
type: ExpiryType,
time: Duration,
enabled: Boolean = true,
selected: Boolean = false
) = OptionModel(
value = type.mode(time),
title = GetString(time),
enabled = enabled,
selected = selected
)
private fun afterSendMode(time: Duration) = ExpiryMode.AfterSend(time.inWholeSeconds)
private fun afterReadMode(time: Duration) = ExpiryMode.AfterRead(time.inWholeSeconds)
private fun mock1on1AfterRead(time: Duration, someAddress: Address) { private fun mock1on1AfterRead(time: Duration, someAddress: Address) {
mock1on1(ExpiryType.AFTER_READ.mode(time), someAddress) mock1on1(ExpiryType.AFTER_READ.mode(time), someAddress)
} }
@ -258,31 +316,12 @@ class ExpirationSettingsViewModelTest {
whenever(recipient.address).thenReturn(someAddress) whenever(recipient.address).thenReturn(someAddress)
} }
private fun afterSendConfig(time: Duration) =
config(ExpiryType.AFTER_SEND.mode(time.inWholeSeconds))
private fun afterReadConfig(time: Duration) =
config(ExpiryType.AFTER_READ.mode(time.inWholeSeconds))
private fun config(mode: ExpiryMode) = ExpirationConfiguration( private fun config(mode: ExpiryMode) = ExpirationConfiguration(
threadId = THREAD_ID, threadId = THREAD_ID,
expiryMode = mode, expiryMode = mode,
updatedTimestampMs = 0 updatedTimestampMs = 0
) )
private class TypeOptionCreator(private val time: Duration) {
operator fun invoke(type: ExpiryType, selected: Boolean = false, enabled: Boolean = true) =
typeOption(time, type, selected, enabled)
}
private class TimeOptionCreator(private val type: ExpiryType) {
operator fun invoke(duration: Duration, selected: Boolean = false, enabled: Boolean = true) = OptionModel(
value = type.mode(duration),
title = GetString(duration),
enabled = enabled,
selected = selected
)
}
private fun createViewModel(isNewConfigEnabled: Boolean = true) = ExpirationSettingsViewModel( private fun createViewModel(isNewConfigEnabled: Boolean = true) = ExpirationSettingsViewModel(
THREAD_ID, THREAD_ID,
application, application,