From 0a131c0a2fc3a356f1fc5ce9c26c69f8493c5ec8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= Date: Fri, 9 Feb 2024 13:26:14 -0500 Subject: [PATCH] conversation: remove reactions on a message deletion GitLab: #945 Change-Id: I23e32f33f405c7c6534b0d4667d3d27d8a045e77 --- src/jamidht/conversation.cpp | 3 ++ test/unitTest/conversation/conversation.cpp | 31 +++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/jamidht/conversation.cpp b/src/jamidht/conversation.cpp index f52b3c26e..06540d7ea 100644 --- a/src/jamidht/conversation.cpp +++ b/src/jamidht/conversation.cpp @@ -1019,6 +1019,9 @@ Conversation::Impl::handleEdition(History& history, // Normal message it->second->editions.emplace(it->second->editions.begin(), it->second->body); it->second->body["body"] = sharedCommit->body["body"]; + // Remove reactions + if (sharedCommit->body.at("body").empty()) + it->second->reactions.clear(); emitSignal(accountId_, repository_->id(), *it->second); diff --git a/test/unitTest/conversation/conversation.cpp b/test/unitTest/conversation/conversation.cpp index d00904f1f..3cc70271e 100644 --- a/test/unitTest/conversation/conversation.cpp +++ b/test/unitTest/conversation/conversation.cpp @@ -157,6 +157,7 @@ private: void testRemoveOneToOneNotInDetails(); void testMessageEdition(); void testMessageReaction(); + void testMessageEditionWithReaction(); void testLoadPartiallyRemovedConversation(); void testReactionsOnEditedMessage(); void testUpdateProfileMultiDevice(); @@ -212,6 +213,7 @@ private: CPPUNIT_TEST(testRemoveOneToOneNotInDetails); CPPUNIT_TEST(testMessageEdition); CPPUNIT_TEST(testMessageReaction); + CPPUNIT_TEST(testMessageEditionWithReaction); CPPUNIT_TEST(testLoadPartiallyRemovedConversation); CPPUNIT_TEST(testReactionsOnEditedMessage); CPPUNIT_TEST(testUpdateProfileMultiDevice); @@ -2433,6 +2435,35 @@ ConversationTest::testMessageReaction() CPPUNIT_ASSERT(emojiId == aliceData.reactionRemoved[0]); } +void +ConversationTest::testMessageEditionWithReaction() +{ + std::cout << "\nRunning test: " << __func__ << std::endl; + connectSignals(); + auto convId = libjami::startConversation(aliceId); + CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]() { return !aliceData.conversationId.empty(); })); + auto msgSize = aliceData.messages.size(); + libjami::sendMessage(aliceId, convId, "hi"s, ""); + CPPUNIT_ASSERT( + cv.wait_for(lk, 30s, [&]() { return aliceData.messages.size() == msgSize + 1; })); + msgSize = aliceData.messages.size(); + + // Add reaction + auto reactId = aliceData.messages.rbegin()->id; + libjami::sendMessage(aliceId, convId, "👋"s, reactId, 2); + CPPUNIT_ASSERT( + cv.wait_for(lk, 10s, [&]() { return aliceData.reactions.size() == 1; })); + CPPUNIT_ASSERT(aliceData.reactions.rbegin()->at("react-to") == reactId); + CPPUNIT_ASSERT(aliceData.reactions.rbegin()->at("body") == "👋"); + auto emojiId = aliceData.reactions.rbegin()->at("id"); + + // Remove base message should remove reaction + libjami::sendMessage(aliceId, convId, ""s, reactId, 1); + CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]() { return aliceData.messagesUpdated.size() == 1; })); + // Reaction is deleted + CPPUNIT_ASSERT(aliceData.messagesUpdated[0].reactions.empty()); +} + void ConversationTest::testLoadPartiallyRemovedConversation() {