From 0c61fa75f9d223206f232ef855561527464da7d6 Mon Sep 17 00:00:00 2001 From: Mohamad Jaara Date: Tue, 18 Feb 2025 15:27:33 +0100 Subject: [PATCH 1/2] fix: sending a connection request to already connected user (#3296) --- .../data/connection/ConnectionRepository.kt | 3 +- .../connection/ConnectionRepositoryTest.kt | 53 ++++++++++++------- 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/connection/ConnectionRepository.kt b/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/connection/ConnectionRepository.kt index d1d10216ad..d74d25649d 100644 --- a/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/connection/ConnectionRepository.kt +++ b/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/connection/ConnectionRepository.kt @@ -124,8 +124,7 @@ internal class ConnectionDataSource( return wrapApiRequest { connectionApi.createConnection(userId.toApi()) }.flatMap { connection -> - val connectionSent = connection.copy(status = ConnectionStateDTO.SENT) - handleUserConnectionStatusPersistence(connectionMapper.fromApiToModel(connectionSent)) + handleUserConnectionStatusPersistence(connectionMapper.fromApiToModel(connection)) }.map { } } diff --git a/logic/src/commonTest/kotlin/com/wire/kalium/logic/data/connection/ConnectionRepositoryTest.kt b/logic/src/commonTest/kotlin/com/wire/kalium/logic/data/connection/ConnectionRepositoryTest.kt index 13f3689542..d75bc3b3af 100644 --- a/logic/src/commonTest/kotlin/com/wire/kalium/logic/data/connection/ConnectionRepositoryTest.kt +++ b/logic/src/commonTest/kotlin/com/wire/kalium/logic/data/connection/ConnectionRepositoryTest.kt @@ -55,6 +55,7 @@ import com.wire.kalium.persistence.dao.UserDAO import com.wire.kalium.persistence.dao.conversation.ConversationDAO import com.wire.kalium.persistence.dao.member.MemberEntity import com.wire.kalium.util.time.UNIX_FIRST_DATE +import io.mockative.Matchers import io.mockative.Mock import io.mockative.any import io.mockative.coEvery @@ -62,7 +63,10 @@ import io.mockative.coVerify import io.mockative.eq import io.mockative.fake.valueOf import io.mockative.matchers.AnyMatcher +import io.mockative.matchers.EqualsMatcher +import io.mockative.matchers.Matcher import io.mockative.matchers.PredicateMatcher +import io.mockative.matches import io.mockative.mock import io.mockative.once import io.mockative.twice @@ -126,7 +130,9 @@ class ConnectionRepositoryTest { arrangement .withSuccessfulFetchSelfUserConnectionsResponse(arrangement.stubUserProfileDTO) .withSuccessfulGetConversationById(arrangement.stubConversationID1) - .withSuccessfulCreateConnectionResponse(userId) + .withSuccessfulCreateConnectionResponse( + userId = EqualsMatcher(userId) + ) .withSelfUserTeamId(Either.Right(TestUser.SELF.teamId)) .withFetchSentConversationSucceed() @@ -170,11 +176,15 @@ class ConnectionRepositoryTest { fun givenAConnectionRequest_WhenSendingAConnectionAndPersistingReturnsAnError_thenTheConnectionShouldNotBePersisted() = runTest { // given val userId = NetworkUserId("user_id", "domain_id") + val expectedConnection = Arrangement.stubConnectionOne.copy(status = ConnectionStateDTO.SENT) val (arrangement, connectionRepository) = Arrangement().arrange() arrangement .withSuccessfulFetchSelfUserConnectionsResponse(arrangement.stubUserProfileDTO) .withSuccessfulGetUserById(arrangement.stubUserEntity.id) - .withSuccessfulCreateConnectionResponse(userId) + .withSuccessfulCreateConnectionResponse( + result = expectedConnection, + userId = EqualsMatcher(userId) + ) .withSuccessfulGetConversationById(arrangement.stubConversationID1) .withErrorOnPersistingConnectionResponse(userId) .withSelfUserTeamId(Either.Right(TestUser.SELF.teamId)) @@ -205,7 +215,7 @@ class ConnectionRepositoryTest { // when val result = connectionRepository.updateConnectionStatus(UserId(userId.value, userId.domain), ConnectionState.ACCEPTED) - result.shouldSucceed { arrangement.stubConnectionOne } + result.shouldSucceed { Arrangement.stubConnectionOne } // then coVerify { @@ -328,7 +338,7 @@ class ConnectionRepositoryTest { // when val result = connectionRepository.ignoreConnectionRequest(UserId(userId.value, userId.domain)) - result.shouldSucceed { arrangement.stubConnectionOne } + result.shouldSucceed { Arrangement.stubConnectionOne } // then coVerify { @@ -391,7 +401,7 @@ class ConnectionRepositoryTest { // when val result = connectionRepository.ignoreConnectionRequest(UserId(userId.value, userId.domain)) - result.shouldSucceed { arrangement.stubConnectionOne } + result.shouldSucceed { Arrangement.stubConnectionOne } // then coVerify { @@ -437,7 +447,7 @@ class ConnectionRepositoryTest { // when val result = connectionRepository.ignoreConnectionRequest(UserId(userId.value, userId.domain)) - result.shouldFail { arrangement.stubConnectionOne } + result.shouldFail { Arrangement.stubConnectionOne } // then coVerify { @@ -479,15 +489,7 @@ class ConnectionRepositoryTest { conversationRepository = conversationRepository ) - val stubConnectionOne = ConnectionDTO( - conversationId = "conversationId1", - from = "fromId", - lastUpdate = Instant.UNIX_FIRST_DATE, - qualifiedConversationId = ConversationId("conversationId1", "domain"), - qualifiedToId = NetworkUserId("connectionId1", "domain"), - status = ConnectionStateDTO.ACCEPTED, - toId = "connectionId1" - ) + val stubConnectionTwo = ConnectionDTO( conversationId = "conversationId2", from = "fromId", @@ -554,10 +556,13 @@ class ConnectionRepositoryTest { return this } - suspend fun withSuccessfulCreateConnectionResponse(userId: NetworkUserId): Arrangement { + suspend fun withSuccessfulCreateConnectionResponse( + result: ConnectionDTO = stubConnectionOne, + userId: Matcher + ): Arrangement { coEvery { - connectionApi.createConnection(eq(userId)) - }.returns(NetworkResponse.Success(stubConnectionOne, mapOf(), 200)) + connectionApi.createConnection(matches { userId.matches(it) }) + }.returns(NetworkResponse.Success(result, mapOf(), 200)) return this } @@ -680,5 +685,17 @@ class ConnectionRepositoryTest { } fun arrange() = this to connectionRepository + + companion object { + val stubConnectionOne = ConnectionDTO( + conversationId = "conversationId1", + from = "fromId", + lastUpdate = Instant.UNIX_FIRST_DATE, + qualifiedConversationId = ConversationId("conversationId1", "domain"), + qualifiedToId = NetworkUserId("connectionId1", "domain"), + status = ConnectionStateDTO.ACCEPTED, + toId = "connectionId1" + ) + } } } From 0368eb4a5145996009e6ad035d495bb640a0678e Mon Sep 17 00:00:00 2001 From: Mohamad Jaara Date: Fri, 21 Feb 2025 09:43:03 +0100 Subject: [PATCH 2/2] Trigger CI