From 08bace6c7db7b34f271c270c0f81d70f0b412438 Mon Sep 17 00:00:00 2001
From: Ehsan Javadynia <ehsan.javadynia@gmail.com>
Date: Tue, 22 Mar 2022 14:48:33 +0100
Subject: [PATCH] Resolve #7208 (#7226)

add decrement replies count on delete note and a test for that
---
 packages/backend/src/services/note/delete.ts |  4 +++
 packages/backend/test/note.ts                | 32 ++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/packages/backend/src/services/note/delete.ts b/packages/backend/src/services/note/delete.ts
index cf23656f8f..356dc39727 100644
--- a/packages/backend/src/services/note/delete.ts
+++ b/packages/backend/src/services/note/delete.ts
@@ -29,6 +29,10 @@ export default async function(user: User, note: Note, quiet = false) {
 		Notes.decrement({ id: note.renoteId }, 'score', 1);
 	}
 
+	if (note.replyId) {
+		await Notes.decrement({ id: note.replyId }, 'repliesCount', 1);
+	}
+
 	if (!quiet) {
 		publishNoteStream(note.id, 'deleted', {
 			deletedAt: deletedAt,
diff --git a/packages/backend/test/note.ts b/packages/backend/test/note.ts
index 62cea5208b..942b2709df 100644
--- a/packages/backend/test/note.ts
+++ b/packages/backend/test/note.ts
@@ -333,4 +333,36 @@ describe('Note', () => {
 			assert.strictEqual(res.status, 400);
 		}));
 	});
+
+	describe('notes/delete', () => {
+		it('delete a reply', async(async () => {
+			const mainNoteRes = await request('/notes/create', {
+				text: 'main post',
+			}, alice);
+			const replyOneRes = await request('/notes/create', {
+				text: 'reply one',
+				replyId: mainNoteRes.body.createdNote.id
+			}, alice);
+			const replyTwoRes = await request('/notes/create', {
+				text: 'reply two',
+				replyId: mainNoteRes.body.createdNote.id
+			}, alice);
+
+			const deleteOneRes = await request('/notes/delete', {
+				noteId: replyOneRes.body.createdNote.id,
+			}, alice);
+
+			assert.strictEqual(deleteOneRes.status, 204);
+			let mainNote = await Notes.findOne({id: mainNoteRes.body.createdNote.id});
+			assert.strictEqual(mainNote.repliesCount, 1);
+
+			const deleteTwoRes = await request('/notes/delete', {
+				noteId: replyTwoRes.body.createdNote.id,
+			}, alice);
+
+			assert.strictEqual(deleteTwoRes.status, 204);
+			mainNote = await Notes.findOne({id: mainNoteRes.body.createdNote.id});
+			assert.strictEqual(mainNote.repliesCount, 0);
+		}));
+	});
 });
-- 
GitLab