diff --git a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/user/ObserveE2EIRequiredUseCase.kt b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/user/ObserveE2EIRequiredUseCase.kt index d6aff7959fd..01b1178a703 100644 --- a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/user/ObserveE2EIRequiredUseCase.kt +++ b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/user/ObserveE2EIRequiredUseCase.kt @@ -96,9 +96,9 @@ internal class ObserveE2EIRequiredUseCaseImpl( } ?: E2EIRequiredResult.NoGracePeriod.Create private fun onUserHasCertificate(certificate: E2eiCertificate) = - if (certificate.endAt <= DateTimeUtil.currentInstant() || certificate.status != CertificateStatus.VALID) { + if (certificate.status == CertificateStatus.EXPIRED) { E2EIRequiredResult.NoGracePeriod.Renew - } else if (certificate.shouldRenew()) { + } else if (certificate.status == CertificateStatus.VALID && certificate.shouldRenew()) { E2EIRequiredResult.WithGracePeriod.Renew(certificate.renewGracePeriodLeft()) } else { E2EIRequiredResult.NotRequired diff --git a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/client/ObserveE2EIRequiredUseCaseTest.kt b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/client/ObserveE2EIRequiredUseCaseTest.kt index ae33bb1cb9f..2eda1d5ee39 100644 --- a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/client/ObserveE2EIRequiredUseCaseTest.kt +++ b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/client/ObserveE2EIRequiredUseCaseTest.kt @@ -49,6 +49,7 @@ import kotlinx.coroutines.test.runTest import kotlinx.datetime.Instant import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertIs import kotlin.test.assertTrue import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.minutes @@ -252,14 +253,17 @@ class ObserveE2EIRequiredUseCaseTest { .withCurrentClientProviderSuccess() .withGetE2EICertificateUseCaseResult( GetE2EICertificateUseCaseResult.Success( - VALID_CERTIFICATE.copy(endAt = DateTimeUtil.currentInstant().minus(1.days)) + VALID_CERTIFICATE.copy( + status = CertificateStatus.EXPIRED, + endAt = DateTimeUtil.currentInstant().minus(1.days) + ) ) ) .arrange() useCase().test { advanceTimeBy(1000L) - assertTrue(awaitItem() is E2EIRequiredResult.NoGracePeriod.Renew) + assertIs(awaitItem()) awaitComplete() } } @@ -288,6 +292,30 @@ class ObserveE2EIRequiredUseCaseTest { } } + @Test + fun givenCertRevoked_thenReturnNotRequired() = runTest { + val setting = MLS_E2EI_SETTING.copy( + gracePeriodEnd = DateTimeUtil.currentInstant() + ) + val (_, useCase) = Arrangement() + .withMLSE2EISetting(setting) + .withE2EINotificationTime(DateTimeUtil.currentInstant()) + .withIsMLSSupported(true) + .withCurrentClientProviderSuccess() + .withGetE2EICertificateUseCaseResult( + GetE2EICertificateUseCaseResult.Success( + VALID_CERTIFICATE.copy(status = CertificateStatus.REVOKED) + ) + ) + .arrange() + + useCase().test { + advanceTimeBy(1000L) + assertIs(awaitItem()) + awaitComplete() + } + } + private class Arrangement(testDispatcher: CoroutineDispatcher = UnconfinedTestDispatcher()) { @Mock val userConfigRepository = mock(UserConfigRepository::class)