From 1df18d6f91a2d81a4eedda56f490a433c37a3a82 Mon Sep 17 00:00:00 2001 From: "sergei.bakhtiarov" Date: Wed, 4 Feb 2026 17:00:21 +0100 Subject: [PATCH] fix: e2ei identity certificate status (WPB-20235) --- .../e2ei/usecase/GetE2EICertificateUseCase.kt | 14 +++++++++++++- .../feature/e2ei/GetE2eiCertificateUseCaseTest.kt | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/e2ei/usecase/GetE2EICertificateUseCase.kt b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/e2ei/usecase/GetE2EICertificateUseCase.kt index 7a0bc1a90c5..923964e021d 100644 --- a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/e2ei/usecase/GetE2EICertificateUseCase.kt +++ b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/e2ei/usecase/GetE2EICertificateUseCase.kt @@ -18,6 +18,7 @@ package com.wire.kalium.logic.feature.e2ei.usecase import com.wire.kalium.common.error.CoreFailure +import com.wire.kalium.common.error.StorageFailure import com.wire.kalium.logic.data.conversation.ClientId import com.wire.kalium.logic.data.conversation.MLSConversationRepository import com.wire.kalium.logic.feature.e2ei.MLSClientIdentity @@ -38,6 +39,12 @@ public sealed class GetMLSClientIdentityResult { public sealed class Failure : GetMLSClientIdentityResult() { public data object IdentityNotFound : Failure() + + /** + * E2EI identity cannot be fetched because there is no common MLS conversation + * with the user whose device identity is being queried. + */ + public data object E2EINotAvailable : Failure() public data class Generic(val coreFailure: CoreFailure) : Failure() } } @@ -52,7 +59,12 @@ internal class GetMLSClientIdentityUseCaseImpl internal constructor( mlsConversationRepository.getClientIdentity(mlsContext, clientId) } .fold( - { GetMLSClientIdentityResult.Failure.Generic(it) }, + { failure -> + when (failure) { + is StorageFailure.DataNotFound -> GetMLSClientIdentityResult.Failure.E2EINotAvailable + else -> GetMLSClientIdentityResult.Failure.Generic(failure) + } + }, { wireIdentity -> wireIdentity?.let { GetMLSClientIdentityResult.Success(MLSClientIdentity.fromWireIdentity(it)) diff --git a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/e2ei/GetE2eiCertificateUseCaseTest.kt b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/e2ei/GetE2eiCertificateUseCaseTest.kt index 1db12d880ba..83f983096ed 100644 --- a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/e2ei/GetE2eiCertificateUseCaseTest.kt +++ b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/e2ei/GetE2eiCertificateUseCaseTest.kt @@ -62,7 +62,7 @@ class GetE2eiCertificateUseCaseTest { } @Test - fun givenRepositoryReturnsStorageFailure_whenRunningUseCase_thenReturnGenericFailure() = runTest { + fun givenRepositoryReturnsStorageDataNotFound_whenRunningUseCase_thenReturnE2EINotAvailable() = runTest { val (arrangement, getE2eiCertificateUseCase) = Arrangement() .withRepositoryFailure(StorageFailure.DataNotFound) .arrange() @@ -73,7 +73,7 @@ class GetE2eiCertificateUseCaseTest { arrangement.mlsConversationRepository.getClientIdentity(any(), any()) }.wasInvoked(once) - assertIs(result) + assertIs(result) } @Test