From 432c327498df059d3bb03e2e5fa0eb1552930d75 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 11:36:44 +0000 Subject: [PATCH] fix: update group state when fetching conversation during slow sync WPB-11247 (#3029) (#3033) * fix: update group state when fetching conversation during slow sync * test: verify that group state is updated on re-insertion Co-authored-by: Jacob Persson <7156+typfel@users.noreply.github.com> --- .../wire/kalium/persistence/Conversations.sq | 1 + .../persistence/dao/ConversationDAOTest.kt | 43 +++++++++++++------ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Conversations.sq b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Conversations.sq index b80aa3d633..c089835afe 100644 --- a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Conversations.sq +++ b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Conversations.sq @@ -81,6 +81,7 @@ type = excluded.type, team_id = excluded.team_id, mls_group_id = excluded.mls_group_id, mls_epoch = excluded.mls_epoch, +mls_group_state = excluded.mls_group_state, protocol = excluded.protocol, muted_status = excluded.muted_status, muted_time = excluded.muted_time, diff --git a/persistence/src/commonTest/kotlin/com/wire/kalium/persistence/dao/ConversationDAOTest.kt b/persistence/src/commonTest/kotlin/com/wire/kalium/persistence/dao/ConversationDAOTest.kt index 96f79aae34..64a3a78cf6 100644 --- a/persistence/src/commonTest/kotlin/com/wire/kalium/persistence/dao/ConversationDAOTest.kt +++ b/persistence/src/commonTest/kotlin/com/wire/kalium/persistence/dao/ConversationDAOTest.kt @@ -120,6 +120,18 @@ class ConversationDAOTest : BaseDatabaseTest() { assertNull(result) } + @Test + fun givenExistingConversation_WhenReinserting_ThenGroupStateIsUpdated() = runTest { + conversationDAO.insertConversation(conversationEntity2) + conversationDAO.insertConversation(conversationEntity2.copy( + protocolInfo = mlsProtocolInfo1.copy( + groupState = ConversationEntity.GroupState.PENDING_JOIN + ) + )) + val result = conversationDAO.getConversationById(conversationEntity2.id) + assertEquals(ConversationEntity.GroupState.PENDING_JOIN, (result?.protocolInfo as ConversationEntity.ProtocolInfo.MLS).groupState) + } + @Test fun givenExistingConversation_ThenConversationCanBeUpdated() = runTest { conversationDAO.insertConversation(conversationEntity1) @@ -2044,6 +2056,21 @@ class ConversationDAOTest : BaseDatabaseTest() { isMLSCapable = false ) + val mlsProtocolInfo1 = ConversationEntity.ProtocolInfo.MLS( + "group2", + ConversationEntity.GroupState.ESTABLISHED, + 0UL, + Instant.parse("2021-03-30T15:36:00.000Z"), + cipherSuite = ConversationEntity.CipherSuite.MLS_128_DHKEMX25519_AES128GCM_SHA256_Ed25519 + ) + val mlsProtocolInfo2 = ConversationEntity.ProtocolInfo.MLS( + "group3", + ConversationEntity.GroupState.PENDING_JOIN, + 0UL, + Instant.parse("2021-03-30T15:36:00.000Z"), + cipherSuite = ConversationEntity.CipherSuite.MLS_128_DHKEMX25519_AES128GCM_SHA256_Ed25519 + ) + val team = TeamEntity(teamId, "teamName", "") val conversationEntity1 = ConversationEntity( @@ -2073,13 +2100,7 @@ class ConversationDAOTest : BaseDatabaseTest() { "conversation2", ConversationEntity.Type.ONE_ON_ONE, null, - ConversationEntity.ProtocolInfo.MLS( - "group2", - ConversationEntity.GroupState.ESTABLISHED, - 0UL, - Instant.parse("2021-03-30T15:36:00.000Z"), - cipherSuite = ConversationEntity.CipherSuite.MLS_128_DHKEMX25519_AES128GCM_SHA256_Ed25519 - ), + protocolInfo = mlsProtocolInfo1, creatorId = "someValue", lastNotificationDate = null, lastModifiedDate = "2021-03-30T15:36:00.000Z".toInstant(), @@ -2102,13 +2123,7 @@ class ConversationDAOTest : BaseDatabaseTest() { "conversation3", ConversationEntity.Type.GROUP, null, - ConversationEntity.ProtocolInfo.MLS( - "group3", - ConversationEntity.GroupState.PENDING_JOIN, - 0UL, - Instant.parse("2021-03-30T15:36:00.000Z"), - cipherSuite = ConversationEntity.CipherSuite.MLS_128_DHKEMX25519_AES128GCM_SHA256_Ed25519 - ), + protocolInfo = mlsProtocolInfo2, creatorId = "someValue", // This conversation was modified after the last time the user was notified about it lastNotificationDate = "2021-03-30T15:30:00.000Z".toInstant(),