Skip to content

Commit

Permalink
fix: Asset message resend transfer status #WPB-11035 (#3063)
Browse files Browse the repository at this point in the history
* fix: Asset message resend transfer status #WPB-11035

* Code review
  • Loading branch information
m-zagorski authored Oct 30, 2024
1 parent 9a517ea commit 3528f01
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ class RetryFailedMessageUseCase internal constructor(
.map { updatedMessage } // we need to persist new asset remoteData and status
}
}
.onSuccess { updateAssetMessageTransferStatus(AssetTransferStatus.UPLOADED, message.conversationId, message.id) }
.onFailure {
kaliumLogger.e("Failed to retry sending asset message. Failure = $it")
updateAssetMessageTransferStatus(AssetTransferStatus.FAILED_UPLOAD, message.conversationId, message.id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,38 @@ class RetryFailedMessageUseCaseTest {
}.wasInvoked(exactly = once)
}

@Test
fun givenAValidFailedAndNotUploadedAssetMessage_whenSuccessfullyUploadedAsset_thenAssetTransferShouldBeChangedToUploaded() =
runTest(testDispatcher.default) {
// given
val name = "some_asset.txt"
val content = MessageContent.Asset(ASSET_CONTENT.value.copy(name = name))
val path = fakeKaliumFileSystem.providePersistentAssetPath(name)
val message = assetMessage().copy(content = content, status = Message.Status.Failed)
val uploadedAssetId = UploadedAssetId("remote_key", "remote_domain", "remote_token")
val uploadedAssetSha = SHA256Key(byteArrayOf())
val (arrangement, useCase) = Arrangement()
.withGetMessageById(Either.Right(message))
.withUpdateMessageStatus(Either.Right(Unit))
.withUpdateAssetMessageTransferStatus(UpdateTransferStatusResult.Success)
.withFetchPrivateDecodedAsset(Either.Right(path))
.withStoredData(mockedLongAssetData(), path)
.withGetAssetMessageTransferStatus(AssetTransferStatus.FAILED_UPLOAD)
.withUploadAndPersistPrivateAsset(Either.Right(uploadedAssetId to uploadedAssetSha))
.withPersistMessage(Either.Right(Unit))
.withSendMessage(Either.Right(Unit))
.arrange()

// when
useCase.invoke(message.id, message.conversationId)
advanceUntilIdle()

// then
coVerify {
arrangement.updateAssetMessageTransferStatus.invoke(AssetTransferStatus.UPLOADED, message.conversationId, message.id)
}.wasInvoked(exactly = once)
}

@Test
fun givenAValidFailedAndNotUploadedAssetMessage_whenRetryingFailedMessage_thenUploadAssetAndSendAMessageWithProperAssetRemoteData() =
runTest(testDispatcher.default) {
Expand Down

0 comments on commit 3528f01

Please sign in to comment.