|
|
|
@ -32,7 +32,6 @@ import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
@@ -32,7 +32,6 @@ import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
|
|
|
|
|
import io.element.android.libraries.matrix.api.timeline.ReceiptType |
|
|
|
|
import io.element.android.libraries.matrix.api.timeline.Timeline |
|
|
|
|
import io.element.android.libraries.matrix.test.media.FakeMediaUploadHandler |
|
|
|
|
import io.element.android.tests.testutils.simulateLongTask |
|
|
|
|
import kotlinx.coroutines.flow.Flow |
|
|
|
|
import kotlinx.coroutines.flow.MutableSharedFlow |
|
|
|
|
import kotlinx.coroutines.flow.MutableStateFlow |
|
|
|
@ -55,14 +54,37 @@ class FakeTimeline(
@@ -55,14 +54,37 @@ class FakeTimeline(
|
|
|
|
|
), |
|
|
|
|
override val membershipChangeEventReceived: Flow<Unit> = MutableSharedFlow(), |
|
|
|
|
) : Timeline { |
|
|
|
|
var sendMessageLambda: ( |
|
|
|
|
body: String, |
|
|
|
|
htmlBody: String?, |
|
|
|
|
mentions: List<Mention>, |
|
|
|
|
) -> Result<Unit> = { _, _, _ -> |
|
|
|
|
Result.success(Unit) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var sendMessageLambda: (body: String, htmlBody: String?, mentions: List<Mention>) -> Result<Unit> = { _, _, _ -> Result.success(Unit) } |
|
|
|
|
override suspend fun sendMessage(body: String, htmlBody: String?, mentions: List<Mention>): Result<Unit> = sendMessageLambda(body, htmlBody, mentions) |
|
|
|
|
|
|
|
|
|
var editMessageLambda: (originalEventId: EventId?, transactionId: TransactionId?, body: String, htmlBody: String?, mentions: List<Mention>) -> Result<Unit> = |
|
|
|
|
{ _, _, _, _, _ -> Result.success(Unit) } |
|
|
|
|
override suspend fun sendMessage( |
|
|
|
|
body: String, |
|
|
|
|
htmlBody: String?, |
|
|
|
|
mentions: List<Mention>, |
|
|
|
|
): Result<Unit> = sendMessageLambda(body, htmlBody, mentions) |
|
|
|
|
|
|
|
|
|
var editMessageLambda: ( |
|
|
|
|
originalEventId: EventId?, |
|
|
|
|
transactionId: TransactionId?, |
|
|
|
|
body: String, |
|
|
|
|
htmlBody: String?, |
|
|
|
|
mentions: List<Mention>, |
|
|
|
|
) -> Result<Unit> = { _, _, _, _, _ -> |
|
|
|
|
Result.success(Unit) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun editMessage(originalEventId: EventId?, transactionId: TransactionId?, body: String, htmlBody: String?, mentions: List<Mention>): Result<Unit> = editMessageLambda( |
|
|
|
|
override suspend fun editMessage( |
|
|
|
|
originalEventId: EventId?, |
|
|
|
|
transactionId: TransactionId?, |
|
|
|
|
body: String, |
|
|
|
|
htmlBody: String?, |
|
|
|
|
mentions: List<Mention>, |
|
|
|
|
): Result<Unit> = editMessageLambda( |
|
|
|
|
originalEventId, |
|
|
|
|
transactionId, |
|
|
|
|
body, |
|
|
|
@ -70,23 +92,52 @@ class FakeTimeline(
@@ -70,23 +92,52 @@ class FakeTimeline(
|
|
|
|
|
mentions |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var enterSpecialModeLambda: (eventId: EventId?) -> Result<Unit> = { Result.success(Unit) } |
|
|
|
|
var enterSpecialModeLambda: (eventId: EventId?) -> Result<Unit> = { |
|
|
|
|
Result.success(Unit) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun enterSpecialMode(eventId: EventId?): Result<Unit> = enterSpecialModeLambda(eventId) |
|
|
|
|
|
|
|
|
|
var replyMessageLambda: (eventId: EventId, body: String, htmlBody: String?, mentions: List<Mention>) -> Result<Unit> = |
|
|
|
|
{ _, _, _, _ -> Result.success(Unit) } |
|
|
|
|
var replyMessageLambda: ( |
|
|
|
|
eventId: EventId, |
|
|
|
|
body: String, |
|
|
|
|
htmlBody: String?, |
|
|
|
|
mentions: List<Mention>, |
|
|
|
|
) -> Result<Unit> = { _, _, _, _ -> |
|
|
|
|
Result.success(Unit) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun replyMessage(eventId: EventId, body: String, htmlBody: String?, mentions: List<Mention>): Result<Unit> = replyMessageLambda( |
|
|
|
|
override suspend fun replyMessage( |
|
|
|
|
eventId: EventId, |
|
|
|
|
body: String, |
|
|
|
|
htmlBody: String?, |
|
|
|
|
mentions: List<Mention>, |
|
|
|
|
): Result<Unit> = replyMessageLambda( |
|
|
|
|
eventId, |
|
|
|
|
body, |
|
|
|
|
htmlBody, |
|
|
|
|
mentions |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var sendImageLambda: (file: File, thumbnailFile: File?, imageInfo: ImageInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?) -> Result<MediaUploadHandler> = |
|
|
|
|
{ _, _, _, _, _, _ -> Result.success(FakeMediaUploadHandler()) } |
|
|
|
|
var sendImageLambda: ( |
|
|
|
|
file: File, |
|
|
|
|
thumbnailFile: File?, |
|
|
|
|
imageInfo: ImageInfo, |
|
|
|
|
body: String?, |
|
|
|
|
formattedBody: String?, |
|
|
|
|
progressCallback: ProgressCallback?, |
|
|
|
|
) -> Result<MediaUploadHandler> = { _, _, _, _, _, _ -> |
|
|
|
|
Result.success(FakeMediaUploadHandler()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun sendImage(file: File, thumbnailFile: File?, imageInfo: ImageInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?): Result<MediaUploadHandler> = sendImageLambda( |
|
|
|
|
override suspend fun sendImage( |
|
|
|
|
file: File, |
|
|
|
|
thumbnailFile: File?, |
|
|
|
|
imageInfo: ImageInfo, |
|
|
|
|
body: String?, |
|
|
|
|
formattedBody: String?, |
|
|
|
|
progressCallback: ProgressCallback?, |
|
|
|
|
): Result<MediaUploadHandler> = sendImageLambda( |
|
|
|
|
file, |
|
|
|
|
thumbnailFile, |
|
|
|
|
imageInfo, |
|
|
|
@ -95,10 +146,25 @@ class FakeTimeline(
@@ -95,10 +146,25 @@ class FakeTimeline(
|
|
|
|
|
progressCallback |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var sendVideoLambda: (file: File, thumbnailFile: File?, videoInfo: VideoInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?) -> Result<MediaUploadHandler> = |
|
|
|
|
{ _, _, _, _, _, _ -> Result.success(FakeMediaUploadHandler()) } |
|
|
|
|
var sendVideoLambda: ( |
|
|
|
|
file: File, |
|
|
|
|
thumbnailFile: File?, |
|
|
|
|
videoInfo: VideoInfo, |
|
|
|
|
body: String?, |
|
|
|
|
formattedBody: String?, |
|
|
|
|
progressCallback: ProgressCallback?, |
|
|
|
|
) -> Result<MediaUploadHandler> = { _, _, _, _, _, _ -> |
|
|
|
|
Result.success(FakeMediaUploadHandler()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun sendVideo(file: File, thumbnailFile: File?, videoInfo: VideoInfo, body: String?, formattedBody: String?, progressCallback: ProgressCallback?): Result<MediaUploadHandler> = sendVideoLambda( |
|
|
|
|
override suspend fun sendVideo( |
|
|
|
|
file: File, |
|
|
|
|
thumbnailFile: File?, |
|
|
|
|
videoInfo: VideoInfo, |
|
|
|
|
body: String?, |
|
|
|
|
formattedBody: String?, |
|
|
|
|
progressCallback: ProgressCallback?, |
|
|
|
|
): Result<MediaUploadHandler> = sendVideoLambda( |
|
|
|
|
file, |
|
|
|
|
thumbnailFile, |
|
|
|
|
videoInfo, |
|
|
|
@ -107,19 +173,37 @@ class FakeTimeline(
@@ -107,19 +173,37 @@ class FakeTimeline(
|
|
|
|
|
progressCallback |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var sendAudioLambda: (file: File, audioInfo: AudioInfo, progressCallback: ProgressCallback?) -> Result<MediaUploadHandler> = |
|
|
|
|
{ _, _, _ -> Result.success(FakeMediaUploadHandler()) } |
|
|
|
|
var sendAudioLambda: ( |
|
|
|
|
file: File, |
|
|
|
|
audioInfo: AudioInfo, |
|
|
|
|
progressCallback: ProgressCallback?, |
|
|
|
|
) -> Result<MediaUploadHandler> = { _, _, _ -> |
|
|
|
|
Result.success(FakeMediaUploadHandler()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun sendAudio(file: File, audioInfo: AudioInfo, progressCallback: ProgressCallback?): Result<MediaUploadHandler> = sendAudioLambda( |
|
|
|
|
override suspend fun sendAudio( |
|
|
|
|
file: File, |
|
|
|
|
audioInfo: AudioInfo, |
|
|
|
|
progressCallback: ProgressCallback?, |
|
|
|
|
): Result<MediaUploadHandler> = sendAudioLambda( |
|
|
|
|
file, |
|
|
|
|
audioInfo, |
|
|
|
|
progressCallback |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var sendFileLambda: (file: File, fileInfo: FileInfo, progressCallback: ProgressCallback?) -> Result<MediaUploadHandler> = |
|
|
|
|
{ _, _, _ -> Result.success(FakeMediaUploadHandler()) } |
|
|
|
|
var sendFileLambda: ( |
|
|
|
|
file: File, |
|
|
|
|
fileInfo: FileInfo, |
|
|
|
|
progressCallback: ProgressCallback?, |
|
|
|
|
) -> Result<MediaUploadHandler> = { _, _, _ -> |
|
|
|
|
Result.success(FakeMediaUploadHandler()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun sendFile(file: File, fileInfo: FileInfo, progressCallback: ProgressCallback?): Result<MediaUploadHandler> = sendFileLambda( |
|
|
|
|
override suspend fun sendFile( |
|
|
|
|
file: File, |
|
|
|
|
fileInfo: FileInfo, |
|
|
|
|
progressCallback: ProgressCallback?, |
|
|
|
|
): Result<MediaUploadHandler> = sendFileLambda( |
|
|
|
|
file, |
|
|
|
|
fileInfo, |
|
|
|
|
progressCallback |
|
|
|
@ -137,10 +221,23 @@ class FakeTimeline(
@@ -137,10 +221,23 @@ class FakeTimeline(
|
|
|
|
|
var cancelSendLambda: (transactionId: TransactionId) -> Result<Unit> = { Result.success(Unit) } |
|
|
|
|
override suspend fun cancelSend(transactionId: TransactionId): Result<Unit> = cancelSendLambda(transactionId) |
|
|
|
|
|
|
|
|
|
var sendLocationLambda: (body: String, geoUri: String, description: String?, zoomLevel: Int?, assetType: AssetType?) -> Result<Unit> = |
|
|
|
|
{ _, _, _, _, _ -> Result.success(Unit) } |
|
|
|
|
var sendLocationLambda: ( |
|
|
|
|
body: String, |
|
|
|
|
geoUri: String, |
|
|
|
|
description: String?, |
|
|
|
|
zoomLevel: Int?, |
|
|
|
|
assetType: AssetType?, |
|
|
|
|
) -> Result<Unit> = { _, _, _, _, _ -> |
|
|
|
|
Result.success(Unit) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun sendLocation(body: String, geoUri: String, description: String?, zoomLevel: Int?, assetType: AssetType?): Result<Unit> = sendLocationLambda( |
|
|
|
|
override suspend fun sendLocation( |
|
|
|
|
body: String, |
|
|
|
|
geoUri: String, |
|
|
|
|
description: String?, |
|
|
|
|
zoomLevel: Int?, |
|
|
|
|
assetType: AssetType?, |
|
|
|
|
): Result<Unit> = sendLocationLambda( |
|
|
|
|
body, |
|
|
|
|
geoUri, |
|
|
|
|
description, |
|
|
|
@ -148,20 +245,44 @@ class FakeTimeline(
@@ -148,20 +245,44 @@ class FakeTimeline(
|
|
|
|
|
assetType |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var createPollLambda: (question: String, answers: List<String>, maxSelections: Int, pollKind: PollKind) -> Result<Unit> = |
|
|
|
|
{ _, _, _, _ -> Result.success(Unit) } |
|
|
|
|
var createPollLambda: ( |
|
|
|
|
question: String, |
|
|
|
|
answers: List<String>, |
|
|
|
|
maxSelections: Int, |
|
|
|
|
pollKind: PollKind, |
|
|
|
|
) -> Result<Unit> = { _, _, _, _ -> |
|
|
|
|
Result.success(Unit) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun createPoll(question: String, answers: List<String>, maxSelections: Int, pollKind: PollKind): Result<Unit> = createPollLambda( |
|
|
|
|
override suspend fun createPoll( |
|
|
|
|
question: String, |
|
|
|
|
answers: List<String>, |
|
|
|
|
maxSelections: Int, |
|
|
|
|
pollKind: PollKind, |
|
|
|
|
): Result<Unit> = createPollLambda( |
|
|
|
|
question, |
|
|
|
|
answers, |
|
|
|
|
maxSelections, |
|
|
|
|
pollKind |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var editPollLambda: (pollStartId: EventId, question: String, answers: List<String>, maxSelections: Int, pollKind: PollKind) -> Result<Unit> = |
|
|
|
|
{ _, _, _, _, _ -> Result.success(Unit) } |
|
|
|
|
var editPollLambda: ( |
|
|
|
|
pollStartId: EventId, |
|
|
|
|
question: String, |
|
|
|
|
answers: List<String>, |
|
|
|
|
maxSelections: Int, |
|
|
|
|
pollKind: PollKind, |
|
|
|
|
) -> Result<Unit> = { _, _, _, _, _ -> |
|
|
|
|
Result.success(Unit) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun editPoll(pollStartId: EventId, question: String, answers: List<String>, maxSelections: Int, pollKind: PollKind): Result<Unit> = editPollLambda( |
|
|
|
|
override suspend fun editPoll( |
|
|
|
|
pollStartId: EventId, |
|
|
|
|
question: String, |
|
|
|
|
answers: List<String>, |
|
|
|
|
maxSelections: Int, |
|
|
|
|
pollKind: PollKind, |
|
|
|
|
): Result<Unit> = editPollLambda( |
|
|
|
|
pollStartId, |
|
|
|
|
question, |
|
|
|
|
answers, |
|
|
|
@ -169,29 +290,67 @@ class FakeTimeline(
@@ -169,29 +290,67 @@ class FakeTimeline(
|
|
|
|
|
pollKind |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var sendPollResponseLambda: (pollStartId: EventId, answers: List<String>) -> Result<Unit> = { _, _ -> Result.success(Unit) } |
|
|
|
|
override suspend fun sendPollResponse(pollStartId: EventId, answers: List<String>): Result<Unit> = sendPollResponseLambda(pollStartId, answers) |
|
|
|
|
var sendPollResponseLambda: ( |
|
|
|
|
pollStartId: EventId, |
|
|
|
|
answers: List<String>, |
|
|
|
|
) -> Result<Unit> = { _, _ -> |
|
|
|
|
Result.success(Unit) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun sendPollResponse( |
|
|
|
|
pollStartId: EventId, |
|
|
|
|
answers: List<String>, |
|
|
|
|
): Result<Unit> = sendPollResponseLambda(pollStartId, answers) |
|
|
|
|
|
|
|
|
|
var endPollLambda: (pollStartId: EventId, text: String) -> Result<Unit> = { _, _ -> Result.success(Unit) } |
|
|
|
|
override suspend fun endPoll(pollStartId: EventId, text: String): Result<Unit> = endPollLambda(pollStartId, text) |
|
|
|
|
var endPollLambda: ( |
|
|
|
|
pollStartId: EventId, |
|
|
|
|
text: String, |
|
|
|
|
) -> Result<Unit> = { _, _ -> |
|
|
|
|
Result.success(Unit) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var sendVoiceMessageLambda: (file: File, audioInfo: AudioInfo, waveform: List<Float>, progressCallback: ProgressCallback?) -> Result<MediaUploadHandler> = |
|
|
|
|
{ _, _, _, _ -> Result.success(FakeMediaUploadHandler()) } |
|
|
|
|
override suspend fun endPoll( |
|
|
|
|
pollStartId: EventId, |
|
|
|
|
text: String, |
|
|
|
|
): Result<Unit> = endPollLambda(pollStartId, text) |
|
|
|
|
|
|
|
|
|
var sendVoiceMessageLambda: ( |
|
|
|
|
file: File, |
|
|
|
|
audioInfo: AudioInfo, |
|
|
|
|
waveform: List<Float>, |
|
|
|
|
progressCallback: ProgressCallback?, |
|
|
|
|
) -> Result<MediaUploadHandler> = { _, _, _, _ -> |
|
|
|
|
Result.success(FakeMediaUploadHandler()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun sendVoiceMessage(file: File, audioInfo: AudioInfo, waveform: List<Float>, progressCallback: ProgressCallback?): Result<MediaUploadHandler> = sendVoiceMessageLambda( |
|
|
|
|
override suspend fun sendVoiceMessage( |
|
|
|
|
file: File, |
|
|
|
|
audioInfo: AudioInfo, |
|
|
|
|
waveform: List<Float>, |
|
|
|
|
progressCallback: ProgressCallback?, |
|
|
|
|
): Result<MediaUploadHandler> = sendVoiceMessageLambda( |
|
|
|
|
file, |
|
|
|
|
audioInfo, |
|
|
|
|
waveform, |
|
|
|
|
progressCallback |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
var sendReadReceiptLambda: (eventId: EventId, receiptType: ReceiptType) -> Result<Unit> = { _, _ -> Result.success(Unit) } |
|
|
|
|
var sendReadReceiptLambda: ( |
|
|
|
|
eventId: EventId, |
|
|
|
|
receiptType: ReceiptType, |
|
|
|
|
) -> Result<Unit> = { _, _ -> |
|
|
|
|
Result.success(Unit) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun sendReadReceipt( |
|
|
|
|
eventId: EventId, |
|
|
|
|
receiptType: ReceiptType, |
|
|
|
|
): Result<Unit> = sendReadReceiptLambda(eventId, receiptType) |
|
|
|
|
|
|
|
|
|
var paginateLambda: (direction: Timeline.PaginationDirection) -> Result<Boolean> = { Result.success(false) } |
|
|
|
|
var paginateLambda: (direction: Timeline.PaginationDirection) -> Result<Boolean> = { |
|
|
|
|
Result.success(false) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override suspend fun paginate(direction: Timeline.PaginationDirection): Result<Boolean> = paginateLambda(direction) |
|
|
|
|
|
|
|
|
|
override fun paginationStatus(direction: Timeline.PaginationDirection): StateFlow<Timeline.PaginationStatus> { |
|
|
|
|