diff --git a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/UserSessionScope.kt b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/UserSessionScope.kt index 289e3a0593d..b3d61a462e8 100644 --- a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/UserSessionScope.kt +++ b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/UserSessionScope.kt @@ -1032,7 +1032,8 @@ class UserSessionScope internal constructor( conversationGroupRepository, conversationRepository, messageRepository, - userRepository + userRepository, + systemMessageInserter ) private val oneOnOneResolver: OneOnOneResolver get() = OneOnOneResolverImpl( diff --git a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/conversation/mls/OneOnOneMigrator.kt b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/conversation/mls/OneOnOneMigrator.kt index 5a9359cb840..5737853c8eb 100644 --- a/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/conversation/mls/OneOnOneMigrator.kt +++ b/logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/conversation/mls/OneOnOneMigrator.kt @@ -24,6 +24,7 @@ import com.wire.kalium.logic.data.conversation.ConversationGroupRepository import com.wire.kalium.logic.data.conversation.ConversationRepository import com.wire.kalium.logic.data.id.ConversationId import com.wire.kalium.logic.data.message.MessageRepository +import com.wire.kalium.logic.data.message.SystemMessageInserter import com.wire.kalium.logic.data.user.OtherUser import com.wire.kalium.logic.data.user.UserRepository import com.wire.kalium.logic.data.user.type.isTeammate @@ -44,7 +45,8 @@ internal class OneOnOneMigratorImpl( private val conversationGroupRepository: ConversationGroupRepository, private val conversationRepository: ConversationRepository, private val messageRepository: MessageRepository, - private val userRepository: UserRepository + private val userRepository: UserRepository, + private val systemMessageInserter: SystemMessageInserter ) : OneOnOneMigrator { override suspend fun migrateToProteus(user: OtherUser): Either = @@ -87,6 +89,12 @@ internal class OneOnOneMigratorImpl( userId = user.id ).map { mlsConversation + }.also { + systemMessageInserter.insertProtocolChangedSystemMessage( + conversationId = mlsConversation, + senderUserId = user.id, + protocol = Conversation.Protocol.MLS + ) } } } diff --git a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/conversation/mls/OneOnOneMigratorTest.kt b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/conversation/mls/OneOnOneMigratorTest.kt index e5207ef75c4..d7f199fa13d 100644 --- a/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/conversation/mls/OneOnOneMigratorTest.kt +++ b/logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/conversation/mls/OneOnOneMigratorTest.kt @@ -132,6 +132,10 @@ class OneOnOneMigratorTest { coVerify { arrangement.messageRepository.moveMessagesToAnotherConversation(any(), any()) }.wasNotInvoked() + + coVerify { + arrangement.systemMessageInserter.insertProtocolChangedSystemMessage(any(), any(), any()) + }.wasNotInvoked() } @Test @@ -141,7 +145,7 @@ class OneOnOneMigratorTest { ) val failure = CoreFailure.MissingClientRegistration - val (_, oneOnOneMigrator) = arrange { + val (arrangement, oneOnOneMigrator) = arrange { withResolveConversationReturning(Either.Left(failure)) } @@ -171,6 +175,10 @@ class OneOnOneMigratorTest { coVerify { arrangement.userRepository.updateActiveOneOnOneConversation(any(), any()) }.wasNotInvoked() + + coVerify { + arrangement.systemMessageInserter.insertProtocolChangedSystemMessage(any(), any(), any()) + }.wasNotInvoked() } @Test @@ -212,6 +220,10 @@ class OneOnOneMigratorTest { coVerify { arrangement.messageRepository.moveMessagesToAnotherConversation(eq(originalConversationId), eq(resolvedConversationId)) }.wasInvoked(exactly = once) + + coVerify { + arrangement.systemMessageInserter.insertProtocolChangedSystemMessage(any(), any(), any()) + }.wasInvoked(exactly = once) } @Test @@ -234,6 +246,10 @@ class OneOnOneMigratorTest { coVerify { arrangement.userRepository.updateActiveOneOnOneConversation(eq(user.id), eq(resolvedConversationId)) }.wasInvoked(exactly = once) + + coVerify { + arrangement.systemMessageInserter.insertProtocolChangedSystemMessage(any(), any(), any()) + }.wasInvoked(exactly = once) } private class Arrangement(private val block: suspend Arrangement.() -> Unit) : @@ -249,7 +265,8 @@ class OneOnOneMigratorTest { conversationGroupRepository = conversationGroupRepository, conversationRepository = conversationRepository, messageRepository = messageRepository, - userRepository = userRepository + userRepository = userRepository, + systemMessageInserter = systemMessageInserter ) } } diff --git a/logic/src/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/repository/MessageRepositoryArrangement.kt b/logic/src/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/repository/MessageRepositoryArrangement.kt index aa947062e5b..5266ec213ac 100644 --- a/logic/src/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/repository/MessageRepositoryArrangement.kt +++ b/logic/src/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/repository/MessageRepositoryArrangement.kt @@ -22,6 +22,7 @@ import com.wire.kalium.logic.StorageFailure import com.wire.kalium.logic.data.id.ConversationId import com.wire.kalium.logic.data.message.Message import com.wire.kalium.logic.data.message.MessageRepository +import com.wire.kalium.logic.data.message.SystemMessageInserter import com.wire.kalium.logic.data.notification.LocalNotification import com.wire.kalium.logic.functional.Either import io.mockative.Mock @@ -37,6 +38,9 @@ internal interface MessageRepositoryArrangement { @Mock val messageRepository: MessageRepository + @Mock + val systemMessageInserter: SystemMessageInserter + suspend fun withGetMessageById( result: Either, messageID: Matcher = AnyMatcher(valueOf()), @@ -68,6 +72,8 @@ internal open class MessageRepositoryArrangementImpl : MessageRepositoryArrangem @Mock override val messageRepository: MessageRepository = mock(MessageRepository::class) + override val systemMessageInserter = mock(SystemMessageInserter::class) + override suspend fun withGetMessageById( result: Either, messageID: Matcher,