From 51df87226b9b07027bb387300b04be6c3844fcee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
 <francois-simon.fauteux-chapleau@savoirfairelinux.com>
Date: Mon, 22 Jul 2024 10:48:06 -0400
Subject: [PATCH] contact_list: fix trust request update bugs

https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1804
Change-Id: I8cb3ffc7d5b1b2b8bbfe018b922c260a569411fb
---
 src/jamidht/contact_list.cpp                  |  3 ++-
 .../conversation/conversationMembersEvent.cpp | 24 +++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/src/jamidht/contact_list.cpp b/src/jamidht/contact_list.cpp
index 06571785fc..502e79eb48 100644
--- a/src/jamidht/contact_list.cpp
+++ b/src/jamidht/contact_list.cpp
@@ -327,8 +327,9 @@ ContactList::onTrustRequest(const dht::InfoHash& peer_account,
                       .first;
         } else {
             // Update trust request
-            if (received < req->second.received) {
+            if (received > req->second.received) {
                 req->second.device = peer_device;
+                req->second.conversationId = conversationId;
                 req->second.received = received;
                 req->second.payload = payload;
             } else {
diff --git a/test/unitTest/conversation/conversationMembersEvent.cpp b/test/unitTest/conversation/conversationMembersEvent.cpp
index a010307983..15405b532e 100644
--- a/test/unitTest/conversation/conversationMembersEvent.cpp
+++ b/test/unitTest/conversation/conversationMembersEvent.cpp
@@ -1657,12 +1657,25 @@ ConversationMembersEventTest::testAddContactTwice()
     std::cout << "\nRunning test: " << __func__ << std::endl;
 
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
+    auto aliceUri = aliceAccount->getUsername();
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
 
+    // Add contact
     aliceAccount->addContact(bobUri);
     aliceAccount->sendTrustRequest(bobUri, {});
     CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]() { return bobData.requestReceived; }));
+    auto oldConversationId = aliceData.conversationId;
+    CPPUNIT_ASSERT(!oldConversationId.empty());
+
+    // Check that the trust request's data is correct
+    auto bobTrustRequests = bobAccount->getTrustRequests();
+    CPPUNIT_ASSERT(bobTrustRequests.size() == 1);
+    auto request = bobTrustRequests[0];
+    CPPUNIT_ASSERT(request["from"] == aliceUri);
+    CPPUNIT_ASSERT(request["conversationId"] == oldConversationId);
+
+    // Remove and re-add contact
     aliceAccount->removeContact(bobUri, false);
     CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]() { return aliceData.removed; }));
     // wait that connections are closed.
@@ -1671,6 +1684,17 @@ ConversationMembersEventTest::testAddContactTwice()
     aliceAccount->addContact(bobUri);
     aliceAccount->sendTrustRequest(bobUri, {});
     CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]() { return bobData.requestRemoved && bobData.requestReceived; }));
+    auto newConversationId = aliceData.conversationId;
+    CPPUNIT_ASSERT(!newConversationId.empty());
+    CPPUNIT_ASSERT(newConversationId != oldConversationId);
+
+    // Check that the trust request's data was correctly
+    // updated when we received the second request
+    bobTrustRequests = bobAccount->getTrustRequests();
+    CPPUNIT_ASSERT(bobTrustRequests.size() == 1);
+    request = bobTrustRequests[0];
+    CPPUNIT_ASSERT(request["from"] == aliceUri);
+    CPPUNIT_ASSERT(request["conversationId"] == newConversationId);
 }
 
 void
-- 
GitLab