From 6192d8335d1da08f68af758140718c8d68bc50fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Saleniuk?= Date: Tue, 22 Oct 2024 13:12:56 +0200 Subject: [PATCH 1/2] fix: return all incoming calls [WPB-10430] --- .../logic/feature/call/usecase/GetIncomingCallsUseCase.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/call/usecase/GetIncomingCallsUseCase.kt b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/call/usecase/GetIncomingCallsUseCase.kt index e3984958de5..0aea1f39c30 100644 --- a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/call/usecase/GetIncomingCallsUseCase.kt +++ b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/call/usecase/GetIncomingCallsUseCase.kt @@ -82,9 +82,7 @@ internal class GetIncomingCallsUseCaseImpl internal constructor( val callIds = calls.map { call -> call.conversationId }.joinToString() logger.d("$TAG; Found calls: $callIds") } - .distinctUntilChanged { old, new -> - old.firstOrNull()?.conversationId == new.firstOrNull()?.conversationId - } + .distinctUntilChanged() } private fun Flow>.onlyCallsInNotMutedConversations(): Flow> = From 74b70fcc93bfc9ba4847d303b82f540aee3d1c42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Saleniuk?= Date: Tue, 22 Oct 2024 13:25:42 +0200 Subject: [PATCH 2/2] add test --- .../usecase/GetIncomingCallsUseCaseTest.kt | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/call/usecase/GetIncomingCallsUseCaseTest.kt b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/call/usecase/GetIncomingCallsUseCaseTest.kt index 18c1ea18758..98387f073e2 100644 --- a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/call/usecase/GetIncomingCallsUseCaseTest.kt +++ b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/call/usecase/GetIncomingCallsUseCaseTest.kt @@ -36,6 +36,7 @@ import io.mockative.Mock import io.mockative.any import io.mockative.coEvery import io.mockative.mock +import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest @@ -74,6 +75,31 @@ class GetIncomingCallsUseCaseTest { } } + @Test + fun givenIncomingCall_whenInvokingGetIncomingCallsUseCaseAndAnotherCallAppears_thenPropagateUpdatedList() = runTest { + val incomingCallsFlow = MutableStateFlow(listOf(incomingCall(0))) + val (_, getIncomingCalls) = Arrangement() + .withSelfUserStatus(UserAvailabilityStatus.AVAILABLE) + .withConversationDetails { id -> Either.Right(conversationWithMuteStatus(id, MutedConversationStatus.AllAllowed)) } + .withIncomingCallsFlow(incomingCallsFlow) + .arrange() + + getIncomingCalls().test { + // initially there is only one incoming call + awaitItem().let { + assertEquals(1, it.size) + assertEquals(TestConversation.id(0), it[0].conversationId) + } + // then new incoming call appears + incomingCallsFlow.value = listOf(incomingCall(0), incomingCall(1)) + awaitItem().let { + assertEquals(2, it.size) + assertEquals(TestConversation.id(0), it[0].conversationId) + assertEquals(TestConversation.id(1), it[1].conversationId) + } + } + } + @Test fun givenUserWithAwayStatus_whenIncomingCallComes_thenNoCallsPropagated() = runTest { val (_, getIncomingCalls) = Arrangement() @@ -198,6 +224,12 @@ class GetIncomingCallsUseCaseTest { return this } + suspend fun withIncomingCallsFlow(callsFlow: Flow>): Arrangement = apply { + coEvery { + callRepository.incomingCallsFlow() + }.returns(callsFlow) + } + suspend fun withSelfUserStatus(status: UserAvailabilityStatus): Arrangement { coEvery { userRepository.observeSelfUser()