From 91f2139a11faf1464ea1d75b41252f3868ae1408 Mon Sep 17 00:00:00 2001 From: Mingyu Song <100754581+mikekks@users.noreply.github.com> Date: Fri, 8 Nov 2024 10:29:33 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=AA=A8=EC=9E=84=EC=9E=A5=EC=9D=80=20?= =?UTF-8?q?=EA=B3=B5=EB=8F=99=EB=AA=A8=EC=9E=84=EC=9E=A5=EC=9D=B4=20?= =?UTF-8?q?=EB=90=A0=20=EC=88=98=20=EC=97=86=EB=8B=A4.=20(#476)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 모임장은 공동모임장이 될 수 없도록 구현 * test: 모임장은 공동모임장이 될 수 없도록 구현 내용 테스트 --- .../crew/main/entity/meeting/CoLeader.java | 8 +++ .../main/global/exception/ErrorStatus.java | 1 + .../v2/service/MeetingV2ServiceTest.java | 52 +++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/main/src/main/java/org/sopt/makers/crew/main/entity/meeting/CoLeader.java b/main/src/main/java/org/sopt/makers/crew/main/entity/meeting/CoLeader.java index d8836a65..0dee399b 100644 --- a/main/src/main/java/org/sopt/makers/crew/main/entity/meeting/CoLeader.java +++ b/main/src/main/java/org/sopt/makers/crew/main/entity/meeting/CoLeader.java @@ -1,7 +1,12 @@ package org.sopt.makers.crew.main.entity.meeting; +import static org.sopt.makers.crew.main.global.exception.ErrorStatus.*; + +import java.util.Objects; + import org.sopt.makers.crew.main.entity.common.BaseTimeEntity; import org.sopt.makers.crew.main.entity.user.User; +import org.sopt.makers.crew.main.global.exception.BadRequestException; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -38,6 +43,9 @@ public class CoLeader extends BaseTimeEntity { @Builder private CoLeader(Meeting meeting, User user) { + if (Objects.equals(meeting.getUserId(), user.getId())) { + throw new BadRequestException(LEADER_CANNOT_BE_CO_LEADER_APPLY.getErrorCode()); + } this.meeting = meeting; this.user = user; } diff --git a/main/src/main/java/org/sopt/makers/crew/main/global/exception/ErrorStatus.java b/main/src/main/java/org/sopt/makers/crew/main/global/exception/ErrorStatus.java index 645bee08..4026b7f2 100644 --- a/main/src/main/java/org/sopt/makers/crew/main/global/exception/ErrorStatus.java +++ b/main/src/main/java/org/sopt/makers/crew/main/global/exception/ErrorStatus.java @@ -36,6 +36,7 @@ public enum ErrorStatus { MAX_IMAGE_UPLOAD_EXCEEDED("이미지는 최대 10개까지만 업로드 가능합니다."), LEADER_CANNOT_APPLY("모임장은 신청할 수 없습니다."), CO_LEADER_CANNOT_APPLY("공동 모임장은 신청할 수 없습니다."), + LEADER_CANNOT_BE_CO_LEADER_APPLY("모임장은 공동 모임장이 될 수 없습니다."), /** * 401 UNAUTHORIZED diff --git a/main/src/test/java/org/sopt/makers/crew/main/meeting/v2/service/MeetingV2ServiceTest.java b/main/src/test/java/org/sopt/makers/crew/main/meeting/v2/service/MeetingV2ServiceTest.java index c55b2925..7ee97255 100644 --- a/main/src/test/java/org/sopt/makers/crew/main/meeting/v2/service/MeetingV2ServiceTest.java +++ b/main/src/test/java/org/sopt/makers/crew/main/meeting/v2/service/MeetingV2ServiceTest.java @@ -300,6 +300,58 @@ void notPresentCoLeaderId_createMeeting_throwException() { } + @Test + @DisplayName("모임장은 공동모임장이 될 수 없다.") + void setLeaderCoLeader_createMeeting_throwException() { + // given + User user = User.builder() + .name("홍길동") + .orgId(1) + .activities(List.of(new UserActivityVO("서버", 33), new UserActivityVO("iOS", 34))) + .profileImage("image-url1") + .phone("010-1234-5678") + .build(); + User savedUser = userRepository.save(user); + + // 모임 이미지 리스트 + List files = Arrays.asList( + "https://example.com/image1.jpg" + ); + + // 대상 파트 목록 + MeetingJoinablePart[] joinableParts = { + MeetingJoinablePart.SERVER, + MeetingJoinablePart.IOS + }; + + // DTO 생성 + MeetingV2CreateMeetingBodyDto meetingDto = new MeetingV2CreateMeetingBodyDto( + "알고보면 쓸데있는 개발 프로세스", // title + files, // files (모임 이미지 리스트) + "스터디", // category + "2024.10.01", // startDate (모집 시작 날짜) + "2024.10.15", // endDate (모집 끝 날짜) + 10, // capacity (모집 인원) + "백엔드 개발에 관심 있는 사람들을 위한 스터디입니다.", // desc (모집 정보) + "매주 온라인으로 진행되며, 발표와 토론이 포함됩니다.", // processDesc (진행 방식 소개) + "2024.10.16", // mStartDate (모임 활동 시작 날짜) + "2024.12.30", // mEndDate (모임 활동 종료 날짜) + "5년차 백엔드 개발자입니다.", // leaderDesc (개설자 소개) + "준비물은 노트북과 열정입니다.", // note (유의할 사항) + false, // isMentorNeeded (멘토 필요 여부) + true, // canJoinOnlyActiveGeneration (활동기수만 지원 가능 여부) + joinableParts, // joinableParts (대상 파트 목록) + List.of(savedUser.getId()) + ); + + // when, then + Assertions.assertThatThrownBy(() -> meetingV2Service.createMeeting((meetingDto), + savedUser.getId())) + .isInstanceOf(BadRequestException.class) + .hasMessageContaining(LEADER_CANNOT_BE_CO_LEADER_APPLY.getErrorCode()); + + } + @Test @DisplayName("모임 개설자의 활동기수 정보가 없을 경우, 예외가 발생한다.") void userHasNotActivities_createMeeting_exception() {