From e5f7181a0362148da25264266697459283aee529 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Mon, 25 Aug 2025 20:29:18 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=20=EC=8B=A0?= =?UTF-8?q?=EA=B3=A0=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/report/domain/TargetType.java | 1 + .../solidconnection/report/service/ReportService.java | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/solidconnection/report/domain/TargetType.java b/src/main/java/com/example/solidconnection/report/domain/TargetType.java index c48f50ac0..a3a6d68af 100644 --- a/src/main/java/com/example/solidconnection/report/domain/TargetType.java +++ b/src/main/java/com/example/solidconnection/report/domain/TargetType.java @@ -3,5 +3,6 @@ public enum TargetType { POST, + CHAT ; } diff --git a/src/main/java/com/example/solidconnection/report/service/ReportService.java b/src/main/java/com/example/solidconnection/report/service/ReportService.java index 3546861ea..205ca293d 100644 --- a/src/main/java/com/example/solidconnection/report/service/ReportService.java +++ b/src/main/java/com/example/solidconnection/report/service/ReportService.java @@ -1,5 +1,6 @@ package com.example.solidconnection.report.service; +import com.example.solidconnection.chat.repository.ChatMessageRepository; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.common.exception.ErrorCode; import com.example.solidconnection.community.post.repository.PostRepository; @@ -19,6 +20,7 @@ public class ReportService { private final ReportRepository reportRepository; private final SiteUserRepository siteUserRepository; private final PostRepository postRepository; + private final ChatMessageRepository chatMessageRepository; @Transactional public void createReport(long reporterId, ReportRequest request) { @@ -37,7 +39,12 @@ private void validateReporterExists(long reporterId) { } private void validateTargetExists(TargetType targetType, long targetId) { - if (targetType == TargetType.POST && !postRepository.existsById(targetId)) { + boolean exists = switch (targetType) { + case POST -> postRepository.existsById(targetId); + case CHAT -> chatMessageRepository.existsById(targetId); + }; + + if (!exists) { throw new CustomException(ErrorCode.REPORT_TARGET_NOT_FOUND); } } From 08a2a286cdecfa38ac1cf95382658b5d40158126 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Mon, 25 Aug 2025 23:09:33 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=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 --- .../report/service/ReportServiceTest.java | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/example/solidconnection/report/service/ReportServiceTest.java b/src/test/java/com/example/solidconnection/report/service/ReportServiceTest.java index 23523ae34..cdc9b875f 100644 --- a/src/test/java/com/example/solidconnection/report/service/ReportServiceTest.java +++ b/src/test/java/com/example/solidconnection/report/service/ReportServiceTest.java @@ -3,6 +3,10 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; +import com.example.solidconnection.chat.domain.ChatMessage; +import com.example.solidconnection.chat.domain.ChatRoom; +import com.example.solidconnection.chat.fixture.ChatMessageFixture; +import com.example.solidconnection.chat.fixture.ChatRoomFixture; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.common.exception.ErrorCode; import com.example.solidconnection.community.board.domain.Board; @@ -45,18 +49,27 @@ class ReportServiceTest { @Autowired private ReportFixture reportFixture; + @Autowired + private ChatRoomFixture chatRoomFixture; + + @Autowired + private ChatMessageFixture chatMessageFixture; + private SiteUser siteUser; private Post post; + private ChatMessage chatMessage; @BeforeEach void setUp() { siteUser = siteUserFixture.사용자(); Board board = boardFixture.자유게시판(); post = postFixture.게시글(board, siteUser); + ChatRoom chatRoom = chatRoomFixture.채팅방(false); + chatMessage = chatMessageFixture.메시지("채팅", siteUser.getId(), chatRoom); } @Nested - class 신고_생성 { + class 포스트_신고 { @Test void 정상적으로_신고한다() { @@ -96,4 +109,47 @@ class 신고_생성 { .hasMessageContaining(ErrorCode.ALREADY_REPORTED_BY_CURRENT_USER.getMessage()); } } + + @Nested + class 채팅_신고 { + + @Test + void 정상적으로_신고한다() { + // given + ReportRequest request = new ReportRequest(ReportType.INSULT, TargetType.CHAT, chatMessage.getId()); + + // when + reportService.createReport(siteUser.getId(), request); + + // then + boolean isSaved = reportRepository.existsByReporterIdAndTargetTypeAndTargetId( + siteUser.getId(), TargetType.CHAT, chatMessage.getId()); + assertThat(isSaved).isTrue(); + } + + @Test + void 신고_대상이_존재하지_않으면_예외가_발생한다() { + // given + long notExistingId = 999L; + ReportRequest request = new ReportRequest(ReportType.SPAM, TargetType.CHAT, notExistingId); + + // when & then + assertThatCode(() -> reportService.createReport(siteUser.getId(), request)) + .isInstanceOf(CustomException.class) + .hasMessageContaining(ErrorCode.REPORT_TARGET_NOT_FOUND.getMessage()); + } + + @Test + void 이미_신고한_경우_예외가_발생한다() { + // given + reportFixture.신고(siteUser.getId(), TargetType.CHAT, chatMessage.getId()); + ReportRequest request = new ReportRequest(ReportType.INSULT, TargetType.CHAT, chatMessage.getId()); + + // when & then + assertThatCode(() -> reportService.createReport(siteUser.getId(), request)) + .isInstanceOf(CustomException.class) + .hasMessageContaining(ErrorCode.ALREADY_REPORTED_BY_CURRENT_USER.getMessage()); + } + } } +