diff --git a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/conversation/ObserveConversationMembersUseCase.kt b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/conversation/ObserveConversationMembersUseCase.kt index 3da09b268fb..448b64e587d 100644 --- a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/conversation/ObserveConversationMembersUseCase.kt +++ b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/conversation/ObserveConversationMembersUseCase.kt @@ -25,6 +25,7 @@ import com.wire.kalium.logic.data.user.UserRepository import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.map @@ -55,6 +56,6 @@ class ObserveConversationMembersUseCaseImpl internal constructor( } }.flatMapLatest { detailsFlows -> combine(detailsFlows) { it.toList() } - } + }.distinctUntilChanged() } } diff --git a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/conversation/ObserveConversationMembersUseCaseTest.kt b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/conversation/ObserveConversationMembersUseCaseTest.kt index 63662caa45d..b505f019874 100644 --- a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/conversation/ObserveConversationMembersUseCaseTest.kt +++ b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/conversation/ObserveConversationMembersUseCaseTest.kt @@ -171,4 +171,37 @@ class ObserveConversationMembersUseCaseTest { awaitComplete() } } + + + @Test + fun givenAConversationID_whenObservingMembersAnDataDidNotChange_thenDoNotEmitTheSameValuesAgain() = runTest { + val conversationID = TestConversation.ID + val otherUser = TestUser.OTHER + val selfUser = TestUser.SELF + val membersListChannel = Channel>(Channel.UNLIMITED) + + coEvery { + userRepository.observeUser(eq(TestUser.SELF.id)) + }.returns(flowOf(selfUser)) + + coEvery { + userRepository.observeUser(eq(otherUser.id)) + }.returns(flowOf(otherUser)) + + coEvery { + conversationRepository.observeConversationMembers(eq(conversationID)) + }.returns(membersListChannel.consumeAsFlow()) + + observeConversationMembers(conversationID).test { + + membersListChannel.send(listOf(Member(otherUser.id, Member.Role.Member))) + assertContentEquals(listOf(MemberDetails(otherUser, Member.Role.Member)), awaitItem()) + + membersListChannel.send(listOf(Member(otherUser.id, Member.Role.Member))) + expectNoEvents() + + membersListChannel.close() + awaitComplete() + } + } }