From 81e33b9391cd7adac662a697e735f989d911852e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Fri, 15 May 2020 22:10:50 -0400 Subject: [PATCH] fix: #8317 --- src/topics/fork.js | 8 ++++++++ test/topics.js | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/topics/fork.js b/src/topics/fork.js index 40edecf6b8..15c784a926 100644 --- a/src/topics/fork.js +++ b/src/topics/fork.js @@ -52,6 +52,14 @@ module.exports = function (Topics) { await Topics.updateLastPostTime(tid, Date.now()); + await Promise.all([ + Topics.setTopicFields(tid, { + upvotes: postData.upvotes, + downvotes: postData.downvotes, + }), + db.sortedSetsAdd(['topics:votes', 'cid:' + cid + ':tids:votes'], postData.votes, tid), + ]); + plugins.fireHook('action:topic.fork', { tid: tid, fromTid: fromTid, uid: uid }); return await Topics.getTopicData(tid); diff --git a/test/topics.js b/test/topics.js index 80380b5a3d..0ef388fca4 100644 --- a/test/topics.js +++ b/test/topics.js @@ -906,6 +906,22 @@ describe('Topic\'s', function () { }, ], done); }); + + it('should properly update topic vote count after forking', async () => { + const result = await topics.post({ uid: fooUid, cid: categoryObj.cid, title: 'fork vote test', content: 'main post' }); + const reply1 = await topics.reply({ tid: result.topicData.tid, uid: fooUid, content: 'test reply 1' }); + const reply2 = await topics.reply({ tid: result.topicData.tid, uid: fooUid, content: 'test reply 2' }); + const reply3 = await topics.reply({ tid: result.topicData.tid, uid: fooUid, content: 'test reply 3' }); + await posts.upvote(result.postData.pid, adminUid); + await posts.upvote(reply1.pid, adminUid); + assert.strictEqual(await db.sortedSetScore('topics:votes', result.topicData.tid), 1); + assert.strictEqual(await db.sortedSetScore('cid:' + categoryObj.cid + ':tids:votes', result.topicData.tid), 1); + const newTopic = await topics.createTopicFromPosts(adminUid, 'Fork test, vote update', [reply1.pid, reply2.pid], result.topicData.tid); + + assert.strictEqual(await db.sortedSetScore('topics:votes', newTopic.tid), 1); + assert.strictEqual(await db.sortedSetScore('cid:' + categoryObj.cid + ':tids:votes', newTopic.tid), 1); + assert.strictEqual(await topics.getTopicField(newTopic.tid, 'upvotes'), 1); + }); }); describe('controller', function () {