Merge pull request #591 from vector-im/feature/bma/noDelayInTests

No delay in tests
This commit is contained in:
Benoit Marty 2023-06-15 15:27:41 +02:00 committed by GitHub
commit 97923af7d8
25 changed files with 169 additions and 180 deletions

View file

@ -16,7 +16,6 @@
package io.element.android.libraries.matrix.test
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.SessionId

View file

@ -55,8 +55,6 @@ const val AN_AVATAR_URL = "mxc://data"
const val A_FAILURE_REASON = "There has been a failure"
const val FAKE_DELAY_IN_MS = 100L
val A_THROWABLE = Throwable(A_FAILURE_REASON)
val AN_EXCEPTION = Exception(A_FAILURE_REASON)

View file

@ -22,8 +22,7 @@ import io.element.android.libraries.matrix.api.auth.MatrixHomeServerDetails
import io.element.android.libraries.matrix.api.auth.OidcDetails
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.test.A_USER_ID
import io.element.android.libraries.matrix.test.FAKE_DELAY_IN_MS
import kotlinx.coroutines.delay
import io.element.android.tests.testutils.simulateLongTask
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@ -58,27 +57,24 @@ class FakeAuthenticationService : MatrixAuthenticationService {
this.homeserver.value = homeserver
}
override suspend fun setHomeserver(homeserver: String): Result<Unit> {
delay(FAKE_DELAY_IN_MS)
return changeServerError?.let { Result.failure(it) } ?: Result.success(Unit)
override suspend fun setHomeserver(homeserver: String): Result<Unit> = simulateLongTask {
changeServerError?.let { Result.failure(it) } ?: Result.success(Unit)
}
override suspend fun login(username: String, password: String): Result<SessionId> {
delay(FAKE_DELAY_IN_MS)
return loginError?.let { Result.failure(it) } ?: Result.success(A_USER_ID)
override suspend fun login(username: String, password: String): Result<SessionId> = simulateLongTask {
loginError?.let { Result.failure(it) } ?: Result.success(A_USER_ID)
}
override suspend fun getOidcUrl(): Result<OidcDetails> {
return oidcError?.let { Result.failure(it) } ?: Result.success(A_OIDC_DATA)
override suspend fun getOidcUrl(): Result<OidcDetails> = simulateLongTask {
oidcError?.let { Result.failure(it) } ?: Result.success(A_OIDC_DATA)
}
override suspend fun cancelOidcLogin(): Result<Unit> {
return oidcCancelError?.let { Result.failure(it) } ?: Result.success(Unit)
}
override suspend fun loginWithOidc(callbackUrl: String): Result<SessionId> {
delay(FAKE_DELAY_IN_MS)
return loginError?.let { Result.failure(it) } ?: Result.success(A_USER_ID)
override suspend fun loginWithOidc(callbackUrl: String): Result<SessionId> = simulateLongTask {
loginError?.let { Result.failure(it) } ?: Result.success(A_USER_ID)
}
fun givenOidcError(throwable: Throwable?) {

View file

@ -19,34 +19,30 @@ package io.element.android.libraries.matrix.test.media
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
import io.element.android.libraries.matrix.api.media.MediaFile
import io.element.android.libraries.matrix.api.media.MediaSource
import io.element.android.libraries.matrix.test.FAKE_DELAY_IN_MS
import kotlinx.coroutines.delay
import io.element.android.tests.testutils.simulateLongTask
class FakeMediaLoader : MatrixMediaLoader {
var shouldFail = false
override suspend fun loadMediaContent(source: MediaSource): Result<ByteArray> {
delay(FAKE_DELAY_IN_MS)
return if (shouldFail) {
override suspend fun loadMediaContent(source: MediaSource): Result<ByteArray> = simulateLongTask {
if (shouldFail) {
Result.failure(RuntimeException())
} else {
Result.success(ByteArray(0))
}
}
override suspend fun loadMediaThumbnail(source: MediaSource, width: Long, height: Long): Result<ByteArray> {
delay(FAKE_DELAY_IN_MS)
return if (shouldFail) {
override suspend fun loadMediaThumbnail(source: MediaSource, width: Long, height: Long): Result<ByteArray> = simulateLongTask {
if (shouldFail) {
Result.failure(RuntimeException())
} else {
Result.success(ByteArray(0))
}
}
override suspend fun downloadMediaFile(source: MediaSource, mimeType: String?, body: String?): Result<MediaFile> {
delay(FAKE_DELAY_IN_MS)
return if (shouldFail) {
override suspend fun downloadMediaFile(source: MediaSource, mimeType: String?, body: String?): Result<MediaFile> = simulateLongTask {
if (shouldFail) {
Result.failure(RuntimeException())
} else {
Result.success(FakeMediaFile(""))

View file

@ -30,9 +30,8 @@ import io.element.android.libraries.matrix.api.room.StateEventType
import io.element.android.libraries.matrix.api.timeline.MatrixTimeline
import io.element.android.libraries.matrix.test.A_ROOM_ID
import io.element.android.libraries.matrix.test.A_SESSION_ID
import io.element.android.libraries.matrix.test.FAKE_DELAY_IN_MS
import io.element.android.libraries.matrix.test.timeline.FakeMatrixTimeline
import kotlinx.coroutines.delay
import io.element.android.tests.testutils.simulateLongTask
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.emptyFlow
@ -111,8 +110,8 @@ class FakeMatrixRoom(
override val membersStateFlow: MutableStateFlow<MatrixRoomMembersState> = MutableStateFlow(MatrixRoomMembersState.Unknown)
override suspend fun updateMembers(): Result<Unit> {
return updateMembersResult
override suspend fun updateMembers(): Result<Unit> = simulateLongTask {
updateMembersResult
}
override fun syncUpdateFlow(): Flow<Long> {
@ -123,17 +122,16 @@ class FakeMatrixRoom(
return matrixTimeline
}
override suspend fun userDisplayName(userId: UserId): Result<String?> {
return userDisplayNameResult
override suspend fun userDisplayName(userId: UserId): Result<String?> = simulateLongTask {
userDisplayNameResult
}
override suspend fun userAvatarUrl(userId: UserId): Result<String?> {
return userAvatarUrlResult
override suspend fun userAvatarUrl(userId: UserId): Result<String?> = simulateLongTask {
userAvatarUrlResult
}
override suspend fun sendMessage(message: String): Result<Unit> {
delay(FAKE_DELAY_IN_MS)
return Result.success(Unit)
override suspend fun sendMessage(message: String): Result<Unit> = simulateLongTask {
Result.success(Unit)
}
override suspend fun sendReaction(emoji: String, eventId: EventId): Result<Unit> {
@ -156,7 +154,6 @@ class FakeMatrixRoom(
override suspend fun editMessage(originalEventId: EventId, message: String): Result<Unit> {
editMessageParameter = message
delay(FAKE_DELAY_IN_MS)
return Result.success(Unit)
}
@ -165,7 +162,6 @@ class FakeMatrixRoom(
override suspend fun replyMessage(eventId: EventId, message: String): Result<Unit> {
replyMessageParameter = message
delay(FAKE_DELAY_IN_MS)
return Result.success(Unit)
}
@ -174,11 +170,11 @@ class FakeMatrixRoom(
override suspend fun redactEvent(eventId: EventId, reason: String?): Result<Unit> {
redactEventEventIdParam = eventId
delay(FAKE_DELAY_IN_MS)
return Result.success(Unit)
}
override suspend fun leave(): Result<Unit> = leaveRoomError?.let { Result.failure(it) } ?: Result.success(Unit)
override suspend fun acceptInvitation(): Result<Unit> {
isInviteAccepted = true
return acceptInviteResult
@ -189,9 +185,9 @@ class FakeMatrixRoom(
return rejectInviteResult
}
override suspend fun inviteUserById(id: UserId): Result<Unit> {
override suspend fun inviteUserById(id: UserId): Result<Unit> = simulateLongTask {
invitedUserId = id
return inviteUserResult
inviteUserResult
}
override suspend fun canInvite(): Result<Boolean> {
@ -210,31 +206,30 @@ class FakeMatrixRoom(
override suspend fun sendFile(file: File, fileInfo: FileInfo): Result<Unit> = fakeSendMedia()
private suspend fun fakeSendMedia(): Result<Unit> {
delay(FAKE_DELAY_IN_MS)
return sendMediaResult.onSuccess {
private suspend fun fakeSendMedia(): Result<Unit> = simulateLongTask {
sendMediaResult.onSuccess {
sendMediaCount++
}
}
override suspend fun updateAvatar(mimeType: String, data: ByteArray): Result<Unit> {
override suspend fun updateAvatar(mimeType: String, data: ByteArray): Result<Unit> = simulateLongTask {
newAvatarData = data
return updateAvatarResult
updateAvatarResult
}
override suspend fun removeAvatar(): Result<Unit> {
override suspend fun removeAvatar(): Result<Unit> = simulateLongTask {
removedAvatar = true
return removeAvatarResult
removeAvatarResult
}
override suspend fun setName(name: String): Result<Unit> {
override suspend fun setName(name: String): Result<Unit> = simulateLongTask {
newName = name
return setNameResult
setNameResult
}
override suspend fun setTopic(topic: String): Result<Unit> {
override suspend fun setTopic(topic: String): Result<Unit> = simulateLongTask {
newTopic = topic
return setTopicResult
setTopicResult
}
override fun close() = Unit

View file

@ -24,4 +24,5 @@ android {
dependencies {
api(projects.libraries.mediaupload.api)
implementation(projects.tests.testutils)
}

View file

@ -20,6 +20,7 @@ import android.net.Uri
import io.element.android.libraries.matrix.api.media.FileInfo
import io.element.android.libraries.mediaupload.api.MediaPreProcessor
import io.element.android.libraries.mediaupload.api.MediaUploadInfo
import io.element.android.tests.testutils.simulateLongTask
import java.io.File
class FakeMediaPreProcessor : MediaPreProcessor {
@ -41,7 +42,9 @@ class FakeMediaPreProcessor : MediaPreProcessor {
mimeType: String,
deleteOriginal: Boolean,
compressIfPossible: Boolean
): Result<MediaUploadInfo> = result
): Result<MediaUploadInfo> = simulateLongTask {
result
}
fun givenResult(value: Result<MediaUploadInfo>) {
this.result = value