From e4711971cca3a7fd4544a57ce9700a88f003e3db Mon Sep 17 00:00:00 2001 From: Andreas Svanberg <andreass@dsv.su.se> Date: Mon, 17 Mar 2025 10:50:39 +0100 Subject: [PATCH] Deleting initial post removes entire thread --- .../se/su/dsv/scipro/forum/BasicForumService.java | 2 ++ .../su/dsv/scipro/forum/BasicForumServiceImpl.java | 13 +++++++++++-- .../forum/BasicForumServiceIntegrationTest.java | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/se/su/dsv/scipro/forum/BasicForumService.java b/core/src/main/java/se/su/dsv/scipro/forum/BasicForumService.java index 44ff9f407a..57cb619100 100644 --- a/core/src/main/java/se/su/dsv/scipro/forum/BasicForumService.java +++ b/core/src/main/java/se/su/dsv/scipro/forum/BasicForumService.java @@ -22,6 +22,8 @@ public interface BasicForumService extends Serializable { ForumThread createThread(String subject); + ForumThread findThreadById(Long id); + long countUnreadThreads(List<ForumThread> forumThreadList, User user); ForumPost getLastPost(ForumThread forumThread); diff --git a/core/src/main/java/se/su/dsv/scipro/forum/BasicForumServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/forum/BasicForumServiceImpl.java index 5591930bf2..ed3da2c4a0 100644 --- a/core/src/main/java/se/su/dsv/scipro/forum/BasicForumServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/forum/BasicForumServiceImpl.java @@ -91,6 +91,11 @@ public class BasicForumServiceImpl implements BasicForumService { return threadRepository.save(forumThread); } + @Override + public ForumThread findThreadById(Long id) { + return threadRepository.findOne(id); + } + @Override public long countUnreadThreads(List<ForumThread> forumThreadList, User user) { return postRepository.countUnreadThreads(forumThreadList, user); @@ -184,8 +189,12 @@ public class BasicForumServiceImpl implements BasicForumService { if (!canDelete(post)) { throw new PostCantBeDeletedException(); } - post.setDeleted(true); - postRepository.save(post); + if (isInitialPost(post)) { + threadRepository.delete(post.getForumThread()); + } else { + post.setDeleted(true); + postRepository.save(post); + } } private static final class PostCantBeDeletedException extends IllegalArgumentException { diff --git a/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java index c654be9b93..3c35391a5f 100644 --- a/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java +++ b/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java @@ -6,6 +6,7 @@ import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.not; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -195,4 +196,17 @@ public class BasicForumServiceIntegrationTest extends IntegrationTest { assertThat(getPublishedEvents(), not(hasItem(new ForumPostReadEvent(post, commenter)))); } + + @Test + public void deleting_initial_post_removes_entire_thread() { + ForumThread thread = basicForumService.createThread("Test thread"); + ForumPost post = basicForumService.createReply(thread, op, "Test post 1", Set.of()); + + setLoggedInAs(op); + + basicForumService.deletePost(post); + + ForumThread threadById = basicForumService.findThreadById(thread.getId()); + assertNull(threadById, "Thread was not deleted"); + } }