Add unit test to ensure that number of levels is limited.
This commit is contained in:
parent
0fbf156262
commit
b25b99c890
2 changed files with 28 additions and 0 deletions
|
|
@ -39,6 +39,7 @@ import io.element.android.libraries.textcomposer.model.VoiceMessagePlayerEvent
|
||||||
import io.element.android.libraries.textcomposer.model.VoiceMessageRecorderEvent
|
import io.element.android.libraries.textcomposer.model.VoiceMessageRecorderEvent
|
||||||
import io.element.android.libraries.textcomposer.model.VoiceMessageState
|
import io.element.android.libraries.textcomposer.model.VoiceMessageState
|
||||||
import io.element.android.libraries.voiceplayer.api.VoiceMessageException
|
import io.element.android.libraries.voiceplayer.api.VoiceMessageException
|
||||||
|
import io.element.android.libraries.voicerecorder.api.VoiceRecorder
|
||||||
import io.element.android.libraries.voicerecorder.test.FakeVoiceRecorder
|
import io.element.android.libraries.voicerecorder.test.FakeVoiceRecorder
|
||||||
import io.element.android.services.analytics.test.FakeAnalyticsService
|
import io.element.android.services.analytics.test.FakeAnalyticsService
|
||||||
import io.element.android.tests.testutils.WarmUpRule
|
import io.element.android.tests.testutils.WarmUpRule
|
||||||
|
|
@ -112,6 +113,30 @@ class DefaultVoiceMessageComposerPresenterTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `present - recording state - number of levels is limited`() = runTest {
|
||||||
|
val numberOfLevels = 200
|
||||||
|
val levels = List(numberOfLevels) { it / numberOfLevels.toFloat() }
|
||||||
|
val voiceRecorder = FakeVoiceRecorder(
|
||||||
|
levels = levels,
|
||||||
|
recordingDuration = RECORDING_DURATION,
|
||||||
|
)
|
||||||
|
val presenter = createDefaultVoiceMessageComposerPresenter(
|
||||||
|
voiceRecorder = voiceRecorder,
|
||||||
|
)
|
||||||
|
presenter.test {
|
||||||
|
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
|
skipItems(numberOfLevels / 2 - 1)
|
||||||
|
val finalState = awaitItem()
|
||||||
|
assertThat(finalState.voiceMessageState).isInstanceOf(VoiceMessageState.Recording::class.java)
|
||||||
|
val recordingState = finalState.voiceMessageState as VoiceMessageState.Recording
|
||||||
|
// The number of levels should be limited to 128 items
|
||||||
|
assertThat(recordingState.levels.size).isEqualTo(128)
|
||||||
|
assertThat(recordingState.levels).isEqualTo(levels.takeLast(128))
|
||||||
|
testPauseAndDestroy(finalState)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - recording keeps screen on`() = runTest {
|
fun `present - recording keeps screen on`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
|
|
@ -614,6 +639,7 @@ class DefaultVoiceMessageComposerPresenterTest {
|
||||||
|
|
||||||
private fun TestScope.createDefaultVoiceMessageComposerPresenter(
|
private fun TestScope.createDefaultVoiceMessageComposerPresenter(
|
||||||
permissionsPresenter: PermissionsPresenter = createFakePermissionsPresenter(),
|
permissionsPresenter: PermissionsPresenter = createFakePermissionsPresenter(),
|
||||||
|
voiceRecorder: VoiceRecorder = this@DefaultVoiceMessageComposerPresenterTest.voiceRecorder,
|
||||||
): DefaultVoiceMessageComposerPresenter {
|
): DefaultVoiceMessageComposerPresenter {
|
||||||
return DefaultVoiceMessageComposerPresenter(
|
return DefaultVoiceMessageComposerPresenter(
|
||||||
sessionCoroutineScope = backgroundScope,
|
sessionCoroutineScope = backgroundScope,
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import io.element.android.libraries.voicerecorder.api.VoiceRecorder
|
||||||
import io.element.android.libraries.voicerecorder.api.VoiceRecorderState
|
import io.element.android.libraries.voicerecorder.api.VoiceRecorderState
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
import kotlinx.coroutines.yield
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
@ -49,6 +50,7 @@ class FakeVoiceRecorder(
|
||||||
timeSource += recordingDuration
|
timeSource += recordingDuration
|
||||||
for (i in 1..levels.size) {
|
for (i in 1..levels.size) {
|
||||||
_state.emit(VoiceRecorderState.Recording(startedAt.elapsedNow(), levels.take(i)))
|
_state.emit(VoiceRecorderState.Recording(startedAt.elapsedNow(), levels.take(i)))
|
||||||
|
yield()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue