From 51681987cdeb7e1dca3b299f1bd51582ebdaa3a0 Mon Sep 17 00:00:00 2001 From: Tempe Techie <95053628+tempe-techie@users.noreply.github.com> Date: Thu, 19 Sep 2024 20:21:59 +0200 Subject: [PATCH] replies count added --- contracts/chat/ChatContextV1.sol | 11 ++++++++--- test/chat/chatContextV1.test.js | 11 ++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/contracts/chat/ChatContextV1.sol b/contracts/chat/ChatContextV1.sol index 08d4a63..0fbe8ae 100644 --- a/contracts/chat/ChatContextV1.sol +++ b/contracts/chat/ChatContextV1.sol @@ -33,9 +33,10 @@ contract ChatContextV1 is Ownable { struct Message { address author; - string url; // URL pointing to the message stored on Arweave or IPFS etc., e.g. ar://some-identifier, ipfs://someIdentifier, ... uint256 createdAt; // timestamp when the message was created bool deleted; // whether the message is deleted or not + uint256 repliesCount; // number of replies to the message + string url; // URL pointing to the message stored on Arweave or IPFS etc., e.g. ar://some-identifier, ipfs://someIdentifier, ... } // CONSTRUCTOR @@ -142,7 +143,8 @@ contract ChatContextV1 is Ownable { author: msg.sender, url: url_, createdAt: block.timestamp, - deleted: false + deleted: false, + repliesCount: 0 }); mainMessages.push(newMsg); @@ -163,10 +165,12 @@ contract ChatContextV1 is Ownable { author: msg.sender, url: url_, createdAt: block.timestamp, - deleted: false + deleted: false, + repliesCount: 0 }); replies[mainMsgIndex_].push(newReply); + mainMessages[mainMsgIndex_].repliesCount++; emit MessageReplied(msg.sender, url_, mainMsgIndex_, block.timestamp); } @@ -196,6 +200,7 @@ contract ChatContextV1 is Ownable { "Not the author or owner" ); replies[mainMsgIndex_][replyMsgIndex_].deleted = true; + mainMessages[mainMsgIndex_].repliesCount--; emit ReplyDeleted(msg.sender, replies[mainMsgIndex_][replyMsgIndex_].url, mainMsgIndex_, replyMsgIndex_, block.timestamp); } diff --git a/test/chat/chatContextV1.test.js b/test/chat/chatContextV1.test.js index 0c4daf6..32e757a 100644 --- a/test/chat/chatContextV1.test.js +++ b/test/chat/chatContextV1.test.js @@ -63,10 +63,19 @@ describe("ChatContextV1", function () { it("allows creating a reply", async function () { await chatContract.connect(user2).createMessage("ipfs://message1"); + + // get replies count before + const message1 = await chatContract.getMainMessage(0); + expect(message1.repliesCount).to.equal(0); + const tx = await chatContract.connect(user3).createReply(0, "ipfs://reply1"); await expect(tx).to.emit(chatContract, "MessageReplied") .withArgs(user3.address, "ipfs://reply1", 0, await ethers.provider.getBlock('latest').then(b => b.timestamp)); - + + // get replies count after + const message2 = await chatContract.getMainMessage(0); + expect(message2.repliesCount).to.equal(1); + const reply = await chatContract.getReply(0, 0); expect(reply.author).to.equal(user3.address); expect(reply.url).to.equal("ipfs://reply1");