From aa3699e20cd4f625ee68097c88c98939b310d6dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Zag=C3=B3rski?= Date: Tue, 15 Oct 2024 22:20:01 +0200 Subject: [PATCH] fix: Asset message resend transfer status #WPB-11035 --- .../message/RetryFailedMessageUseCase.kt | 5 ++- .../message/RetryFailedMessageUseCaseTest.kt | 32 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/message/RetryFailedMessageUseCase.kt b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/message/RetryFailedMessageUseCase.kt index 1d11875af16..e95424de105 100644 --- a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/message/RetryFailedMessageUseCase.kt +++ b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/message/RetryFailedMessageUseCase.kt @@ -178,7 +178,10 @@ class RetryFailedMessageUseCase internal constructor( else -> handleError("Asset message with transfer status $assetTransferStatus cannot be retried") } - .onSuccess { retrySendingMessage(it) } + .onSuccess { + updateAssetMessageTransferStatus(AssetTransferStatus.UPLOADED, message.conversationId, message.id) + retrySendingMessage(it) + } .map { /* returns Unit */ } } diff --git a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/message/RetryFailedMessageUseCaseTest.kt b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/message/RetryFailedMessageUseCaseTest.kt index 998ca1eaa0a..885b586b299 100644 --- a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/message/RetryFailedMessageUseCaseTest.kt +++ b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/message/RetryFailedMessageUseCaseTest.kt @@ -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) {