conversation: remove reactions on a message deletion

GitLab: #945
Change-Id: I23e32f33f405c7c6534b0d4667d3d27d8a045e77
This commit is contained in:
Sébastien Blin
2024-02-09 13:26:14 -05:00
parent 8bf32a2320
commit 0a131c0a2f
2 changed files with 34 additions and 0 deletions

View File

@ -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<libjami::ConversationSignal::SwarmMessageUpdated>(accountId_,
repository_->id(),
*it->second);

View File

@ -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()
{