From 2aed203727d52b0c8c1b03cff2257824d8644560 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Fri, 29 Nov 2024 12:20:04 +0900 Subject: [PATCH 1/8] =?UTF-8?q?test(community):=20communityComment=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UpdateCommunityCommentServiceTest.java | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java diff --git a/src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java b/src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java new file mode 100644 index 000000000..d73e45b00 --- /dev/null +++ b/src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java @@ -0,0 +1,87 @@ +package com.somemore.community.service.comment; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +import com.somemore.IntegrationTestSupport; +import com.somemore.community.domain.CommunityComment; +import com.somemore.community.dto.request.CommunityCommentCreateRequestDto; +import com.somemore.community.dto.request.CommunityCommentUpdateRequestDto; +import com.somemore.community.repository.comment.CommunityCommentRepository; +import com.somemore.community.usecase.comment.CreateCommunityCommentUseCase; +import com.somemore.global.exception.BadRequestException; +import com.somemore.global.exception.ExceptionMessage; +import org.assertj.core.api.ThrowableAssert; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Optional; +import java.util.UUID; + +class UpdateCommunityCommentServiceTest extends IntegrationTestSupport { + + @Autowired + private UpdateCommunityCommentService updateCommunityCommentService; + @Autowired + private CreateCommunityCommentUseCase createCommunityCommentUseCase; + @Autowired + private CommunityCommentRepository communityCommentRepository; + + private UUID writerId; + private Long commentId; + + @BeforeEach + void setUp() { + CommunityCommentCreateRequestDto dto = CommunityCommentCreateRequestDto.builder() + .content("커뮤니티 댓글 테스트 내용") + .parentCommentId(null) + .build(); + + writerId = UUID.randomUUID(); + + commentId = createCommunityCommentUseCase.createCommunityComment(dto, writerId); + } + + @AfterEach + void tearDown() { + communityCommentRepository.deleteAllInBatch(); + } + + @DisplayName("댓글을 수정한다.") + @Test + void updateCommunityComment() { + //given + CommunityCommentUpdateRequestDto dto = CommunityCommentUpdateRequestDto.builder() + .content("수정한 커뮤니티 댓글 내용") + .build(); + + //when + updateCommunityCommentService.updateCommunityComment(dto, commentId, writerId); + + //then + Optional communityComment = communityCommentRepository.findById(commentId); + assertThat(communityComment).isPresent(); + assertThat(communityComment.get().getId()).isEqualTo(commentId); + assertThat(communityComment.get().getContent()).isEqualTo("수정한 커뮤니티 댓글 내용"); + } + + @DisplayName("작성자가 아닌 id로 댓글을 수정하고자 할 때 예외를 던진다.") + @Test + void updateCommunityCommentWithNotWriterId() { + //given + CommunityCommentUpdateRequestDto dto = CommunityCommentUpdateRequestDto.builder() + .content("수정한 커뮤니티 댓글 내용") + .build(); + + //when + ThrowableAssert.ThrowingCallable callable = () -> updateCommunityCommentService.updateCommunityComment(dto, commentId, UUID.randomUUID()); + + //then + assertThatExceptionOfType(BadRequestException.class) + .isThrownBy(callable) + .withMessage(ExceptionMessage.UNAUTHORIZED_COMMUNITY_COMMENT.getMessage()); + } +} From 047501a990b92f62562ae6f1bcb38bfee88364b8 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Fri, 29 Nov 2024 12:20:49 +0900 Subject: [PATCH 2/8] =?UTF-8?q?test(community):=20communityComment=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20Usecase=20=EB=B0=8F=20Service=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UpdateCommunityCommentService.java | 45 +++++++++++++++++++ .../UpdateCommunityCommentUseCase.java | 12 +++++ 2 files changed, 57 insertions(+) create mode 100644 src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java create mode 100644 src/main/java/com/somemore/community/usecase/comment/UpdateCommunityCommentUseCase.java diff --git a/src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java b/src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java new file mode 100644 index 000000000..dfdd802af --- /dev/null +++ b/src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java @@ -0,0 +1,45 @@ +package com.somemore.community.service.comment; + +import com.somemore.community.domain.CommunityComment; +import com.somemore.community.dto.request.CommunityCommentUpdateRequestDto; +import com.somemore.community.repository.comment.CommunityCommentRepository; +import com.somemore.community.usecase.comment.UpdateCommunityCommentUseCase; +import com.somemore.global.exception.BadRequestException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +import static com.somemore.global.exception.ExceptionMessage.*; + +@RequiredArgsConstructor +@Transactional +@Service +public class UpdateCommunityCommentService implements UpdateCommunityCommentUseCase { + + private final CommunityCommentRepository communityCommentRepository; + + @Override + public void updateCommunityComment(CommunityCommentUpdateRequestDto requestDto, Long communityCommentId, UUID writerId) { + + CommunityComment communityComment = getCommunityCommentById(communityCommentId); + validateWriter(communityComment, writerId); + communityComment.updateWith(requestDto); + + communityCommentRepository.save(communityComment); + } + + private CommunityComment getCommunityCommentById(Long id) { + return communityCommentRepository.findById(id) + .orElseThrow(() -> new BadRequestException(NOT_EXISTS_COMMUNITY_COMMENT.getMessage())); + } + + private void validateWriter(CommunityComment communityComment, UUID writerId) { + if (communityComment.isWriter(writerId)) { + return; + } + + throw new BadRequestException(UNAUTHORIZED_COMMUNITY_COMMENT.getMessage()); + } +} diff --git a/src/main/java/com/somemore/community/usecase/comment/UpdateCommunityCommentUseCase.java b/src/main/java/com/somemore/community/usecase/comment/UpdateCommunityCommentUseCase.java new file mode 100644 index 000000000..ef4c028e9 --- /dev/null +++ b/src/main/java/com/somemore/community/usecase/comment/UpdateCommunityCommentUseCase.java @@ -0,0 +1,12 @@ +package com.somemore.community.usecase.comment; + +import com.somemore.community.dto.request.CommunityCommentUpdateRequestDto; + +import java.util.UUID; + +public interface UpdateCommunityCommentUseCase { + void updateCommunityComment( + CommunityCommentUpdateRequestDto requestDto, + Long communityCommentId, + UUID writerId); +} From 1df3a6b7bfd9521af049f7fb0b3dcd2e1785bff8 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Fri, 29 Nov 2024 12:22:46 +0900 Subject: [PATCH 3/8] =?UTF-8?q?test(community):=20communityComment=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20requestDto=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=B0=8F=20Entity=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community/domain/CommunityComment.java | 5 +++++ .../request/CommunityCommentUpdateRequestDto.java | 15 +++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/main/java/com/somemore/community/dto/request/CommunityCommentUpdateRequestDto.java diff --git a/src/main/java/com/somemore/community/domain/CommunityComment.java b/src/main/java/com/somemore/community/domain/CommunityComment.java index 42acddc2d..bdc06982b 100644 --- a/src/main/java/com/somemore/community/domain/CommunityComment.java +++ b/src/main/java/com/somemore/community/domain/CommunityComment.java @@ -1,5 +1,6 @@ package com.somemore.community.domain; +import com.somemore.community.dto.request.CommunityCommentUpdateRequestDto; import com.somemore.global.common.BaseEntity; import jakarta.persistence.*; import lombok.Builder; @@ -42,4 +43,8 @@ public CommunityComment(UUID writerId, String content, Long parentCommentId) { public boolean isWriter(UUID writerId) { return this.writerId.equals(writerId); } + + public void updateWith(CommunityCommentUpdateRequestDto dto) { + this.content = dto.content(); + } } \ No newline at end of file diff --git a/src/main/java/com/somemore/community/dto/request/CommunityCommentUpdateRequestDto.java b/src/main/java/com/somemore/community/dto/request/CommunityCommentUpdateRequestDto.java new file mode 100644 index 000000000..4eb3ca357 --- /dev/null +++ b/src/main/java/com/somemore/community/dto/request/CommunityCommentUpdateRequestDto.java @@ -0,0 +1,15 @@ +package com.somemore.community.dto.request; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Builder; + +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +@Builder +public record CommunityCommentUpdateRequestDto ( + @Schema(description = "커뮤니티 댓글 내용", example = "저도 함께 하고 싶습니다.") + @NotBlank(message = "댓글 내용은 필수 값입니다.") + String content +) {} From 493e63f436a0b9ba5eb71781892918ac575fdcd1 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Fri, 29 Nov 2024 12:20:04 +0900 Subject: [PATCH 4/8] =?UTF-8?q?test(community):=20communityComment=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UpdateCommunityCommentServiceTest.java | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java diff --git a/src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java b/src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java new file mode 100644 index 000000000..d73e45b00 --- /dev/null +++ b/src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java @@ -0,0 +1,87 @@ +package com.somemore.community.service.comment; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +import com.somemore.IntegrationTestSupport; +import com.somemore.community.domain.CommunityComment; +import com.somemore.community.dto.request.CommunityCommentCreateRequestDto; +import com.somemore.community.dto.request.CommunityCommentUpdateRequestDto; +import com.somemore.community.repository.comment.CommunityCommentRepository; +import com.somemore.community.usecase.comment.CreateCommunityCommentUseCase; +import com.somemore.global.exception.BadRequestException; +import com.somemore.global.exception.ExceptionMessage; +import org.assertj.core.api.ThrowableAssert; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Optional; +import java.util.UUID; + +class UpdateCommunityCommentServiceTest extends IntegrationTestSupport { + + @Autowired + private UpdateCommunityCommentService updateCommunityCommentService; + @Autowired + private CreateCommunityCommentUseCase createCommunityCommentUseCase; + @Autowired + private CommunityCommentRepository communityCommentRepository; + + private UUID writerId; + private Long commentId; + + @BeforeEach + void setUp() { + CommunityCommentCreateRequestDto dto = CommunityCommentCreateRequestDto.builder() + .content("커뮤니티 댓글 테스트 내용") + .parentCommentId(null) + .build(); + + writerId = UUID.randomUUID(); + + commentId = createCommunityCommentUseCase.createCommunityComment(dto, writerId); + } + + @AfterEach + void tearDown() { + communityCommentRepository.deleteAllInBatch(); + } + + @DisplayName("댓글을 수정한다.") + @Test + void updateCommunityComment() { + //given + CommunityCommentUpdateRequestDto dto = CommunityCommentUpdateRequestDto.builder() + .content("수정한 커뮤니티 댓글 내용") + .build(); + + //when + updateCommunityCommentService.updateCommunityComment(dto, commentId, writerId); + + //then + Optional communityComment = communityCommentRepository.findById(commentId); + assertThat(communityComment).isPresent(); + assertThat(communityComment.get().getId()).isEqualTo(commentId); + assertThat(communityComment.get().getContent()).isEqualTo("수정한 커뮤니티 댓글 내용"); + } + + @DisplayName("작성자가 아닌 id로 댓글을 수정하고자 할 때 예외를 던진다.") + @Test + void updateCommunityCommentWithNotWriterId() { + //given + CommunityCommentUpdateRequestDto dto = CommunityCommentUpdateRequestDto.builder() + .content("수정한 커뮤니티 댓글 내용") + .build(); + + //when + ThrowableAssert.ThrowingCallable callable = () -> updateCommunityCommentService.updateCommunityComment(dto, commentId, UUID.randomUUID()); + + //then + assertThatExceptionOfType(BadRequestException.class) + .isThrownBy(callable) + .withMessage(ExceptionMessage.UNAUTHORIZED_COMMUNITY_COMMENT.getMessage()); + } +} From ed06d86b02282584fc316251af6c495a8da03b09 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Fri, 29 Nov 2024 12:20:49 +0900 Subject: [PATCH 5/8] =?UTF-8?q?test(community):=20communityComment=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20Usecase=20=EB=B0=8F=20Service=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UpdateCommunityCommentService.java | 45 +++++++++++++++++++ .../UpdateCommunityCommentUseCase.java | 12 +++++ 2 files changed, 57 insertions(+) create mode 100644 src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java create mode 100644 src/main/java/com/somemore/community/usecase/comment/UpdateCommunityCommentUseCase.java diff --git a/src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java b/src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java new file mode 100644 index 000000000..dfdd802af --- /dev/null +++ b/src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java @@ -0,0 +1,45 @@ +package com.somemore.community.service.comment; + +import com.somemore.community.domain.CommunityComment; +import com.somemore.community.dto.request.CommunityCommentUpdateRequestDto; +import com.somemore.community.repository.comment.CommunityCommentRepository; +import com.somemore.community.usecase.comment.UpdateCommunityCommentUseCase; +import com.somemore.global.exception.BadRequestException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +import static com.somemore.global.exception.ExceptionMessage.*; + +@RequiredArgsConstructor +@Transactional +@Service +public class UpdateCommunityCommentService implements UpdateCommunityCommentUseCase { + + private final CommunityCommentRepository communityCommentRepository; + + @Override + public void updateCommunityComment(CommunityCommentUpdateRequestDto requestDto, Long communityCommentId, UUID writerId) { + + CommunityComment communityComment = getCommunityCommentById(communityCommentId); + validateWriter(communityComment, writerId); + communityComment.updateWith(requestDto); + + communityCommentRepository.save(communityComment); + } + + private CommunityComment getCommunityCommentById(Long id) { + return communityCommentRepository.findById(id) + .orElseThrow(() -> new BadRequestException(NOT_EXISTS_COMMUNITY_COMMENT.getMessage())); + } + + private void validateWriter(CommunityComment communityComment, UUID writerId) { + if (communityComment.isWriter(writerId)) { + return; + } + + throw new BadRequestException(UNAUTHORIZED_COMMUNITY_COMMENT.getMessage()); + } +} diff --git a/src/main/java/com/somemore/community/usecase/comment/UpdateCommunityCommentUseCase.java b/src/main/java/com/somemore/community/usecase/comment/UpdateCommunityCommentUseCase.java new file mode 100644 index 000000000..ef4c028e9 --- /dev/null +++ b/src/main/java/com/somemore/community/usecase/comment/UpdateCommunityCommentUseCase.java @@ -0,0 +1,12 @@ +package com.somemore.community.usecase.comment; + +import com.somemore.community.dto.request.CommunityCommentUpdateRequestDto; + +import java.util.UUID; + +public interface UpdateCommunityCommentUseCase { + void updateCommunityComment( + CommunityCommentUpdateRequestDto requestDto, + Long communityCommentId, + UUID writerId); +} From e19055f442cbe719daeedd263d693a95823adf9a Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Fri, 29 Nov 2024 12:22:46 +0900 Subject: [PATCH 6/8] =?UTF-8?q?test(community):=20communityComment=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20requestDto=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=B0=8F=20Entity=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community/domain/CommunityComment.java | 5 +++++ .../request/CommunityCommentUpdateRequestDto.java | 15 +++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/main/java/com/somemore/community/dto/request/CommunityCommentUpdateRequestDto.java diff --git a/src/main/java/com/somemore/community/domain/CommunityComment.java b/src/main/java/com/somemore/community/domain/CommunityComment.java index 36cb2c792..8a08d82c4 100644 --- a/src/main/java/com/somemore/community/domain/CommunityComment.java +++ b/src/main/java/com/somemore/community/domain/CommunityComment.java @@ -1,5 +1,6 @@ package com.somemore.community.domain; +import com.somemore.community.dto.request.CommunityCommentUpdateRequestDto; import com.somemore.global.common.BaseEntity; import jakarta.persistence.*; import lombok.Builder; @@ -46,4 +47,8 @@ public CommunityComment(Long communityBoardId, UUID writerId, String content, Lo public boolean isWriter(UUID writerId) { return this.writerId.equals(writerId); } + + public void updateWith(CommunityCommentUpdateRequestDto dto) { + this.content = dto.content(); + } } \ No newline at end of file diff --git a/src/main/java/com/somemore/community/dto/request/CommunityCommentUpdateRequestDto.java b/src/main/java/com/somemore/community/dto/request/CommunityCommentUpdateRequestDto.java new file mode 100644 index 000000000..4eb3ca357 --- /dev/null +++ b/src/main/java/com/somemore/community/dto/request/CommunityCommentUpdateRequestDto.java @@ -0,0 +1,15 @@ +package com.somemore.community.dto.request; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Builder; + +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +@Builder +public record CommunityCommentUpdateRequestDto ( + @Schema(description = "커뮤니티 댓글 내용", example = "저도 함께 하고 싶습니다.") + @NotBlank(message = "댓글 내용은 필수 값입니다.") + String content +) {} From e514f406ef4281a1224d7769b13cb3631f318768 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Sat, 30 Nov 2024 23:41:55 +0900 Subject: [PATCH 7/8] =?UTF-8?q?feat(community):=20communityComment=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EC=8B=9C=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20?= =?UTF-8?q?=EC=A1=B4=EC=9E=AC=20=EA=B2=80=EC=A6=9D=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UpdateCommunityCommentService.java | 14 ++++- .../UpdateCommunityCommentServiceTest.java | 61 +++++++++++++------ 2 files changed, 57 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java b/src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java index dfdd802af..ec688a9e6 100644 --- a/src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java +++ b/src/main/java/com/somemore/community/service/comment/UpdateCommunityCommentService.java @@ -2,6 +2,7 @@ import com.somemore.community.domain.CommunityComment; import com.somemore.community.dto.request.CommunityCommentUpdateRequestDto; +import com.somemore.community.repository.board.CommunityBoardRepository; import com.somemore.community.repository.comment.CommunityCommentRepository; import com.somemore.community.usecase.comment.UpdateCommunityCommentUseCase; import com.somemore.global.exception.BadRequestException; @@ -19,12 +20,17 @@ public class UpdateCommunityCommentService implements UpdateCommunityCommentUseCase { private final CommunityCommentRepository communityCommentRepository; + private final CommunityBoardRepository communityBoardRepository; @Override public void updateCommunityComment(CommunityCommentUpdateRequestDto requestDto, Long communityCommentId, UUID writerId) { CommunityComment communityComment = getCommunityCommentById(communityCommentId); + + validateCommunityBoardExists(communityComment.getCommunityBoardId()); + validateWriter(communityComment, writerId); + communityComment.updateWith(requestDto); communityCommentRepository.save(communityComment); @@ -35,11 +41,17 @@ private CommunityComment getCommunityCommentById(Long id) { .orElseThrow(() -> new BadRequestException(NOT_EXISTS_COMMUNITY_COMMENT.getMessage())); } + private void validateCommunityBoardExists(Long communityBoardId) { + if (communityBoardRepository.doesNotExistById(communityBoardId)) { + throw new BadRequestException(NOT_EXISTS_COMMUNITY_BOARD.getMessage()); + } + } + private void validateWriter(CommunityComment communityComment, UUID writerId) { if (communityComment.isWriter(writerId)) { return; } - + throw new BadRequestException(UNAUTHORIZED_COMMUNITY_COMMENT.getMessage()); } } diff --git a/src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java b/src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java index d73e45b00..dfbd16fe3 100644 --- a/src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java +++ b/src/test/java/com/somemore/community/service/comment/UpdateCommunityCommentServiceTest.java @@ -1,16 +1,19 @@ package com.somemore.community.service.comment; +import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_COMMUNITY_BOARD; +import static com.somemore.global.exception.ExceptionMessage.UNAUTHORIZED_COMMUNITY_COMMENT; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import com.somemore.IntegrationTestSupport; +import com.somemore.community.domain.CommunityBoard; import com.somemore.community.domain.CommunityComment; +import com.somemore.community.dto.request.CommunityBoardCreateRequestDto; import com.somemore.community.dto.request.CommunityCommentCreateRequestDto; import com.somemore.community.dto.request.CommunityCommentUpdateRequestDto; +import com.somemore.community.repository.board.CommunityBoardRepository; import com.somemore.community.repository.comment.CommunityCommentRepository; -import com.somemore.community.usecase.comment.CreateCommunityCommentUseCase; import com.somemore.global.exception.BadRequestException; -import com.somemore.global.exception.ExceptionMessage; import org.assertj.core.api.ThrowableAssert; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -26,23 +29,38 @@ class UpdateCommunityCommentServiceTest extends IntegrationTestSupport { @Autowired private UpdateCommunityCommentService updateCommunityCommentService; @Autowired - private CreateCommunityCommentUseCase createCommunityCommentUseCase; - @Autowired private CommunityCommentRepository communityCommentRepository; + @Autowired + private CommunityBoardRepository communityBoardRepository; private UUID writerId; private Long commentId; + private CommunityCommentUpdateRequestDto updateRequestDto; @BeforeEach void setUp() { - CommunityCommentCreateRequestDto dto = CommunityCommentCreateRequestDto.builder() + CommunityBoardCreateRequestDto boardDto = CommunityBoardCreateRequestDto.builder() + .title("커뮤니티 테스트 제목") + .content("커뮤니티 테스트 내용") + .build(); + + writerId = UUID.randomUUID(); + + CommunityBoard communityBoard = communityBoardRepository.save(boardDto.toEntity(writerId, "https://test.image/123")); + + CommunityCommentCreateRequestDto commentDto = CommunityCommentCreateRequestDto.builder() + .communityBoardId(communityBoard.getId()) .content("커뮤니티 댓글 테스트 내용") .parentCommentId(null) .build(); - writerId = UUID.randomUUID(); + CommunityComment communityComment = communityCommentRepository.save(commentDto.toEntity(writerId)); + + commentId = communityComment.getId(); - commentId = createCommunityCommentUseCase.createCommunityComment(dto, writerId); + updateRequestDto = CommunityCommentUpdateRequestDto.builder() + .content("수정한 커뮤니티 댓글 내용") + .build(); } @AfterEach @@ -53,13 +71,10 @@ void tearDown() { @DisplayName("댓글을 수정한다.") @Test void updateCommunityComment() { - //given - CommunityCommentUpdateRequestDto dto = CommunityCommentUpdateRequestDto.builder() - .content("수정한 커뮤니티 댓글 내용") - .build(); + //given //when - updateCommunityCommentService.updateCommunityComment(dto, commentId, writerId); + updateCommunityCommentService.updateCommunityComment(updateRequestDto, commentId, writerId); //then Optional communityComment = communityCommentRepository.findById(commentId); @@ -71,17 +86,29 @@ void updateCommunityComment() { @DisplayName("작성자가 아닌 id로 댓글을 수정하고자 할 때 예외를 던진다.") @Test void updateCommunityCommentWithNotWriterId() { + //given - CommunityCommentUpdateRequestDto dto = CommunityCommentUpdateRequestDto.builder() - .content("수정한 커뮤니티 댓글 내용") - .build(); + //when + ThrowableAssert.ThrowingCallable callable = () -> updateCommunityCommentService.updateCommunityComment(updateRequestDto, commentId, UUID.randomUUID()); + //then + assertThatExceptionOfType(BadRequestException.class) + .isThrownBy(callable) + .withMessage(UNAUTHORIZED_COMMUNITY_COMMENT.getMessage()); + } + + @DisplayName("삭제된 게시글의 댓글을 수정하고자 할 때 예외를 던진다.") + @Test + void updateCommunityCommentWithDeletedBoardId() { + + //given + communityBoardRepository.deleteAllInBatch(); //when - ThrowableAssert.ThrowingCallable callable = () -> updateCommunityCommentService.updateCommunityComment(dto, commentId, UUID.randomUUID()); + ThrowableAssert.ThrowingCallable callable = () -> updateCommunityCommentService.updateCommunityComment(updateRequestDto, commentId, writerId); //then assertThatExceptionOfType(BadRequestException.class) .isThrownBy(callable) - .withMessage(ExceptionMessage.UNAUTHORIZED_COMMUNITY_COMMENT.getMessage()); + .withMessage(NOT_EXISTS_COMMUNITY_BOARD.getMessage()); } } From a22982d70b0bf2f000c6519d6a0340bcfa22477c Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Sun, 1 Dec 2024 15:39:16 +0900 Subject: [PATCH 8/8] =?UTF-8?q?chore(community):=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=A7=88=EC=A7=80=EB=A7=89=EC=97=90=20=EA=B0=9C=ED=96=89=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/somemore/community/domain/CommunityComment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/somemore/community/domain/CommunityComment.java b/src/main/java/com/somemore/community/domain/CommunityComment.java index 8a08d82c4..fd6a85d82 100644 --- a/src/main/java/com/somemore/community/domain/CommunityComment.java +++ b/src/main/java/com/somemore/community/domain/CommunityComment.java @@ -51,4 +51,4 @@ public boolean isWriter(UUID writerId) { public void updateWith(CommunityCommentUpdateRequestDto dto) { this.content = dto.content(); } -} \ No newline at end of file +}