diff --git a/backend/src/main/java/com/woowacourse/moamoa/study/domain/AttachedTags.java b/backend/src/main/java/com/woowacourse/moamoa/study/domain/AttachedTags.java index 4cbfa74e4..c9c0fc2af 100644 --- a/backend/src/main/java/com/woowacourse/moamoa/study/domain/AttachedTags.java +++ b/backend/src/main/java/com/woowacourse/moamoa/study/domain/AttachedTags.java @@ -7,7 +7,9 @@ import javax.persistence.ElementCollection; import javax.persistence.Embeddable; import javax.persistence.JoinColumn; +import lombok.Getter; +@Getter @Embeddable public class AttachedTags { diff --git a/backend/src/main/java/com/woowacourse/moamoa/study/domain/Participants.java b/backend/src/main/java/com/woowacourse/moamoa/study/domain/Participants.java index 4130fc450..3603be43d 100644 --- a/backend/src/main/java/com/woowacourse/moamoa/study/domain/Participants.java +++ b/backend/src/main/java/com/woowacourse/moamoa/study/domain/Participants.java @@ -57,7 +57,7 @@ boolean isOwner(Long memberId) { return ownerId.equals(memberId); } - int getSize() { + public int getSize() { return size; } diff --git a/backend/src/main/java/com/woowacourse/moamoa/study/domain/RecruitPlanner.java b/backend/src/main/java/com/woowacourse/moamoa/study/domain/RecruitPlanner.java index 9c310b39f..e3e5b84e9 100644 --- a/backend/src/main/java/com/woowacourse/moamoa/study/domain/RecruitPlanner.java +++ b/backend/src/main/java/com/woowacourse/moamoa/study/domain/RecruitPlanner.java @@ -9,8 +9,10 @@ import javax.persistence.Column; import javax.persistence.Embeddable; import javax.persistence.Enumerated; +import lombok.Getter; import lombok.NoArgsConstructor; +@Getter @Embeddable @NoArgsConstructor(access = PROTECTED) public class RecruitPlanner { @@ -55,7 +57,7 @@ void closeRecruiting() { recruitStatus = RECRUITMENT_END; } - LocalDate getEnrollmentEndDate() { + public LocalDate getEnrollmentEndDate() { return enrollmentEndDate; } @@ -73,8 +75,4 @@ int getCapacity() { boolean hasCapacity() { return max != null; } - - public RecruitStatus getRecruitStatus() { - return recruitStatus; - } } diff --git a/backend/src/main/java/com/woowacourse/moamoa/study/domain/StudyPlanner.java b/backend/src/main/java/com/woowacourse/moamoa/study/domain/StudyPlanner.java index 2116707da..f3148c08d 100644 --- a/backend/src/main/java/com/woowacourse/moamoa/study/domain/StudyPlanner.java +++ b/backend/src/main/java/com/woowacourse/moamoa/study/domain/StudyPlanner.java @@ -12,8 +12,10 @@ import javax.persistence.Embeddable; import javax.persistence.Enumerated; import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.NoArgsConstructor; +@Getter @Embeddable @EqualsAndHashCode @NoArgsConstructor(access = PROTECTED) diff --git a/backend/src/main/java/com/woowacourse/moamoa/study/service/StudyService.java b/backend/src/main/java/com/woowacourse/moamoa/study/service/StudyService.java index 6b3434306..23fe93b6a 100644 --- a/backend/src/main/java/com/woowacourse/moamoa/study/service/StudyService.java +++ b/backend/src/main/java/com/woowacourse/moamoa/study/service/StudyService.java @@ -42,6 +42,7 @@ public Study createStudy(final Long githubId, final CreatingStudyRequest request final Participants participants = request.mapToParticipants(owner.getId()); final RecruitPlanner recruitPlanner = request.mapToRecruitPlan(); + final StudyPlanner studyPlanner = request.mapToStudyPlanner(createdAt.toLocalDate()); final AttachedTags attachedTags = request.mapToAttachedTags(); final Content content = request.mapToContent(); diff --git a/backend/src/main/java/com/woowacourse/moamoa/study/service/request/CreatingStudyRequest.java b/backend/src/main/java/com/woowacourse/moamoa/study/service/request/CreatingStudyRequest.java index 74e62242d..b1266a0c2 100644 --- a/backend/src/main/java/com/woowacourse/moamoa/study/service/request/CreatingStudyRequest.java +++ b/backend/src/main/java/com/woowacourse/moamoa/study/service/request/CreatingStudyRequest.java @@ -1,5 +1,7 @@ package com.woowacourse.moamoa.study.service.request; +import static com.woowacourse.moamoa.study.domain.RecruitStatus.RECRUITMENT_END; +import static com.woowacourse.moamoa.study.domain.RecruitStatus.RECRUITMENT_START; import static com.woowacourse.moamoa.study.domain.StudyStatus.IN_PROGRESS; import static com.woowacourse.moamoa.study.domain.StudyStatus.PREPARE; @@ -7,9 +9,8 @@ import com.woowacourse.moamoa.study.domain.AttachedTags; import com.woowacourse.moamoa.study.domain.Content; import com.woowacourse.moamoa.study.domain.Participants; -import com.woowacourse.moamoa.study.domain.StudyPlanner; import com.woowacourse.moamoa.study.domain.RecruitPlanner; -import com.woowacourse.moamoa.study.domain.RecruitStatus; +import com.woowacourse.moamoa.study.domain.StudyPlanner; import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; @@ -64,7 +65,7 @@ public String getEndDate() { } public String getMaxMemberCount() { - return maxMemberCount == null ? "" : String.valueOf(maxMemberCount); + return maxMemberCount == null ? null : String.valueOf(maxMemberCount); } public String getEnrollmentEndDate() { @@ -87,7 +88,11 @@ public Participants mapToParticipants(Long ownerId) { } public RecruitPlanner mapToRecruitPlan() { - return new RecruitPlanner(maxMemberCount, RecruitStatus.RECRUITMENT_START, enrollmentEndDate); + if (maxMemberCount != null && maxMemberCount == 1) { + return new RecruitPlanner(maxMemberCount, RECRUITMENT_END, enrollmentEndDate); + } + + return new RecruitPlanner(maxMemberCount, RECRUITMENT_START, enrollmentEndDate); } public AttachedTags mapToAttachedTags() { diff --git a/backend/src/test/java/com/woowacourse/acceptance/test/review/ReviewsAcceptanceTest.java b/backend/src/test/java/com/woowacourse/acceptance/test/review/ReviewsAcceptanceTest.java index 6092f6ed0..dbf4cec3d 100644 --- a/backend/src/test/java/com/woowacourse/acceptance/test/review/ReviewsAcceptanceTest.java +++ b/backend/src/test/java/com/woowacourse/acceptance/test/review/ReviewsAcceptanceTest.java @@ -161,7 +161,7 @@ public void getReviewsBySize() { final ReviewResponse 베루스_리뷰 = new ReviewResponse(베루스_리뷰_ID, 베루스, 리뷰_생성일, 리뷰_수정일, "리뷰 내용4"); assertThat(reviewsResponse.getTotalCount()).isEqualTo(4); - assertThat(reviewsResponse.getReviews()).containsExactly(베루스_리뷰, 디우_리뷰); + assertThat(reviewsResponse.getReviews()).containsExactlyInAnyOrder(디우_리뷰, 베루스_리뷰); } @DisplayName("자신이 참여한 스터디에 작성한 리뷰를 삭제할 수 있다.") diff --git a/backend/src/test/java/com/woowacourse/acceptance/test/tag/TagAcceptanceTest.java b/backend/src/test/java/com/woowacourse/acceptance/test/tag/TagAcceptanceTest.java index a7bb614ca..deb6b889c 100644 --- a/backend/src/test/java/com/woowacourse/acceptance/test/tag/TagAcceptanceTest.java +++ b/backend/src/test/java/com/woowacourse/acceptance/test/tag/TagAcceptanceTest.java @@ -8,12 +8,9 @@ import com.woowacourse.acceptance.AcceptanceTest; import io.restassured.RestAssured; -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 org.springframework.http.HttpStatus; -import org.springframework.jdbc.core.JdbcTemplate; public class TagAcceptanceTest extends AcceptanceTest { diff --git a/backend/src/test/java/com/woowacourse/moamoa/fixtures/AuthFixtures.java b/backend/src/test/java/com/woowacourse/moamoa/fixtures/AuthFixtures.java deleted file mode 100644 index de99710a8..000000000 --- a/backend/src/test/java/com/woowacourse/moamoa/fixtures/AuthFixtures.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.woowacourse.moamoa.fixtures; - -public class AuthFixtures { - - public static final String JWT_토큰 = "header.payload.signature"; -} diff --git a/backend/src/test/java/com/woowacourse/moamoa/fixtures/MemberFixtures.java b/backend/src/test/java/com/woowacourse/moamoa/fixtures/MemberFixtures.java index 62cced407..712372137 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/fixtures/MemberFixtures.java +++ b/backend/src/test/java/com/woowacourse/moamoa/fixtures/MemberFixtures.java @@ -11,7 +11,6 @@ public class MemberFixtures { public static final String 짱구_유저네임 = "jjanggu"; public static final String 짱구_이미지 = "https://jjanggu.png"; public static final String 짱구_프로필 = "https://jjanggu.com"; - public static final Member 짱구 = new Member(짱구_깃허브_아이디, 짱구_유저네임, 짱구_이미지, 짱구_프로필); public static final MemberData 짱구_응답 = new MemberData(짱구_깃허브_아이디, 짱구_유저네임, 짱구_이미지, 짱구_프로필); /* 그린론 */ @@ -20,7 +19,6 @@ public class MemberFixtures { public static final String 그린론_유저네임 = "greenlawn"; public static final String 그린론_이미지 = "https://greenlawn.png"; public static final String 그린론_프로필 = "https://greenlawn.com"; - public static final Member 그린론 = new Member(그린론_깃허브_아이디, 그린론_유저네임, 그린론_이미지, 그린론_프로필); public static final MemberData 그린론_응답 = new MemberData(그린론_깃허브_아이디, 그린론_유저네임, 그린론_이미지, 그린론_프로필); /* 디우 */ @@ -29,7 +27,6 @@ public class MemberFixtures { public static final String 디우_유저네임 = "dwoo"; public static final String 디우_이미지 = "https://dwoo.png"; public static final String 디우_프로필 = "https://dwoo.com"; - public static final Member 디우 = new Member(디우_깃허브_아이디, 디우_유저네임, 디우_이미지, 디우_프로필); public static final MemberData 디우_응답 = new MemberData(디우_깃허브_아이디, 디우_유저네임, 디우_이미지, 디우_프로필); /* 베루스 */ @@ -38,24 +35,43 @@ public class MemberFixtures { public static final String 베루스_유저네임 = "verus"; public static final String 베루스_이미지 = "https://verus.png"; public static final String 베루스_프로필 = "https://verus.com"; - public static final Member 베루스 = new Member(베루스_깃허브_아이디, 베루스_유저네임, 베루스_이미지, 베루스_프로필); public static final MemberData 베루스_응답 = new MemberData(베루스_깃허브_아이디, 베루스_유저네임, 베루스_이미지, 베루스_프로필); /* 병민 */ - public static final Long 병민_아이디 = 5L; public static final Long 병민_깃허브_아이디 = 5L; public static final String 병민_유저네임 = "airman"; public static final String 병민_이미지 = "https://airman.png"; public static final String 병민_프로필 = "https://airman.com"; - public static final Member 병민 = new Member(병민_깃허브_아이디, 병민_유저네임, 병민_이미지, 병민_프로필); public static final MemberData 병민_응답 = new MemberData(병민_깃허브_아이디, 병민_유저네임, 병민_이미지, 병민_프로필); /* 태태 */ - public static final Long 태태_아이디 = 6L; public static final Long 태태_깃허브_아이디 = 6L; public static final String 태태_유저네임 = "nannoo"; public static final String 태태_이미지 = "https://nannoo.png"; public static final String 태태_프로필 = "https://nannoo.com"; - public static final Member 태태 = new Member(태태_깃허브_아이디, 태태_유저네임, 태태_이미지, 태태_프로필); public static final MemberData 태태_응답 = new MemberData(태태_깃허브_아이디, 태태_유저네임, 태태_이미지, 태태_프로필); + + public static Member 짱구() { + return new Member(짱구_깃허브_아이디, 짱구_유저네임, 짱구_이미지, 짱구_프로필); + } + + public static Member 그린론() { + return new Member(그린론_깃허브_아이디, 그린론_유저네임, 그린론_이미지, 그린론_프로필); + } + + public static Member 디우() { + return new Member(디우_깃허브_아이디, 디우_유저네임, 디우_이미지, 디우_프로필); + } + + public static Member 베루스() { + return new Member(베루스_깃허브_아이디, 베루스_유저네임, 베루스_이미지, 베루스_프로필); + } + + public static Member 병민() { + return new Member(병민_깃허브_아이디, 병민_유저네임, 병민_이미지, 병민_프로필); + } + + public static Member 태태() { + return new Member(태태_깃허브_아이디, 태태_유저네임, 태태_이미지, 태태_프로필); + } } diff --git a/backend/src/test/java/com/woowacourse/moamoa/fixtures/ReviewFixtures.java b/backend/src/test/java/com/woowacourse/moamoa/fixtures/ReviewFixtures.java index c99f56bd7..cdd020efd 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/fixtures/ReviewFixtures.java +++ b/backend/src/test/java/com/woowacourse/moamoa/fixtures/ReviewFixtures.java @@ -1,47 +1,50 @@ package com.woowacourse.moamoa.fixtures; -import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론_아이디; -import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론_응답; -import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우_아이디; -import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우_응답; -import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스_아이디; -import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스_응답; -import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_아이디; -import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_응답; -import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_아이디; - import com.woowacourse.moamoa.review.domain.AssociatedStudy; import com.woowacourse.moamoa.review.domain.Review; import com.woowacourse.moamoa.review.domain.Reviewer; -import com.woowacourse.moamoa.review.query.data.ReviewData; -import java.time.LocalDate; public class ReviewFixtures { /* 자바 스터디 리뷰 */ - public static final Long 자바_리뷰1_아이디 = 1L; public static final String 자바_리뷰1_내용 = "자바 스터디 첫 번째 리뷰입니다."; - public static final Review 자바_리뷰1 = new Review(new AssociatedStudy(자바_스터디_아이디), new Reviewer(짱구_아이디), 자바_리뷰1_내용); - public static final ReviewData 자바_리뷰1_데이터 = new ReviewData(자바_리뷰1_아이디, 짱구_응답, - LocalDate.of(2022, 10, 9), LocalDate.of(2022, 10, 9), 자바_리뷰1_내용); - - public static final Long 자바_리뷰2_아이디 = 2L; public static final String 자바_리뷰2_내용 = "자바 스터디 두 번째 리뷰입니다."; - public static final Review 자바_리뷰2 = new Review(new AssociatedStudy(자바_스터디_아이디), new Reviewer(베루스_아이디), 자바_리뷰2_내용); - public static final ReviewData 자바_리뷰2_데이터 = new ReviewData(자바_리뷰2_아이디, 베루스_응답, - LocalDate.of(2022, 10, 9), LocalDate.of(2022, 10, 10), 자바_리뷰2_내용); - - public static final Long 자바_리뷰3_아이디 = 3L; public static final String 자바_리뷰3_내용 = "자바 스터디 세 번째 리뷰입니다."; - public static final Review 자바_리뷰3 = new Review(new AssociatedStudy(자바_스터디_아이디), new Reviewer(그린론_아이디), 자바_리뷰3_내용); - public static final ReviewData 자바_리뷰3_데이터 = new ReviewData(자바_리뷰3_아이디, 그린론_응답, - LocalDate.of(2022, 10, 10), LocalDate.of(2022, 10, 10), 자바_리뷰3_내용); - - public static final Long 자바_리뷰4_아이디 = 4L; public static final String 자바_리뷰4_내용 = "자바 스터디 네 번째 리뷰입니다."; - public static final Review 자바_리뷰4 = new Review(new AssociatedStudy(자바_스터디_아이디), new Reviewer(디우_아이디), 자바_리뷰4_내용); - public static final ReviewData 자바_리뷰4_데이터 = new ReviewData(자바_리뷰4_아이디, 디우_응답, - LocalDate.of(2022, 10, 14), LocalDate.of(2022, 10, 15), 자바_리뷰4_내용); - public static final int 자바_리뷰_총_개수 = 4; + public static final String 리액트_리뷰1_내용 = "리액트 스터디 첫 번째 리뷰입니다."; + public static final String 리액트_리뷰2_내용 = "리액트 스터디 두 번째 리뷰입니다."; + public static final String 리액트_리뷰3_내용 = "리액트 스터디 세 번째 리뷰입니다."; + + public static Review 자바_리뷰1(final Long studyId, final Long memberId) { + return 리뷰(studyId, memberId, 자바_리뷰1_내용); + } + + public static Review 자바_리뷰2(final Long studyId, final Long memberId) { + return 리뷰(studyId, memberId, 자바_리뷰2_내용); + } + + public static Review 자바_리뷰3(final Long studyId, final Long memberId) { + return 리뷰(studyId, memberId, 자바_리뷰3_내용); + } + + public static Review 자바_리뷰4(final Long studyId, final Long memberId) { + return 리뷰(studyId, memberId, 자바_리뷰4_내용); + } + + public static Review 리액트_리뷰1(final Long studyId, final Long memberId) { + return 리뷰(studyId, memberId, 리액트_리뷰1_내용); + } + + public static Review 리액트_리뷰2(final Long studyId, final Long memberId) { + return 리뷰(studyId, memberId, 리액트_리뷰2_내용); + } + + public static Review 리액트_리뷰3(final Long studyId, final Long memberId) { + return 리뷰(studyId, memberId, 리액트_리뷰3_내용); + } + + private static Review 리뷰(final Long studyId, final Long reviewerId, final String content) { + return new Review(new AssociatedStudy(studyId), new Reviewer(reviewerId), content); + } } diff --git a/backend/src/test/java/com/woowacourse/moamoa/fixtures/StudyFixtures.java b/backend/src/test/java/com/woowacourse/moamoa/fixtures/StudyFixtures.java index 064a04102..5c4190028 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/fixtures/StudyFixtures.java +++ b/backend/src/test/java/com/woowacourse/moamoa/fixtures/StudyFixtures.java @@ -1,15 +1,44 @@ package com.woowacourse.moamoa.fixtures; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론_깃허브_아이디; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론_아이디; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론_유저네임; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론_이미지; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론_프로필; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우_깃허브_아이디; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우_아이디; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우_유저네임; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우_이미지; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우_프로필; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스_깃허브_아이디; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스_아이디; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스_유저네임; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스_이미지; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스_프로필; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_깃허브_아이디; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_아이디; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_유저네임; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_이미지; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_프로필; +import static com.woowacourse.moamoa.fixtures.TagFixtures.BE_태그_아이디; +import static com.woowacourse.moamoa.fixtures.TagFixtures.FE_태그_아이디; +import static com.woowacourse.moamoa.fixtures.TagFixtures.리액트_태그_아이디; +import static com.woowacourse.moamoa.fixtures.TagFixtures.우테코4기_태그_아이디; +import static com.woowacourse.moamoa.fixtures.TagFixtures.자바_태그_아이디; +import static com.woowacourse.moamoa.study.domain.RecruitStatus.RECRUITMENT_END; +import static com.woowacourse.moamoa.study.domain.RecruitStatus.RECRUITMENT_START; +import static com.woowacourse.moamoa.study.domain.StudyStatus.IN_PROGRESS; +import static com.woowacourse.moamoa.study.domain.StudyStatus.PREPARE; + +import com.woowacourse.moamoa.member.domain.Member; import com.woowacourse.moamoa.study.domain.AttachedTag; import com.woowacourse.moamoa.study.domain.AttachedTags; import com.woowacourse.moamoa.study.domain.Content; import com.woowacourse.moamoa.study.domain.Participants; import com.woowacourse.moamoa.study.domain.RecruitPlanner; -import com.woowacourse.moamoa.study.domain.RecruitStatus; import com.woowacourse.moamoa.study.domain.Study; import com.woowacourse.moamoa.study.domain.StudyPlanner; -import com.woowacourse.moamoa.study.domain.StudyStatus; -import com.woowacourse.moamoa.study.service.StudyResponse; +import com.woowacourse.moamoa.study.service.request.CreatingStudyRequest; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -18,85 +47,155 @@ public class StudyFixtures { /* 자바 스터디 */ - public static final Long 자바_스터디_아이디 = 1L; + public static final Member 자바_스터디장 = new Member(짱구_아이디, 짱구_깃허브_아이디, 짱구_유저네임, 짱구_이미지, 짱구_프로필); public static final Content 자바_스터디_내용 = new Content("신짱구의 자바의 정석", "자바 스터디 요약", "자바 스터디 썸네일", "자바 스터디 설명입니다."); - public static final Participants 자바_스터디_참가자들 = new Participants( - MemberFixtures.짱구_아이디, Set.of(MemberFixtures.그린론_아이디, MemberFixtures.디우_아이디)); - public static final RecruitPlanner 자바_스터디_모집계획 = new RecruitPlanner(10, RecruitStatus.RECRUITMENT_START, LocalDate.now()); - public static final StudyPlanner 자바_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), StudyStatus.IN_PROGRESS); - public static final AttachedTags 자바_스터디_태그 = new AttachedTags(List.of(new AttachedTag(TagFixtures.자바_태그_아이디), new AttachedTag( - TagFixtures.우테코4기_태그_아이디), new AttachedTag(TagFixtures.BE_태그_아이디))); + public static final Participants 자바_스터디_참가자들 = new Participants(짱구_아이디, Set.of(그린론_아이디, 디우_아이디)); + public static final RecruitPlanner 자바_스터디_모집계획 = new RecruitPlanner(10, RECRUITMENT_START, LocalDate.now()); + public static final StudyPlanner 자바_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), IN_PROGRESS); + public static final AttachedTags 자바_스터디_태그 = new AttachedTags(List.of(new AttachedTag(자바_태그_아이디), new AttachedTag(우테코4기_태그_아이디), new AttachedTag(BE_태그_아이디))); public static final Study 자바_스터디 = new Study(자바_스터디_내용, 자바_스터디_참가자들, 자바_스터디_모집계획, 자바_스터디_계획, 자바_스터디_태그, LocalDateTime.now()); - public static final StudyResponse 자바_스터디_응답 = new StudyResponse(자바_스터디_아이디, 자바_스터디_내용.getTitle(), 자바_스터디_내용.getExcerpt(), - 자바_스터디_내용.getThumbnail(), 자바_스터디_모집계획.getRecruitStatus().name(), List.of( - TagFixtures.자바_태그_요약, TagFixtures.우테코4기_태그_요약, TagFixtures.BE_태그_요약)); + + public static Study 자바_스터디(final Long ownerId, final Set participants) { + return new Study(자바_스터디_내용, new Participants(ownerId, participants), 자바_스터디_모집계획, + 자바_스터디_계획, 자바_스터디_태그, LocalDateTime.now()); + } /* 리액트 스터디 */ - public static final Long 리액트_스터디_아이디 = 2L; + public static final Member 리액트_스터디장 = new Member(디우_아이디, 디우_깃허브_아이디, 디우_유저네임, 디우_이미지, 디우_프로필); public static final Content 리액트_스터디_내용 = new Content("디우의 이것이 리액트다.", "리액트 스터디 요약", "리액트 스터디 썸네일", "리액트 스터디 설명입니다."); - public static final Participants 리액트_스터디_참가자들 = new Participants( - MemberFixtures.디우_아이디, Set.of(MemberFixtures.짱구_아이디, MemberFixtures.그린론_아이디, MemberFixtures.베루스_아이디)); - public static final RecruitPlanner 리액트_스터디_모집계획 = new RecruitPlanner(5, RecruitStatus.RECRUITMENT_START, LocalDate.now()); - public static final StudyPlanner 리액트_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), StudyStatus.PREPARE); - public static final AttachedTags 리액트_스터디_태그 = new AttachedTags(List.of(new AttachedTag(TagFixtures.우테코4기_태그_아이디), new AttachedTag( - TagFixtures.FE_태그_아이디), new AttachedTag(TagFixtures.리액트_태그_아이디))); + public static final Participants 리액트_스터디_참가자들 = new Participants(디우_아이디, Set.of(짱구_아이디, 그린론_아이디, 베루스_아이디)); + public static final RecruitPlanner 리액트_스터디_모집계획 = new RecruitPlanner(5, RECRUITMENT_START, LocalDate.now()); + public static final StudyPlanner 리액트_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), PREPARE); + public static final AttachedTags 리액트_스터디_태그 = new AttachedTags(List.of(new AttachedTag(우테코4기_태그_아이디), new AttachedTag(FE_태그_아이디), new AttachedTag(리액트_태그_아이디))); public static final Study 리액트_스터디 = new Study(리액트_스터디_내용, 리액트_스터디_참가자들, 리액트_스터디_모집계획, 리액트_스터디_계획, 리액트_스터디_태그, LocalDateTime.now()); - public static final StudyResponse 리액트_스터디_응답 = new StudyResponse(리액트_스터디_아이디, 리액트_스터디_내용.getTitle(), 리액트_스터디_내용.getExcerpt(), - 리액트_스터디_내용.getThumbnail(), 리액트_스터디_모집계획.getRecruitStatus().name(), List.of(TagFixtures.우테코4기_태그_요약, TagFixtures.FE_태그_요약, TagFixtures.리액트_태그_요약)); - + + public static Study 리액트_스터디(final Long ownerId, final Set participants) { + return new Study(리액트_스터디_내용, new Participants(ownerId, participants), 리액트_스터디_모집계획, + 리액트_스터디_계획, 리액트_스터디_태그, LocalDateTime.now()); + } + /* 자바스크립트스크립트 스터디 */ - public static final Long 자바스크립트_스터디_아이디 = 3L; + public static final Member 자바스크립트_스터디장 = new Member(그린론_아이디, 그린론_깃허브_아이디, 그린론_유저네임, 그린론_이미지, 그린론_프로필); public static final Content 자바스크립트_스터디_내용 = new Content("그린론의 모던 자바스크립트 인 액션", "자바스크립트 스터디 요약", "자바스크립트 스터디 썸네일", "자바스크립트 스터디 설명입니다."); - public static final Participants 자바스크립트_스터디_참가자들 = new Participants( - MemberFixtures.그린론_아이디, Set.of(MemberFixtures.디우_아이디, MemberFixtures.베루스_아이디)); - public static final RecruitPlanner 자바스크립트_스터디_모집계획 = new RecruitPlanner(20, RecruitStatus.RECRUITMENT_START, LocalDate.now()); - public static final StudyPlanner 자바스크립트_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), StudyStatus.PREPARE); - public static final AttachedTags 자바스크립트_스터디_태그 = new AttachedTags(List.of(new AttachedTag(TagFixtures.우테코4기_태그_아이디), new AttachedTag( - TagFixtures.FE_태그_아이디))); + public static final Participants 자바스크립트_스터디_참가자들 = new Participants(그린론_아이디, Set.of(디우_아이디, 베루스_아이디)); + public static final RecruitPlanner 자바스크립트_스터디_모집계획 = new RecruitPlanner(20, RECRUITMENT_START, LocalDate.now()); + public static final StudyPlanner 자바스크립트_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), PREPARE); + public static final AttachedTags 자바스크립트_스터디_태그 = new AttachedTags(List.of(new AttachedTag(우테코4기_태그_아이디), new AttachedTag(FE_태그_아이디))); public static final Study 자바스크립트_스터디 = new Study(자바스크립트_스터디_내용, 자바스크립트_스터디_참가자들, 자바스크립트_스터디_모집계획, 자바스크립트_스터디_계획, 자바스크립트_스터디_태그, LocalDateTime.now()); - public static final StudyResponse 자바스크립트_스터디_응답 = new StudyResponse(자바스크립트_스터디_아이디, 자바스크립트_스터디_내용.getTitle(), 자바스크립트_스터디_내용.getExcerpt(), - 자바스크립트_스터디_내용.getThumbnail(), 자바스크립트_스터디_모집계획.getRecruitStatus().name(), List.of(TagFixtures.우테코4기_태그_요약, TagFixtures.FE_태그_요약)); + + public static Study 자바스크립트_스터디(final Long ownerId, final Set participants) { + return new Study(자바스크립트_스터디_내용, new Participants(ownerId, participants), 자바스크립트_스터디_모집계획, + 자바스크립트_스터디_계획, 자바스크립트_스터디_태그, LocalDateTime.now()); + } /* HTTP 스터디 */ - public static final Long HTTP_스터디_아이디 = 4L; + public static final Member HTTP_스터디장 = new Member(디우_아이디, 디우_깃허브_아이디, 디우_유저네임, 디우_이미지, 디우_프로필); public static final Content HTTP_스터디_내용 = new Content("디우의 HTTP", "HTTP 스터디 요약", "HTTP 스터디 썸네일", "HTTP 스터디 설명입니다."); - public static final Participants HTTP_스터디_참가자들 = new Participants( - MemberFixtures.디우_아이디, Set.of(MemberFixtures.베루스_아이디, MemberFixtures.짱구_아이디)); - public static final RecruitPlanner HTTP_스터디_모집계획 = new RecruitPlanner(4, RecruitStatus.RECRUITMENT_END, LocalDate.now()); - public static final StudyPlanner HTTP_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), StudyStatus.PREPARE); - public static final AttachedTags HTTP_스터디_태그 = new AttachedTags(List.of(new AttachedTag(TagFixtures.우테코4기_태그_아이디), new AttachedTag( - TagFixtures.BE_태그_아이디))); + public static final Participants HTTP_스터디_참가자들 = new Participants(디우_아이디, Set.of(베루스_아이디, 짱구_아이디)); + public static final RecruitPlanner HTTP_스터디_모집계획 = new RecruitPlanner(4, RECRUITMENT_END, LocalDate.now()); + public static final StudyPlanner HTTP_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), PREPARE); + public static final AttachedTags HTTP_스터디_태그 = new AttachedTags(List.of(new AttachedTag(우테코4기_태그_아이디), new AttachedTag(BE_태그_아이디))); public static final Study HTTP_스터디 = new Study(HTTP_스터디_내용, HTTP_스터디_참가자들, HTTP_스터디_모집계획, HTTP_스터디_계획, HTTP_스터디_태그, LocalDateTime.now()); - public static final StudyResponse HTTP_스터디_응답 = new StudyResponse(HTTP_스터디_아이디, HTTP_스터디_내용.getTitle(), HTTP_스터디_내용.getExcerpt(), - HTTP_스터디_내용.getThumbnail(), HTTP_스터디_모집계획.getRecruitStatus().name(), List.of(TagFixtures.우테코4기_태그_요약, TagFixtures.BE_태그_요약)); - - /* 알고리즘 스터디 */ - public static final Long 알고리즘_스터디_아이디 = 5L; + + public static Study HTTP_스터디(final Long ownerId, final Set participants) { + return new Study(HTTP_스터디_내용, new Participants(ownerId, participants), HTTP_스터디_모집계획, + HTTP_스터디_계획, HTTP_스터디_태그, LocalDateTime.now()); + } + + /* 알고리즘 스터디 (모집 기간과 스터디 종료일자가 없음) */ + public static final Member 알고리즘_스터디장 = new Member(베루스_아이디, 베루스_깃허브_아이디, 베루스_유저네임, 베루스_이미지, 베루스_프로필); public static final Content 알고리즘_스터디_내용 = new Content("알고리즘 주도 개발 1타 강사 베루스", "알고리즘 스터디 요약", "알고리즘 스터디 썸네일", "알고리즘 스터디 설명입니다."); - public static final Participants 알고리즘_스터디_참가자들 = new Participants( - MemberFixtures.베루스_아이디, Set.of(MemberFixtures.그린론_아이디, MemberFixtures.디우_아이디)); - public static final RecruitPlanner 알고리즘_스터디_모집계획 = new RecruitPlanner(10, RecruitStatus.RECRUITMENT_END, LocalDate.now()); - public static final StudyPlanner 알고리즘_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), StudyStatus.PREPARE); + public static final Participants 알고리즘_스터디_참가자들 = new Participants(베루스_아이디, Set.of(그린론_아이디, 디우_아이디)); + public static final RecruitPlanner 알고리즘_스터디_모집계획 = new RecruitPlanner(null, RECRUITMENT_END, null); + public static final StudyPlanner 알고리즘_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), null, PREPARE); public static final AttachedTags 알고리즘_스터디_태그 = new AttachedTags(List.of()); public static final Study 알고리즘_스터디 = new Study(알고리즘_스터디_내용, 알고리즘_스터디_참가자들, 알고리즘_스터디_모집계획, 알고리즘_스터디_계획, 알고리즘_스터디_태그, LocalDateTime.now()); - public static final StudyResponse 알고리즘_스터디_응답 = new StudyResponse(알고리즘_스터디_아이디, 알고리즘_스터디_내용.getTitle(), 알고리즘_스터디_내용.getExcerpt(), - 알고리즘_스터디_내용.getThumbnail(), 알고리즘_스터디_모집계획.getRecruitStatus().name(), List.of()); - - /* 리눅스 스터디 */ - public static final Long 리눅스_스터디_아이디 = 6L; + + public static Study 알고리즘_스터디(final Long ownerId, final Set participants) { + return new Study(알고리즘_스터디_내용, new Participants(ownerId, participants), 알고리즘_스터디_모집계획, + 알고리즘_스터디_계획, 알고리즘_스터디_태그, LocalDateTime.now()); + } + + /* 리눅스 스터디 (최대 인원 없음) */ + public static final Member 리눅스_스터디장 = new Member(베루스_아이디, 베루스_깃허브_아이디, 베루스_유저네임, 베루스_이미지, 베루스_프로필); public static final Content 리눅스_스터디_내용 = new Content("벨우스의 린우스", "리눅스 스터디 요약", "리눅스 스터디 썸네일", "리눅스 스터디 설명입니다."); - public static final Participants 리눅스_스터디_참가자들 = new Participants( - MemberFixtures.베루스_아이디, Set.of(MemberFixtures.그린론_아이디, MemberFixtures.디우_아이디)); - public static final RecruitPlanner 리눅스_스터디_모집계획 = new RecruitPlanner(10, RecruitStatus.RECRUITMENT_START, LocalDate.now()); - public static final StudyPlanner 리눅스_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), StudyStatus.PREPARE); + public static final Participants 리눅스_스터디_참가자들 = new Participants(베루스_아이디, Set.of(그린론_아이디, 디우_아이디)); + public static final RecruitPlanner 리눅스_스터디_모집계획 = new RecruitPlanner(null, RECRUITMENT_START, LocalDate.now()); + public static final StudyPlanner 리눅스_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), PREPARE); public static final AttachedTags 리눅스_스터디_태그 = new AttachedTags(List.of()); public static final Study 리눅스_스터디 = new Study(리눅스_스터디_내용, 리눅스_스터디_참가자들, 리눅스_스터디_모집계획, 리눅스_스터디_계획, 리눅스_스터디_태그, LocalDateTime.now()); - public static final StudyResponse 리눅스_스터디_응답 = new StudyResponse(리눅스_스터디_아이디, 리눅스_스터디_내용.getTitle(), 리눅스_스터디_내용.getExcerpt(), - 리눅스_스터디_내용.getThumbnail(), 리눅스_스터디_모집계획.getRecruitStatus().name(), List.of()); + + public static Study 리눅스_스터디(final Long ownerId, final Set participants) { + return new Study(리눅스_스터디_내용, new Participants(ownerId, participants), 리눅스_스터디_모집계획, + 리눅스_스터디_계획, 리눅스_스터디_태그, LocalDateTime.now()); + } + + /* OS 스터디 */ + public static final Member OS_스터디장 = new Member(디우_아이디, 디우_깃허브_아이디, 디우_유저네임, 디우_이미지, 디우_프로필); + public static final Content OS_스터디_내용 = new Content("디우의 OS 스터디", "OS 스터디 요약", "OS 스터디 썸네일", "OS 스터디 설명입니다."); + public static final Participants OS_스터디_참가자들 = new Participants(디우_아이디, Set.of(그린론_아이디, 짱구_아이디, 베루스_아이디)); + public static final RecruitPlanner OS_스터디_모집계획 = new RecruitPlanner(10, RECRUITMENT_START, LocalDate.now()); + public static final StudyPlanner OS_스터디_계획 = new StudyPlanner(LocalDate.now().plusMonths(1), LocalDate.now().plusMonths(2), PREPARE); + public static final AttachedTags OS_스터디_태그 = new AttachedTags(List.of(new AttachedTag(우테코4기_태그_아이디), new AttachedTag(BE_태그_아이디))); + + public static Study OS_스터디(final Long ownerId, final Set participants) { + return new Study(OS_스터디_내용, new Participants(ownerId, participants), OS_스터디_모집계획, + OS_스터디_계획, OS_스터디_태그, LocalDateTime.now()); + } + + public static CreatingStudyRequest 자바_스터디_신청서(LocalDate now) { + return CreatingStudyRequest.builder() + .title("java 스터디").excerpt("자바 설명").thumbnail("java image").description("자바 소개") + .startDate(now) + .build(); + } + + public static CreatingStudyRequest 자바_스터디_신청서(List tagIds, int maxMemberCount, LocalDate now) { + return CreatingStudyRequest.builder() + .title("Java 스터디").excerpt("자바 설명").thumbnail("java thumbnail").description("그린론의 우당탕탕 자바 스터디입니다.") + .startDate(now).tagIds(tagIds).maxMemberCount(maxMemberCount) + .build(); + } + + public static CreatingStudyRequest 리액트_스터디_신청서(LocalDate now) { + return CreatingStudyRequest.builder() + .title("react 스터디").excerpt("리액트 설명").thumbnail("react image").description("리액트 소개") + .startDate(now) + .build(); + } + + public static CreatingStudyRequest 리액트_스터디_신청서(List tagIds, int maxMemberCount, LocalDate now) { + return CreatingStudyRequest.builder() + .title("React 스터디").excerpt("리액트 설명").thumbnail("react thumbnail").description("디우의 뤼액트 스터디입니다.") + .startDate(LocalDate.now()).endDate(now).enrollmentEndDate(LocalDate.now()) + .tagIds(tagIds).maxMemberCount(maxMemberCount) + .build(); + } + + public static CreatingStudyRequest 자바스크립트_스터디_신청서(List tagIds, LocalDate now) { + return CreatingStudyRequest.builder() + .title("javaScript 스터디").excerpt("자바스크립트 설명").thumbnail("javascript thumbnail").description("자바스크립트 설명") + .startDate(now).tagIds(tagIds) + .build(); + } + + public static CreatingStudyRequest HTTP_스터디_신청서(List tagIds, LocalDate now) { + return CreatingStudyRequest.builder() + .title("HTTP 스터디").excerpt("HTTP 설명").thumbnail("http thumbnail").description("HTTP 설명") + .startDate(now).tagIds(tagIds) + .build(); + } + + public static CreatingStudyRequest 알고리즘_스터디_신청서(List tagIds, LocalDate now) { + return CreatingStudyRequest.builder() + .title("알고리즘 스터디").excerpt("알고리즘 설명").thumbnail("algorithm thumbnail").description("알고리즘 설명") + .startDate(now).tagIds(tagIds) + .build(); + } } diff --git a/backend/src/test/java/com/woowacourse/moamoa/member/domain/repository/MemberRepositoryTest.java b/backend/src/test/java/com/woowacourse/moamoa/member/domain/repository/MemberRepositoryTest.java index 9ae24152a..34659c744 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/member/domain/repository/MemberRepositoryTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/member/domain/repository/MemberRepositoryTest.java @@ -12,7 +12,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest class MemberRepositoryTest { diff --git a/backend/src/test/java/com/woowacourse/moamoa/referenceroom/controller/ReferenceRoomControllerTest.java b/backend/src/test/java/com/woowacourse/moamoa/referenceroom/controller/ReferenceRoomControllerTest.java index f99fd2090..59651a7d9 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/referenceroom/controller/ReferenceRoomControllerTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/referenceroom/controller/ReferenceRoomControllerTest.java @@ -6,6 +6,7 @@ import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스_깃허브_아이디; import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구; import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_깃허브_아이디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_신청서; import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.woowacourse.moamoa.common.RepositoryTest; @@ -56,17 +57,14 @@ void setUp() { sut = new ReferenceRoomController(new ReferenceRoomService(memberRepository, studyRepository, linkRepository)); // 사용자 추가 - jjangguId = memberRepository.save(짱구).getId(); - verusId = memberRepository.save(베루스).getId(); - dwooId = memberRepository.save(디우).getId(); + jjangguId = memberRepository.save(짱구()).getId(); + verusId = memberRepository.save(베루스()).getId(); + dwooId = memberRepository.save(디우()).getId(); // 스터디 생성 final StudyService studyService = new StudyService(studyRepository, memberRepository, new DateTimeSystem()); final LocalDate startDate = LocalDate.now(); - final CreatingStudyRequest javaStudyRequest = CreatingStudyRequest.builder() - .title("java 스터디").excerpt("자바 설명").thumbnail("java image").description("자바 소개") - .startDate(startDate) - .build(); + final CreatingStudyRequest javaStudyRequest = 자바_스터디_신청서(startDate); javaStudyId = studyService.createStudy(짱구_깃허브_아이디, javaStudyRequest).getId(); studyService.participateStudy(베루스_깃허브_아이디, javaStudyId); diff --git a/backend/src/test/java/com/woowacourse/moamoa/referenceroom/controller/SearchingReferenceRoomControllerTest.java b/backend/src/test/java/com/woowacourse/moamoa/referenceroom/controller/SearchingReferenceRoomControllerTest.java index 73fda2126..6a4ef8766 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/referenceroom/controller/SearchingReferenceRoomControllerTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/referenceroom/controller/SearchingReferenceRoomControllerTest.java @@ -14,6 +14,7 @@ import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구; import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_깃허브_아이디; import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_응답; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_신청서; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertAll; @@ -77,20 +78,17 @@ void setUp() { new SearchingReferenceRoomService(linkDao, memberRepository, studyRepository)); // 사용자 추가 - final Member jjanggu = memberRepository.save(짱구); - final Member greenlawn = memberRepository.save(그린론); - final Member dwoo = memberRepository.save(디우); - final Member verus = memberRepository.save(베루스); - memberRepository.save(병민); + final Member jjanggu = memberRepository.save(짱구()); + final Member greenlawn = memberRepository.save(그린론()); + final Member dwoo = memberRepository.save(디우()); + final Member verus = memberRepository.save(베루스()); + memberRepository.save(병민()); // 스터디 생성 StudyService studyService = new StudyService(studyRepository, memberRepository, new DateTimeSystem()); final LocalDate startDate = LocalDate.now(); - CreatingStudyRequest javaStudyRequest = CreatingStudyRequest.builder() - .title("java 스터디").excerpt("자바 설명").thumbnail("java image").description("자바 소개") - .startDate(startDate) - .build(); + CreatingStudyRequest javaStudyRequest = 자바_스터디_신청서(startDate); javaStudy = studyService.createStudy(짱구_깃허브_아이디, javaStudyRequest); diff --git a/backend/src/test/java/com/woowacourse/moamoa/referenceroom/query/LinkDaoTest.java b/backend/src/test/java/com/woowacourse/moamoa/referenceroom/query/LinkDaoTest.java index 1e4e5eef0..655b683a3 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/referenceroom/query/LinkDaoTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/referenceroom/query/LinkDaoTest.java @@ -1,5 +1,6 @@ package com.woowacourse.moamoa.referenceroom.query; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_신청서; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; @@ -26,7 +27,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Slice; -import org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest public class LinkDaoTest { @@ -45,9 +45,6 @@ public class LinkDaoTest { @Autowired private LinkRepository linkRepository; - @Autowired - private JdbcTemplate jdbcTemplate; - @Autowired private EntityManager entityManager; @@ -70,10 +67,7 @@ void setUp() { StudyService createStudyService = new StudyService(studyRepository, memberRepository, new DateTimeSystem()); final LocalDate startDate = LocalDate.now(); - CreatingStudyRequest javaStudyRequest = CreatingStudyRequest.builder() - .title("java 스터디").excerpt("자바 설명").thumbnail("java image").description("자바 소개") - .startDate(startDate) - .build(); + CreatingStudyRequest javaStudyRequest = 자바_스터디_신청서(startDate); javaStudy = createStudyService.createStudy(JJANGGU.getGithubId(), javaStudyRequest); createStudyService.participateStudy(GREENLAWN.getGithubId(), javaStudy.getId()); diff --git a/backend/src/test/java/com/woowacourse/moamoa/review/controller/ReviewControllerTest.java b/backend/src/test/java/com/woowacourse/moamoa/review/controller/ReviewControllerTest.java index 9413b0054..ff15c2af3 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/review/controller/ReviewControllerTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/review/controller/ReviewControllerTest.java @@ -1,12 +1,16 @@ package com.woowacourse.moamoa.review.controller; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론_깃허브_아이디; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론_응답; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_응답; import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.woowacourse.moamoa.common.RepositoryTest; import com.woowacourse.moamoa.common.utils.DateTimeSystem; import com.woowacourse.moamoa.member.domain.Member; import com.woowacourse.moamoa.member.domain.repository.MemberRepository; -import com.woowacourse.moamoa.member.query.data.MemberData; import com.woowacourse.moamoa.review.domain.repository.ReviewRepository; import com.woowacourse.moamoa.review.service.ReviewService; import com.woowacourse.moamoa.review.service.exception.UnwrittenReviewException; @@ -24,14 +28,10 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest public class ReviewControllerTest { - private static final MemberData 짱구 = new MemberData(1L, "jjanggu", "https://image", "github.com"); - private static final MemberData 베루스 = new MemberData(4L, "verus", "https://image", "github.com"); - @Autowired private MemberRepository memberRepository; @@ -53,8 +53,8 @@ void setUp() { sut = new ReviewController(new ReviewService(reviewRepository, memberRepository, studyRepository)); // 사용자 추가 - final Member jjanggu = memberRepository.save(toMember(짱구)); - final Member verus = memberRepository.save(toMember(베루스)); + final Member jjanggu = memberRepository.save(짱구()); + final Member greelawn = memberRepository.save(그린론()); // 스터디 생성 StudyService studyService = new StudyService(studyRepository, memberRepository, new DateTimeSystem()); @@ -67,7 +67,7 @@ void setUp() { Study javaStudy = studyService.createStudy(1L, javaStudyRequest); - studyService.participateStudy(verus.getGithubId(), javaStudy.getId()); + studyService.participateStudy(greelawn.getGithubId(), javaStudy.getId()); // 리뷰 추가 ReviewService reviewService = new ReviewService(reviewRepository, memberRepository, studyRepository); @@ -75,35 +75,30 @@ void setUp() { 짱구_리뷰 = reviewService .writeReview(jjanggu.getGithubId(), javaStudy.getId(), new WriteReviewRequest("리뷰 내용1")); final Long javaReviewId4 = reviewService - .writeReview(verus.getGithubId(), javaStudy.getId(), new WriteReviewRequest("리뷰 내용4")); + .writeReview(greelawn.getGithubId(), javaStudy.getId(), new WriteReviewRequest("리뷰 내용4")); - final ReviewResponse 리뷰_내용1 = new ReviewResponse(짱구_리뷰, new WriterResponse(짱구), LocalDate.now(), + final ReviewResponse 리뷰_내용1 = new ReviewResponse(짱구_리뷰, new WriterResponse(짱구_응답), LocalDate.now(), LocalDate.now(), "리뷰 내용1"); - final ReviewResponse 리뷰_내용4 = new ReviewResponse(javaReviewId4, new WriterResponse(베루스), LocalDate.now(), + final ReviewResponse 리뷰_내용4 = new ReviewResponse(javaReviewId4, new WriterResponse(그린론_응답), LocalDate.now(), LocalDate.now(), "리뷰 내용4"); entityManager.flush(); entityManager.clear(); } - private static Member toMember(MemberData memberData) { - return new Member(memberData.getGithubId(), memberData.getUsername(), memberData.getImageUrl(), - memberData.getProfileUrl()); - } - @DisplayName("내가 작성하지 않은 리뷰를 수정할 수 없다.") @Test void notUpdate() { final EditingReviewRequest request = new EditingReviewRequest("수정한 리뷰 내용입니다."); - assertThatThrownBy(() -> sut.updateReview(베루스.getGithubId(), 짱구_리뷰, request)) + assertThatThrownBy(() -> sut.updateReview(그린론_깃허브_아이디, 짱구_리뷰, request)) .isInstanceOf(UnwrittenReviewException.class); } @DisplayName("내가 작성하지 않은 리뷰를 삭제할 수 없다.") @Test void notDelete() { - assertThatThrownBy(() -> sut.deleteReview(베루스.getGithubId(), 짱구_리뷰)) + assertThatThrownBy(() -> sut.deleteReview(그린론_깃허브_아이디, 짱구_리뷰)) .isInstanceOf(UnwrittenReviewException.class); } } diff --git a/backend/src/test/java/com/woowacourse/moamoa/review/controller/SearchingReviewControllerTest.java b/backend/src/test/java/com/woowacourse/moamoa/review/controller/SearchingReviewControllerTest.java index 916ac6c94..5b0c92ecc 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/review/controller/SearchingReviewControllerTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/review/controller/SearchingReviewControllerTest.java @@ -1,12 +1,21 @@ package com.woowacourse.moamoa.review.controller; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론_응답; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우_응답; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스_응답; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구_응답; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디_신청서; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_신청서; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.moamoa.common.RepositoryTest; import com.woowacourse.moamoa.common.utils.DateTimeSystem; import com.woowacourse.moamoa.member.domain.Member; import com.woowacourse.moamoa.member.domain.repository.MemberRepository; -import com.woowacourse.moamoa.member.query.data.MemberData; import com.woowacourse.moamoa.review.domain.repository.ReviewRepository; import com.woowacourse.moamoa.review.query.ReviewDao; import com.woowacourse.moamoa.review.service.ReviewService; @@ -33,11 +42,6 @@ @RepositoryTest class SearchingReviewControllerTest { - private static final MemberData JJANGGU = new MemberData(1L, "jjanggu", "https://image", "github.com"); - private static final MemberData GREENLAWN = new MemberData(2L, "greenlawn", "https://image", "github.com"); - private static final MemberData DWOO = new MemberData(3L, "dwoo", "https://image", "github.com"); - private static final MemberData VERUS = new MemberData(4L, "verus", "https://image", "github.com"); - @Autowired private MemberRepository memberRepository; @@ -64,23 +68,17 @@ void setUp() { sut = new SearchingReviewController(new SearchingReviewService(reviewDao)); // 사용자 추가 - final Member jjanggu = memberRepository.save(toMember(JJANGGU)); - final Member greenlawn = memberRepository.save(toMember(GREENLAWN)); - final Member dwoo = memberRepository.save(toMember(DWOO)); - final Member verus = memberRepository.save(toMember(VERUS)); + final Member jjanggu = memberRepository.save(짱구()); + final Member greenlawn = memberRepository.save(그린론()); + final Member dwoo = memberRepository.save(디우()); + final Member verus = memberRepository.save(베루스()); // 스터디 생성 StudyService studyService = new StudyService(studyRepository, memberRepository, new DateTimeSystem()); final LocalDate startDate = LocalDate.now(); - CreatingStudyRequest javaStudyRequest = CreatingStudyRequest.builder() - .title("java 스터디").excerpt("자바 설명").thumbnail("java image").description("자바 소개") - .startDate(startDate) - .build(); - CreatingStudyRequest reactStudyRequest = CreatingStudyRequest.builder() - .title("react 스터디").excerpt("리액트 설명").thumbnail("react image").description("리액트 소개") - .startDate(startDate) - .build(); + CreatingStudyRequest javaStudyRequest = 자바_스터디_신청서(startDate); + CreatingStudyRequest reactStudyRequest = 리액트_스터디_신청서(startDate); javaStudy = studyService.createStudy(1L, javaStudyRequest); final Study reactStudy = studyService.createStudy(1L, reactStudyRequest); @@ -102,24 +100,19 @@ void setUp() { .writeReview(verus.getGithubId(), javaStudy.getId(), new WriteReviewRequest("리뷰 내용4")); reviewService.writeReview(jjanggu.getGithubId(), reactStudy.getId(), new WriteReviewRequest("리뷰 내용5")); - final ReviewResponse 리뷰_내용1 = new ReviewResponse(javaReviewId1, new WriterResponse(JJANGGU), LocalDate.now(), + final ReviewResponse 리뷰_내용1 = new ReviewResponse(javaReviewId1, new WriterResponse(짱구_응답), LocalDate.now(), LocalDate.now(), "리뷰 내용1"); - final ReviewResponse 리뷰_내용2 = new ReviewResponse(javaReviewId2, new WriterResponse(GREENLAWN), LocalDate.now(), + final ReviewResponse 리뷰_내용2 = new ReviewResponse(javaReviewId2, new WriterResponse(그린론_응답), LocalDate.now(), LocalDate.now(), "리뷰 내용2"); - final ReviewResponse 리뷰_내용3 = new ReviewResponse(javaReviewId3, new WriterResponse(DWOO), LocalDate.now(), + final ReviewResponse 리뷰_내용3 = new ReviewResponse(javaReviewId3, new WriterResponse(디우_응답), LocalDate.now(), LocalDate.now(), "리뷰 내용3"); - final ReviewResponse 리뷰_내용4 = new ReviewResponse(javaReviewId4, new WriterResponse(VERUS), LocalDate.now(), + final ReviewResponse 리뷰_내용4 = new ReviewResponse(javaReviewId4, new WriterResponse(베루스_응답), LocalDate.now(), LocalDate.now(), "리뷰 내용4"); javaReviews = List.of(리뷰_내용4, 리뷰_내용3, 리뷰_내용2, 리뷰_내용1); entityManager.flush(); } - private static Member toMember(MemberData memberData) { - return new Member(memberData.getGithubId(), memberData.getUsername(), memberData.getImageUrl(), - memberData.getProfileUrl()); - } - @DisplayName("스터디의 전체 후기를 조회할 수 있다.") @Test public void getAllReviews() { diff --git a/backend/src/test/java/com/woowacourse/moamoa/review/query/ReviewDaoTest.java b/backend/src/test/java/com/woowacourse/moamoa/review/query/ReviewDaoTest.java index c3bf342b2..72f3dea96 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/review/query/ReviewDaoTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/review/query/ReviewDaoTest.java @@ -1,15 +1,38 @@ package com.woowacourse.moamoa.review.query; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.리액트_리뷰1; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.리액트_리뷰1_내용; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.리액트_리뷰2; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.리액트_리뷰2_내용; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.리액트_리뷰3; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.리액트_리뷰3_내용; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.자바_리뷰1; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.자바_리뷰1_내용; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.자바_리뷰2; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.자바_리뷰2_내용; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.자바_리뷰3; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.자바_리뷰3_내용; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.자바_리뷰4; +import static com.woowacourse.moamoa.fixtures.ReviewFixtures.자바_리뷰4_내용; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디_신청서; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_신청서; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.tuple; import com.woowacourse.moamoa.common.RepositoryTest; +import com.woowacourse.moamoa.common.utils.DateTimeSystem; import com.woowacourse.moamoa.member.domain.Member; import com.woowacourse.moamoa.member.domain.repository.MemberRepository; import com.woowacourse.moamoa.member.query.data.MemberData; +import com.woowacourse.moamoa.review.domain.Review; +import com.woowacourse.moamoa.review.domain.repository.ReviewRepository; import com.woowacourse.moamoa.review.query.data.ReviewData; import com.woowacourse.moamoa.study.domain.Study; import com.woowacourse.moamoa.study.domain.repository.StudyRepository; -import com.woowacourse.moamoa.common.utils.DateTimeSystem; import com.woowacourse.moamoa.study.service.StudyService; import com.woowacourse.moamoa.study.service.request.CreatingStudyRequest; import java.time.LocalDate; @@ -19,16 +42,10 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest class ReviewDaoTest { - private static final MemberData JJANGGU = new MemberData(1L, "jjanggu", "https://image", "github.com"); - private static final MemberData GREENLAWN = new MemberData(2L, "greenlawn", "https://image", "github.com"); - private static final MemberData DWOO = new MemberData(3L, "dwoo", "https://image", "github.com"); - private static final MemberData VERUS = new MemberData(4L, "verus", "https://image", "github.com"); - @Autowired private MemberRepository memberRepository; @@ -36,7 +53,7 @@ class ReviewDaoTest { private StudyRepository studyRepository; @Autowired - private JdbcTemplate jdbcTemplate; + private ReviewRepository reviewRepository; @Autowired private EntityManager entityManager; @@ -52,89 +69,75 @@ class ReviewDaoTest { private List reactReviews; + private Member 짱구; + private Member 그린론; + private Member 디우; + private Member 베루스; + @BeforeEach void setUp() { // 사용자 추가 - final Member jjanggu = memberRepository.save(toMember(JJANGGU)); - final Member greenlawn = memberRepository.save(toMember(GREENLAWN)); - final Member dwoo = memberRepository.save(toMember(DWOO)); - final Member verus = memberRepository.save(toMember(VERUS)); + 짱구 = memberRepository.save(짱구()); + 그린론 = memberRepository.save(그린론()); + 디우 = memberRepository.save(디우()); + 베루스 = memberRepository.save(베루스()); // 스터디 생성 StudyService createStudyService = new StudyService(studyRepository, memberRepository, new DateTimeSystem()); final LocalDate startDate = LocalDate.now(); - CreatingStudyRequest javaStudyRequest = CreatingStudyRequest.builder() - .title("java 스터디").excerpt("자바 설명").thumbnail("java image").description("자바 소개") - .startDate(startDate) - .build(); - CreatingStudyRequest reactStudyRequest = CreatingStudyRequest.builder() - .title("react 스터디").excerpt("리액트 설명").thumbnail("react image").description("리액트 소개") - .startDate(startDate) - .build(); + CreatingStudyRequest javaStudyRequest = 자바_스터디_신청서(startDate); + CreatingStudyRequest reactStudyRequest = 리액트_스터디_신청서(startDate); javaStudy = createStudyService.createStudy(1L, javaStudyRequest); reactStudy = createStudyService.createStudy(1L, reactStudyRequest); - final LocalDate createdDate = startDate.plusDays(1); - final LocalDate lastModifiedDate = startDate.plusDays(2); + // 리뷰 추가 + final Review firstJavaReview = reviewRepository.save(자바_리뷰1(javaStudy.getId(), 짱구.getId())); + final Review secondJavaReview = reviewRepository.save(자바_리뷰2(javaStudy.getId(), 그린론.getId())); + final Review thirdJavaReview = reviewRepository.save(자바_리뷰3(javaStudy.getId(), 디우.getId())); + final Review forthJavaReview = reviewRepository.save(자바_리뷰4(javaStudy.getId(), 베루스.getId())); + + final Review firstReactReview = reviewRepository.save(리액트_리뷰1(reactStudy.getId(), 짱구.getId())); + final Review secondReactReview = reviewRepository.save(리액트_리뷰2(reactStudy.getId(), 그린론.getId())); + final Review thirdReactReview = reviewRepository.save(리액트_리뷰3(reactStudy.getId(), 디우.getId())); entityManager.flush(); - entityManager.clear(); - // 리뷰 추가 - jdbcTemplate.update("INSERT INTO review(id, study_id, member_id, content, created_date, last_modified_date, deleted) " - + "VALUES (1, " + javaStudy.getId() + ", " + jjanggu.getId() + ", '리뷰 내용1', '" - + createdDate.toString() + "T11:23:30.123456', '" + lastModifiedDate.toString()+ "T11:45:20.456123', false)"); - jdbcTemplate.update("INSERT INTO review(id, study_id, member_id, content, created_date, last_modified_date, deleted) " - + "VALUES (2, " + javaStudy.getId() + ", " + greenlawn.getId() + ", '리뷰 내용2', '" - + createdDate.toString() + "T11:23:30.123456', '" + lastModifiedDate.toString()+ "T11:45:20.456123', false)"); - jdbcTemplate.update("INSERT INTO review(id, study_id, member_id, content, created_date, last_modified_date, deleted) " - + "VALUES (3, " + javaStudy.getId() + ", " + dwoo.getId()+ ", '리뷰 내용3', '" - + createdDate.toString() + "T11:23:30.123456', '" + lastModifiedDate.toString()+ "T11:45:20.456123', false)"); - jdbcTemplate.update("INSERT INTO review(id, study_id, member_id, content, created_date, last_modified_date, deleted) " - + "VALUES (4, " + javaStudy.getId() + ", " + verus.getId() + ", '리뷰 내용4', '" - + createdDate.toString() + "T11:23:30.123456', '" + lastModifiedDate.toString()+ "T11:45:20.456123', false)"); - jdbcTemplate.update("INSERT INTO review(id, study_id, member_id, content, created_date, last_modified_date, deleted) " - + "VALUES (5, " + reactStudy.getId() + ", " + jjanggu.getId() + ", '리뷰 내용5', '" - + createdDate.toString() + "T11:23:30.123456', '" + lastModifiedDate.toString()+ "T11:45:20.456123', false)"); - jdbcTemplate.update("INSERT INTO review(id, study_id, member_id, content, created_date, last_modified_date, deleted) " - + "VALUES (6, " + reactStudy.getId() + ", " + greenlawn.getId()+ ", '리뷰 내용6', '" - + createdDate.toString() + "T11:23:30.123456', '" + lastModifiedDate.toString()+ "T11:45:20.456123', false)"); - jdbcTemplate.update("INSERT INTO review(id, study_id, member_id, content, created_date, last_modified_date, deleted) " - + "VALUES (7, " + reactStudy.getId() + ", " + dwoo.getId()+ ", '리뷰 내용7', '" - + createdDate.toString() + "T11:23:30.123456', '" + lastModifiedDate.toString()+ "T11:45:20.456123', false)"); - - final ReviewData 리뷰_내용1 = new ReviewData(1L, JJANGGU, createdDate, lastModifiedDate, "리뷰 내용1"); - final ReviewData 리뷰_내용2 = new ReviewData(2L, GREENLAWN, createdDate, lastModifiedDate, "리뷰 내용2"); - final ReviewData 리뷰_내용3 = new ReviewData(3L, DWOO, createdDate, lastModifiedDate, "리뷰 내용3"); - final ReviewData 리뷰_내용4 = new ReviewData(4L, VERUS, createdDate, lastModifiedDate, "리뷰 내용4"); javaReviews = List.of( - 리뷰_내용4, - 리뷰_내용3, - 리뷰_내용2, - 리뷰_내용1 + new ReviewData(forthJavaReview.getId(), new MemberData(짱구.getGithubId(), 짱구.getUsername(), 짱구.getImageUrl(), 짱구.getProfileUrl()), + firstJavaReview.getCreatedDate().toLocalDate(), firstJavaReview.getLastModifiedDate().toLocalDate(), 자바_리뷰1_내용), + new ReviewData(thirdJavaReview.getId(), new MemberData(그린론.getGithubId(), 그린론.getUsername(), 그린론.getImageUrl(), 그린론.getProfileUrl()), + secondJavaReview.getCreatedDate().toLocalDate(), secondJavaReview.getLastModifiedDate().toLocalDate(), 자바_리뷰2_내용), + new ReviewData(secondJavaReview.getId(), new MemberData(디우.getGithubId(), 디우.getUsername(), 디우.getImageUrl(), 디우.getProfileUrl()), + thirdJavaReview.getCreatedDate().toLocalDate(), thirdJavaReview.getLastModifiedDate().toLocalDate(), 자바_리뷰3_내용), + new ReviewData(firstJavaReview.getId(), new MemberData(베루스.getGithubId(), 베루스.getUsername(), 베루스.getImageUrl(), 베루스.getProfileUrl()), + forthJavaReview.getCreatedDate().toLocalDate(), forthJavaReview.getLastModifiedDate().toLocalDate(), 자바_리뷰4_내용) ); - reactReviews = List.of( - new ReviewData(5L, JJANGGU, createdDate, lastModifiedDate, "리뷰 내용5"), - new ReviewData(6L, GREENLAWN, createdDate, lastModifiedDate, "리뷰 내용6"), - new ReviewData(7L, DWOO, createdDate, lastModifiedDate, "리뷰 내용7") + new ReviewData(firstReactReview.getId(), new MemberData(짱구.getGithubId(), 짱구.getUsername(), 짱구.getImageUrl(), 짱구.getProfileUrl()), + firstReactReview.getCreatedDate().toLocalDate(), firstReactReview.getLastModifiedDate().toLocalDate(), 리액트_리뷰1_내용), + new ReviewData(secondReactReview.getId(), new MemberData(그린론.getGithubId(), 그린론.getUsername(), 그린론.getImageUrl(), 그린론.getProfileUrl()), + secondReactReview.getCreatedDate().toLocalDate(), secondReactReview.getLastModifiedDate().toLocalDate(), 리액트_리뷰2_내용), + new ReviewData(thirdReactReview.getId(), new MemberData(디우.getGithubId(), 디우.getUsername(), 디우.getImageUrl(), 디우.getProfileUrl()), + thirdReactReview.getCreatedDate().toLocalDate(), thirdReactReview.getLastModifiedDate().toLocalDate(), 리액트_리뷰3_내용) ); } - private static Member toMember(MemberData memberData) { - return new Member(memberData.getGithubId(), memberData.getUsername(), memberData.getImageUrl(), - memberData.getProfileUrl()); - } - @DisplayName("스터디 Id로 작성된 후기를 조회한다.") @Test void findAllReviewsByStudyId() { List reviews = sut.findAllByStudyId(javaStudy.getId()); assertThat(reviews).isNotEmpty(); - assertThat(reviews).hasSize(4); - assertThat(reviews).containsExactlyInAnyOrderElementsOf(javaReviews); + assertThat(reviews).hasSize(4) + .filteredOn(review -> review.getId() != null) + .extracting("member.githubId", "content") + .containsExactlyInAnyOrder( + tuple(javaReviews.get(0).getMember().getGithubId(), javaReviews.get(0).getContent()), + tuple(javaReviews.get(1).getMember().getGithubId(), javaReviews.get(1).getContent()), + tuple(javaReviews.get(2).getMember().getGithubId(), javaReviews.get(2).getContent()), + tuple(javaReviews.get(3).getMember().getGithubId(), javaReviews.get(3).getContent()) + ); } } diff --git a/backend/src/test/java/com/woowacourse/moamoa/study/controller/MyStudyControllerTest.java b/backend/src/test/java/com/woowacourse/moamoa/study/controller/MyStudyControllerTest.java index 6d93be425..6e39e9fc2 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/study/controller/MyStudyControllerTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/study/controller/MyStudyControllerTest.java @@ -1,30 +1,75 @@ package com.woowacourse.moamoa.study.controller; -import static com.woowacourse.moamoa.study.domain.StudyStatus.*; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론_깃허브_아이디; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.HTTP_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디_계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디_내용; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디_모집계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디_참가자들; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디장; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디_계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디_내용; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디_모집계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디_참가자들; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디장; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디_계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디_내용; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디_모집계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디_참가자들; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디장; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_내용; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_모집계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_참가자들; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디장; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디_계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디_내용; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디_모집계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디_참가자들; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디장; +import static com.woowacourse.moamoa.fixtures.TagFixtures.BE_태그_아이디; +import static com.woowacourse.moamoa.fixtures.TagFixtures.BE_태그명; +import static com.woowacourse.moamoa.fixtures.TagFixtures.FE_태그_아이디; +import static com.woowacourse.moamoa.fixtures.TagFixtures.FE_태그명; +import static com.woowacourse.moamoa.fixtures.TagFixtures.리액트_태그_아이디; +import static com.woowacourse.moamoa.fixtures.TagFixtures.리액트_태그명; +import static com.woowacourse.moamoa.fixtures.TagFixtures.우테코4기_태그_아이디; +import static com.woowacourse.moamoa.fixtures.TagFixtures.우테코4기_태그명; +import static com.woowacourse.moamoa.fixtures.TagFixtures.자바_태그_아이디; +import static com.woowacourse.moamoa.fixtures.TagFixtures.자바_태그명; +import static java.util.stream.Collectors.toList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import com.woowacourse.moamoa.common.RepositoryTest; +import com.woowacourse.moamoa.member.domain.Member; import com.woowacourse.moamoa.member.domain.repository.MemberRepository; import com.woowacourse.moamoa.member.query.data.MemberData; +import com.woowacourse.moamoa.study.domain.Study; import com.woowacourse.moamoa.study.domain.repository.StudyRepository; import com.woowacourse.moamoa.study.query.MyStudyDao; -import com.woowacourse.moamoa.study.service.response.MyStudyResponse; import com.woowacourse.moamoa.study.service.MyStudyService; import com.woowacourse.moamoa.study.service.response.MyStudiesResponse; +import com.woowacourse.moamoa.study.service.response.MyStudyResponse; import com.woowacourse.moamoa.tag.query.response.TagSummaryData; - -import java.time.LocalDateTime; -import java.util.stream.Collectors; import java.util.List; - +import java.util.Set; +import javax.persistence.EntityManager; 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 org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest class MyStudyControllerTest { @@ -39,130 +84,116 @@ class MyStudyControllerTest { private StudyRepository studyRepository; @Autowired - private JdbcTemplate jdbcTemplate; + private EntityManager entityManager; private MyStudyController myStudyController; + private Member 짱구; + private Member 그린론; + private Member 디우; + private Member 베루스; + + private Study 자바_스터디; + private Study 리액트_스터디; + private Study 자바스크립트_스터디; + private Study HTTP_스터디; + private Study 알고리즘_스터디; + private Study 리눅스_스터디; + @BeforeEach void setUp() { myStudyController = new MyStudyController(new MyStudyService(myStudyDao, memberRepository, studyRepository)); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (1, 1, 'jjanggu', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (2, 2, 'greenlawn', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (3, 3, 'dwoo', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (4, 4, 'verus', 'https://image', 'github.com')"); - - final LocalDateTime now = LocalDateTime.now(); - - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, start_date, owner_id) " - + "VALUES (1, 'Java 스터디', '자바 설명', 'java thumbnail', 'RECRUITMENT_START', 'PREPARE', '그린론의 우당탕탕 자바 스터디입니다.', 3, 10, '" - + now + "', '2021-12-08', 2)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, enrollment_end_date, start_date, end_date, owner_id) " - + "VALUES (2, 'React 스터디', '리액트 설명', 'react thumbnail', 'RECRUITMENT_START', 'PREPARE', '디우의 뤼액트 스터디입니다.', 4, 5, '" - + now + "', '2021-11-09', '2021-11-10', '2021-12-08', 3)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, start_date, owner_id) " - + "VALUES (3, 'javaScript 스터디', '자바스크립트 설명', 'javascript thumbnail', 'RECRUITMENT_START', 'PREPARE', '그린론의 자바스크립트 접해보기', 3, 20, '" - + now + "', '2022-08-03', 2)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, max_member_count, created_at, start_date, owner_id) " - + "VALUES (4, 'HTTP 스터디', 'HTTP 설명', 'http thumbnail', 'RECRUITMENT_END', 'PREPARE', '디우의 HTTP 정복하기', 5, '" - + now + "', '2022-08-03', 3)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, created_at, owner_id, start_date) " - + "VALUES (5, '알고리즘 스터디', '알고리즘 설명', 'algorithm thumbnail', 'RECRUITMENT_END', 'PREPARE', '알고리즘을 TDD로 풀자의 베루스입니다.', 1, '" - + now + "', 4, '2021-12-06')"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, created_at, owner_id, start_date, enrollment_end_date, end_date) " - + "VALUES (6, 'Linux 스터디', '리눅스 설명', 'linux thumbnail', 'RECRUITMENT_END', 'PREPARE', 'Linux를 공부하자의 베루스입니다.', 1, '" - + now + "', 4, '2021-12-06', '2021-12-07', '2022-01-07')"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 1)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 3)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 4)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 5)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (3, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (3, 4)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (4, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (4, 3)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (1, 3)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (1, 4)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (2, 1)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (2, 2)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (2, 4)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (3, 3)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (3, 4)"); + 짱구 = memberRepository.save(짱구()); + 그린론 = memberRepository.save(그린론()); + 디우 = memberRepository.save(디우()); + 베루스 = memberRepository.save(베루스()); + + 자바_스터디 = studyRepository.save(자바_스터디(짱구.getId(), Set.of(그린론.getId(), 디우.getId()))); + 리액트_스터디 = studyRepository.save(리액트_스터디(디우.getId(), Set.of(짱구.getId(), 그린론.getId(), 베루스.getId()))); + 자바스크립트_스터디 = studyRepository.save(자바스크립트_스터디(그린론.getId(), Set.of(디우.getId(), 베루스.getId()))); + HTTP_스터디 = studyRepository.save(HTTP_스터디(디우.getId(), Set.of(베루스.getId(), 짱구.getId()))); + 알고리즘_스터디 = studyRepository.save(알고리즘_스터디(베루스.getId(), Set.of(그린론.getId(), 디우.getId()))); + 리눅스_스터디 = studyRepository.save(리눅스_스터디(베루스.getId(), Set.of(그린론.getId(), 디우.getId()))); + + entityManager.flush(); } @DisplayName("내가 참여한 스터디를 조회한다.") @Test void getMyStudies() { - final ResponseEntity myStudies = myStudyController.getMyStudies(4L); + final ResponseEntity myStudies = myStudyController.getMyStudies(그린론_깃허브_아이디); assertThat(myStudies.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(myStudies.getBody()).isNotNull(); assertThat(myStudies.getBody().getStudies()) .hasSize(5) - .extracting("id", "title", "studyStatus", "currentMemberCount", "maxMemberCount") + .filteredOn(myStudy -> myStudy.getId() != null) + .extracting("title", "studyStatus", "currentMemberCount", "maxMemberCount") .containsExactlyElementsOf(List.of( - tuple(1L, "Java 스터디", PREPARE, 3, 10), - tuple(2L, "React 스터디", PREPARE, 4, 5), - tuple(3L, "javaScript 스터디", PREPARE, 3, 20), - tuple(5L, "알고리즘 스터디", PREPARE, 1, null), - tuple(6L, "Linux 스터디", PREPARE, 1, null)) - ); + tuple(자바_스터디_내용.getTitle(), 자바_스터디_계획.getStudyStatus(), 자바_스터디_참가자들.getSize(), + 자바_스터디_모집계획.getMax()), + tuple(리액트_스터디_내용.getTitle(), 리액트_스터디_계획.getStudyStatus(), 리액트_스터디_참가자들.getSize(), + 리액트_스터디_모집계획.getMax()), + tuple(자바스크립트_스터디_내용.getTitle(), 자바스크립트_스터디_계획.getStudyStatus(), 자바스크립트_스터디_참가자들.getSize(), + 자바스크립트_스터디_모집계획.getMax()), + tuple(알고리즘_스터디_내용.getTitle(), 알고리즘_스터디_계획.getStudyStatus(), 알고리즘_스터디_참가자들.getSize(), + 알고리즘_스터디_모집계획.getMax()), + tuple(리눅스_스터디_내용.getTitle(), 리눅스_스터디_계획.getStudyStatus(), 리눅스_스터디_참가자들.getSize(), + 리눅스_스터디_모집계획.getMax()) + )); final List owners = myStudies.getBody() .getStudies() .stream() .map(MyStudyResponse::getOwner) - .collect(Collectors.toList()); + .collect(toList()); assertThat(owners) .hasSize(5) .extracting("githubId", "username", "imageUrl", "profileUrl") - .containsExactlyElementsOf(List.of( - tuple(2L, "greenlawn", "https://image", "github.com"), - tuple(3L, "dwoo", "https://image", "github.com"), - tuple(2L, "greenlawn", "https://image", "github.com"), - tuple(4L, "verus", "https://image", "github.com"), - tuple(4L, "verus", "https://image", "github.com") - )); + .containsExactlyInAnyOrder( + tuple(자바_스터디장.getGithubId(), 자바_스터디장.getUsername(), 자바_스터디장.getImageUrl(), 자바_스터디장.getProfileUrl()), + tuple(리액트_스터디장.getGithubId(), 리액트_스터디장.getUsername(), 리액트_스터디장.getImageUrl(), 리액트_스터디장.getProfileUrl()), + tuple(자바스크립트_스터디장.getGithubId(), 자바스크립트_스터디장.getUsername(), 자바스크립트_스터디장.getImageUrl(), 자바스크립트_스터디장.getProfileUrl()), + tuple(알고리즘_스터디장.getGithubId(), 알고리즘_스터디장.getUsername(), 알고리즘_스터디장.getImageUrl(), 알고리즘_스터디장.getProfileUrl()), + tuple(리눅스_스터디장.getGithubId(), 리눅스_스터디장.getUsername(), 리눅스_스터디장.getImageUrl(), 리눅스_스터디장.getProfileUrl()) + ); final List> tags = myStudies.getBody() .getStudies() .stream() .map(MyStudyResponse::getTags) - .collect(Collectors.toList()); + .collect(toList()); assertThat(tags.get(0)) .hasSize(3) .extracting("id", "name") .containsExactlyElementsOf(List.of( - tuple(1L, "Java"), - tuple(2L, "4기"), - tuple(3L, "BE")) + tuple(자바_태그_아이디, 자바_태그명), + tuple(우테코4기_태그_아이디, 우테코4기_태그명), + tuple(BE_태그_아이디, BE_태그명)) ); assertThat(tags.get(1)) .hasSize(3) .extracting("id", "name") - .contains(tuple(5L, "React"), - tuple(2L, "4기"), - tuple(4L, "FE")); + .contains( + tuple(리액트_태그_아이디, 리액트_태그명), + tuple(우테코4기_태그_아이디, 우테코4기_태그명), + tuple(FE_태그_아이디, FE_태그명) + ); assertThat(tags.get(2)) .hasSize(2) .extracting("id", "name") - .contains(tuple(2L, "4기"), - tuple(4L, "FE")); + .contains( + tuple(우테코4기_태그_아이디, 우테코4기_태그명), + tuple(FE_태그_아이디, FE_태그명) + ); - assertThat(tags.get(3).size()).isZero(); + assertThat(tags.get(3).size()).isZero(); assertThat(tags.get(4).size()).isZero(); } } diff --git a/backend/src/test/java/com/woowacourse/moamoa/study/controller/SearchingStudyControllerTest.java b/backend/src/test/java/com/woowacourse/moamoa/study/controller/SearchingStudyControllerTest.java index 8d53effb9..de29f5ba4 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/study/controller/SearchingStudyControllerTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/study/controller/SearchingStudyControllerTest.java @@ -1,5 +1,10 @@ package com.woowacourse.moamoa.study.controller; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.HTTP_스터디_신청서; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디_신청서; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디_신청서; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_신청서; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디_신청서; import static java.util.Collections.emptyList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; @@ -32,7 +37,6 @@ import org.springframework.data.domain.PageRequest; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest public class SearchingStudyControllerTest { @@ -80,35 +84,19 @@ void initDataBase() { StudyService studyService = new StudyService(studyRepository, memberRepository, new DateTimeSystem()); - CreatingStudyRequest javaStudyRequest = CreatingStudyRequest.builder() - .title("Java 스터디").excerpt("자바 설명").thumbnail("java thumbnail").description("그린론의 우당탕탕 자바 스터디입니다.") - .startDate(LocalDate.now()).tagIds(List.of(1L, 2L, 3L)).maxMemberCount(10) - .build(); + CreatingStudyRequest javaStudyRequest = 자바_스터디_신청서(List.of(1L, 2L, 3L), 10, LocalDate.now()); javaStudyId = studyService.createStudy(jjanggu.getGithubId(), javaStudyRequest).getId(); - CreatingStudyRequest reactStudyRequest = CreatingStudyRequest.builder() - .title("React 스터디").excerpt("리액트 설명").thumbnail("react thumbnail").description("디우의 뤼액트 스터디입니다.") - .startDate(LocalDate.now()).endDate(LocalDate.now()).enrollmentEndDate(LocalDate.now()) - .tagIds(List.of(2L, 4L, 5L)).maxMemberCount(5) - .build(); + CreatingStudyRequest reactStudyRequest = 리액트_스터디_신청서(List.of(2L, 4L, 5L), 5, LocalDate.now()); reactStudyId = studyService.createStudy(dwoo.getGithubId(), reactStudyRequest).getId(); - CreatingStudyRequest javaScriptStudyRequest = CreatingStudyRequest.builder() - .title("javaScript 스터디").excerpt("자바스크립트 설명").thumbnail("javascript thumbnail").description("자바스크립트 설명") - .startDate(LocalDate.now()).tagIds(List.of(2L, 4L)) - .build(); + CreatingStudyRequest javaScriptStudyRequest = 자바스크립트_스터디_신청서(List.of(2L, 4L), LocalDate.now()); javaScriptId = studyService.createStudy(jjanggu.getGithubId(), javaScriptStudyRequest).getId(); - CreatingStudyRequest httpStudyRequest = CreatingStudyRequest.builder() - .title("HTTP 스터디").excerpt("HTTP 설명").thumbnail("http thumbnail").description("HTTP 설명") - .startDate(LocalDate.now()).tagIds(List.of(2L, 3L)) - .build(); + CreatingStudyRequest httpStudyRequest = HTTP_스터디_신청서(List.of(2L, 3L), LocalDate.now()); httpStudyId = studyService.createStudy(jjanggu.getGithubId(), httpStudyRequest).getId(); - CreatingStudyRequest algorithmStudyRequest = CreatingStudyRequest.builder() - .title("알고리즘 스터디").excerpt("알고리즘 설명").thumbnail("algorithm thumbnail").description("알고리즘 설명") - .startDate(LocalDate.now()).tagIds(List.of()) - .build(); + CreatingStudyRequest algorithmStudyRequest = 알고리즘_스터디_신청서(List.of(), LocalDate.now()); algorithmStudyId = studyService.createStudy(jjanggu.getGithubId(), algorithmStudyRequest).getId(); CreatingStudyRequest linuxStudyRequest = CreatingStudyRequest.builder() diff --git a/backend/src/test/java/com/woowacourse/moamoa/study/controller/StudyControllerTest.java b/backend/src/test/java/com/woowacourse/moamoa/study/controller/StudyControllerTest.java index 502528013..053af15c9 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/study/controller/StudyControllerTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/study/controller/StudyControllerTest.java @@ -1,5 +1,6 @@ package com.woowacourse.moamoa.study.controller; +import static com.woowacourse.moamoa.study.domain.RecruitStatus.RECRUITMENT_END; import static com.woowacourse.moamoa.study.domain.StudyStatus.PREPARE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -188,6 +189,35 @@ public void participateStudy() { assertThat(response.getStatusCode()).isEqualTo(OK); } + @DisplayName("최대인원이 한 명인 경우 바로 모집 종료가 되어야 한다.") + @Test + public void createdStudyWithMaxSizeOne() { + // given + StudyController studyController = new StudyController(new StudyService(studyRepository, memberRepository, + new DateTimeSystem())); + final CreatingStudyRequest creatingStudyRequest = CreatingStudyRequest.builder() + .title("Java") + .excerpt("java excerpt") + .thumbnail("java image") + .description("자바 스터디 상세설명 입니다.") + .startDate(LocalDate.now().plusDays(1)) + .endDate(LocalDate.now().plusDays(4)) + .enrollmentEndDate(LocalDate.now().plusDays(2)) + .maxMemberCount(1) + .tagIds(List.of(1L, 2L)) + .build(); + + final ResponseEntity createdResponse = studyController.createStudy(1L, creatingStudyRequest); + + // when + final String location = createdResponse.getHeaders().getLocation().getPath(); + final long studyId = getStudyIdBy(location); + final Study study = studyRepository.findById(studyId).orElseThrow(); + + // then + assertThat(study.getRecruitPlanner().getRecruitStatus()).isEqualTo(RECRUITMENT_END); + } + private long getStudyIdBy(final String location) { final String[] splitLocation = location.split("/"); return Long.parseLong(splitLocation[3]); diff --git a/backend/src/test/java/com/woowacourse/moamoa/study/query/MyStudyDaoTest.java b/backend/src/test/java/com/woowacourse/moamoa/study/query/MyStudyDaoTest.java index e027cbe9c..8887bae55 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/study/query/MyStudyDaoTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/study/query/MyStudyDaoTest.java @@ -1,25 +1,54 @@ package com.woowacourse.moamoa.study.query; -import static com.woowacourse.moamoa.study.domain.StudyStatus.PREPARE; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.HTTP_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디_계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디_내용; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디_모집계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디_참가자들; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디_계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디_내용; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디_모집계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디_참가자들; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디_계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디_내용; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디_모집계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디_참가자들; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_내용; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_모집계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디_참가자들; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디_계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디_내용; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디_모집계획; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디_참가자들; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; +import com.woowacourse.moamoa.common.RepositoryTest; +import com.woowacourse.moamoa.member.domain.Member; +import com.woowacourse.moamoa.member.domain.repository.MemberRepository; import com.woowacourse.moamoa.member.query.data.MemberData; +import com.woowacourse.moamoa.study.domain.Study; +import com.woowacourse.moamoa.study.domain.repository.StudyRepository; +import com.woowacourse.moamoa.study.query.data.MyStudySummaryData; import com.woowacourse.moamoa.tag.query.response.TagSummaryData; import java.util.List; - -import com.woowacourse.moamoa.common.RepositoryTest; -import com.woowacourse.moamoa.study.query.data.MyStudySummaryData; - -import java.time.LocalDateTime; - import java.util.Map; +import java.util.Set; +import javax.persistence.EntityManager; 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 org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest class MyStudyDaoTest { @@ -28,72 +57,67 @@ class MyStudyDaoTest { private MyStudyDao myStudyDao; @Autowired - private JdbcTemplate jdbcTemplate; + private MemberRepository memberRepository; + + @Autowired + private StudyRepository studyRepository; + + @Autowired + private EntityManager entityManager; + + private Member 짱구; + private Member 그린론; + private Member 디우; + private Member 베루스; + + private Study 자바_스터디; + private Study 리액트_스터디; + private Study 자바스크립트_스터디; + private Study HTTP_스터디; + private Study 알고리즘_스터디; + private Study 리눅스_스터디; @BeforeEach void initDataBase() { - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (1, 1, 'jjanggu', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (2, 2, 'greenlawn', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (3, 3, 'dwoo', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (4, 4, 'verus', 'https://image', 'github.com')"); - - final LocalDateTime now = LocalDateTime.now(); - - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, start_date, owner_id) " - + "VALUES (1, 'Java 스터디', '자바 설명', 'java thumbnail', 'RECRUITMENT_START', 'PREPARE', '그린론의 우당탕탕 자바 스터디입니다.', 3, 10, '" + now + "', '2021-12-08', 2)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, enrollment_end_date, start_date, end_date, owner_id) " - + "VALUES (2, 'React 스터디', '리액트 설명', 'react thumbnail', 'RECRUITMENT_START', 'PREPARE', '디우의 뤼액트 스터디입니다.', 4, 5, '" + now + "', '2021-11-09', '2021-11-10', '2021-12-08', 3)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, start_date, owner_id) " - + "VALUES (3, 'javaScript 스터디', '자바스크립트 설명', 'javascript thumbnail', 'RECRUITMENT_START', 'PREPARE', '그린론의 자바스크립트 접해보기', 3, 20, '" + now + "', '2022-08-03', 2)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, max_member_count, created_at, start_date, owner_id) " - + "VALUES (4, 'HTTP 스터디', 'HTTP 설명', 'http thumbnail', 'RECRUITMENT_END', 'PREPARE', '디우의 HTTP 정복하기', 5, '" + now + "', '2022-08-03', 3)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, created_at, owner_id, start_date) " - + "VALUES (5, '알고리즘 스터디', '알고리즘 설명', 'algorithm thumbnail', 'RECRUITMENT_END', 'PREPARE', '알고리즘을 TDD로 풀자의 베루스입니다.', 1, '" + now + "', 4, '2021-12-06')"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, created_at, owner_id, start_date, enrollment_end_date, end_date) " - + "VALUES (6, 'Linux 스터디', '리눅스 설명', 'linux thumbnail', 'RECRUITMENT_END', 'PREPARE', 'Linux를 공부하자의 베루스입니다.', 1, '" + now + "', 4, '2021-12-06', '2021-12-07', '2022-01-07')"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, created_at, owner_id, start_date, enrollment_end_date, end_date) " - + "VALUES (7, 'OS 스터디', 'OS 설명', 'os thumbnail', 'RECRUITMENT_END', 'PREPARE', 'OS를 공부하자의 그린론입니다.', 1, '" + now + "', 2, '2021-12-06', '2021-12-07', '2022-01-07')"); - - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 1)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 3)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 4)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 5)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (3, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (3, 4)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (4, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (4, 3)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (1, 3)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (1, 4)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (2, 1)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (2, 2)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (2, 4)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (3, 3)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (3, 4)"); + 짱구 = memberRepository.save(짱구()); + 그린론 = memberRepository.save(그린론()); + 디우 = memberRepository.save(디우()); + 베루스 = memberRepository.save(베루스()); + + 자바_스터디 = studyRepository.save(자바_스터디(짱구.getId(), Set.of(그린론.getId(), 디우.getId()))); + 리액트_스터디 = studyRepository.save(리액트_스터디(디우.getId(), Set.of(짱구.getId(), 그린론.getId(), 베루스.getId()))); + 자바스크립트_스터디 = studyRepository.save(자바스크립트_스터디(그린론.getId(), Set.of(디우.getId(), 베루스.getId()))); + HTTP_스터디 = studyRepository.save(HTTP_스터디(디우.getId(), Set.of(베루스.getId(), 짱구.getId()))); + 알고리즘_스터디 = studyRepository.save(알고리즘_스터디(베루스.getId(), Set.of(그린론.getId(), 디우.getId()))); + 리눅스_스터디 = studyRepository.save(리눅스_스터디(베루스.getId(), Set.of(그린론.getId(), 디우.getId()))); + + entityManager.flush(); } @DisplayName("내가 참여한 스터디 목록을 조회한다.") @Test void getMyStudies() { - final List studySummaryData = myStudyDao.findMyStudyByMemberId(2L); + final List studySummaryData = myStudyDao.findMyStudyByMemberId(그린론.getId()); assertThat(studySummaryData) - .hasSize(4) + .hasSize(5) .filteredOn(myStudySummaryData -> myStudySummaryData.getId() != null) .extracting("title", "studyStatus", "currentMemberCount", "maxMemberCount", "startDate", "endDate") - .contains( - tuple("Java 스터디", PREPARE, 3, 10, "2021-12-08", null), - tuple("javaScript 스터디" ,PREPARE, 3, 20, "2022-08-03", null), - tuple("React 스터디", PREPARE, 4, 5, "2021-11-10", "2021-12-08"), - tuple("OS 스터디", PREPARE, 1, null, "2021-12-06", "2022-01-07") + .containsExactlyInAnyOrder( + tuple(자바_스터디_내용.getTitle(), 자바_스터디_계획.getStudyStatus(), 자바_스터디_참가자들.getSize(), + 자바_스터디_모집계획.getMax(), 자바_스터디_계획.getStartDate().toString(), + 자바_스터디_계획.getEndDate().toString()), + tuple(리액트_스터디_내용.getTitle(), 리액트_스터디_계획.getStudyStatus(), 리액트_스터디_참가자들.getSize(), + 리액트_스터디_모집계획.getMax(), 리액트_스터디_계획.getStartDate().toString(), + 자바_스터디_계획.getEndDate().toString()), + tuple(자바스크립트_스터디_내용.getTitle(), 자바스크립트_스터디_계획.getStudyStatus(), 자바스크립트_스터디_참가자들.getSize(), + 자바스크립트_스터디_모집계획.getMax(), 자바스크립트_스터디_계획.getStartDate().toString(), + 자바스크립트_스터디_계획.getEndDate().toString()), + tuple(알고리즘_스터디_내용.getTitle(), 알고리즘_스터디_계획.getStudyStatus(), 알고리즘_스터디_참가자들.getSize(), + 알고리즘_스터디_모집계획.getMax(), 알고리즘_스터디_계획.getStartDate().toString(), null), + tuple(리눅스_스터디_내용.getTitle(), 리눅스_스터디_계획.getStudyStatus(), 리눅스_스터디_참가자들.getSize(), + 리눅스_스터디_모집계획.getMax(), 리눅스_스터디_계획.getStartDate().toString(), + 리눅스_스터디_계획.getEndDate().toString()) ); } diff --git a/backend/src/test/java/com/woowacourse/moamoa/study/query/StudyDetailsDaoTest.java b/backend/src/test/java/com/woowacourse/moamoa/study/query/StudyDetailsDaoTest.java index c0cf96dd5..267a6b47a 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/study/query/StudyDetailsDaoTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/study/query/StudyDetailsDaoTest.java @@ -1,18 +1,30 @@ package com.woowacourse.moamoa.study.query; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.HTTP_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디; import static org.assertj.core.api.Assertions.assertThat; import com.woowacourse.moamoa.common.RepositoryTest; +import com.woowacourse.moamoa.member.domain.Member; +import com.woowacourse.moamoa.member.domain.repository.MemberRepository; import com.woowacourse.moamoa.member.query.data.MemberData; +import com.woowacourse.moamoa.study.domain.Study; +import com.woowacourse.moamoa.study.domain.repository.StudyRepository; import com.woowacourse.moamoa.study.query.data.StudyDetailsData; -import com.woowacourse.moamoa.study.service.exception.StudyNotFoundException; -import java.time.LocalDate; -import java.time.LocalDateTime; +import java.util.Set; +import javax.persistence.EntityManager; 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 org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest class StudyDetailsDaoTest { @@ -21,53 +33,41 @@ class StudyDetailsDaoTest { private StudyDetailsDao sut; @Autowired - private JdbcTemplate jdbcTemplate; + private StudyRepository studyRepository; + + @Autowired + private MemberRepository memberRepository; + + @Autowired + private EntityManager entityManager; + + private Member 짱구; + private Member 그린론; + private Member 디우; + private Member 베루스; + + private Study 자바_스터디; + private Study 리액트_스터디; + private Study 자바스크립트_스터디; + private Study HTTP_스터디; + private Study 알고리즘_스터디; + private Study 리눅스_스터디; @BeforeEach void initDataBase() { - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (1, 1, 'jjanggu', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (2, 2, 'greenlawn', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (3, 3, 'dwoo', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (4, 4, 'verus', 'https://image', 'github.com')"); - - final LocalDateTime now = LocalDateTime.now(); - - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, start_date, owner_id) " - + "VALUES (1, 'Java 스터디', '자바 설명', 'java thumbnail', 'RECRUITMENT_START', 'PREPARE', '그린론의 우당탕탕 자바 스터디입니다.', 3, 10, '" + now + "', '2021-12-08', 2)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, enrollment_end_date, start_date, end_date, owner_id) " - + "VALUES (2, 'React 스터디', '리액트 설명', 'react thumbnail', 'RECRUITMENT_START', 'PREPARE', '디우의 뤼액트 스터디입니다.', 4, 5, '" + now + "', '2021-11-09', '2021-11-10', '2021-12-08', 3)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, start_date, owner_id) " - + "VALUES (3, 'javaScript 스터디', '자바스크립트 설명', 'javascript thumbnail', 'RECRUITMENT_START', 'PREPARE', '그린론의 자바스크립트 접해보기', 3, 20, '" + now + "', '2022-08-03', 2)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, max_member_count, created_at, start_date, owner_id) " - + "VALUES (4, 'HTTP 스터디', 'HTTP 설명', 'http thumbnail', 'RECRUITMENT_END', 'PREPARE', '디우의 HTTP 정복하기', 5, '" + now + "', '2022-08-03', 3)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, created_at, owner_id, start_date) " - + "VALUES (5, '알고리즘 스터디', '알고리즘 설명', 'algorithm thumbnail', 'RECRUITMENT_END', 'PREPARE', '알고리즘을 TDD로 풀자의 베루스입니다.', 1, '" + now + "', 4, '2021-12-06')"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, created_at, owner_id, start_date, enrollment_end_date, end_date) " - + "VALUES (6, 'Linux 스터디', '리눅스 설명', 'linux thumbnail', 'RECRUITMENT_END', 'PREPARE', 'Linux를 공부하자의 베루스입니다.', 1, '" + now + "', 4, '2021-12-06', '2021-12-07', '2022-01-07')"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 1)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 3)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 4)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 5)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (3, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (3, 4)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (4, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (4, 3)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (1, 3)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (1, 4)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (2, 1)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (2, 2)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (2, 4)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (3, 3)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (3, 4)"); + 짱구 = memberRepository.save(짱구()); + 그린론 = memberRepository.save(그린론()); + 디우 = memberRepository.save(디우()); + 베루스 = memberRepository.save(베루스()); + + 자바_스터디 = studyRepository.save(자바_스터디(짱구.getId(), Set.of(그린론.getId(), 디우.getId()))); + 리액트_스터디 = studyRepository.save(리액트_스터디(디우.getId(), Set.of(짱구.getId(), 그린론.getId(), 베루스.getId()))); + 자바스크립트_스터디 = studyRepository.save(자바스크립트_스터디(그린론.getId(), Set.of(디우.getId(), 베루스.getId()))); + HTTP_스터디 = studyRepository.save(HTTP_스터디(디우.getId(), Set.of(베루스.getId(), 짱구.getId()))); + 알고리즘_스터디 = studyRepository.save(알고리즘_스터디(베루스.getId(), Set.of(그린론.getId(), 디우.getId()))); + 리눅스_스터디 = studyRepository.save(리눅스_스터디(베루스.getId(), Set.of(그린론.getId(), 디우.getId()))); + + entityManager.flush(); } @@ -75,17 +75,19 @@ void initDataBase() { @Test void getNotHasEnrollmentEndDateAndEndDateStudyDetails() { // 알고리즘 스터디는 모집 기간과 스터디 종료일자가 없음 - final StudyDetailsData actual = sut.findBy(5L).orElseThrow(); + final StudyDetailsData actual = sut.findBy(알고리즘_스터디.getId()).orElseThrow(); StudyDetailsData expect = StudyDetailsData.builder() // Study Content - .id(5L).title("알고리즘 스터디").excerpt("알고리즘 설명").thumbnail("algorithm thumbnail") - .status("RECRUITMENT_END").description("알고리즘을 TDD로 풀자의 베루스입니다.").createdDate(actual.getCreatedDate()) + .id(알고리즘_스터디.getId()).title(알고리즘_스터디.getContent().getTitle()) + .excerpt(알고리즘_스터디.getContent().getExcerpt()).thumbnail(알고리즘_스터디.getContent().getThumbnail()) + .status(알고리즘_스터디.getRecruitPlanner().getRecruitStatus().toString()) + .description(알고리즘_스터디.getContent().getDescription()).createdDate(actual.getCreatedDate()) // Study Participants - .currentMemberCount(1) - .owner(new MemberData(4L, "verus", "https://image", "github.com")) + .currentMemberCount(알고리즘_스터디.getParticipants().getSize()) + .owner(new MemberData(베루스.getGithubId(), 베루스.getUsername(), 베루스.getImageUrl(), 베루스.getProfileUrl())) // Study Period - .startDate(LocalDate.of(2021, 12, 6)) + .startDate(알고리즘_스터디.getStudyPlanner().getStartDate()) .build(); assertStudyContent(actual, expect); @@ -97,19 +99,19 @@ void getNotHasEnrollmentEndDateAndEndDateStudyDetails() { @Test void getNotHasMaxMemberCountStudyDetails() { // Linux 스터디는 최대 인원 정보가 없음 - final StudyDetailsData actual = sut.findBy(6L).orElseThrow(); + final StudyDetailsData actual = sut.findBy(리눅스_스터디.getId()).orElseThrow(); StudyDetailsData expect = StudyDetailsData.builder() // Study Content - .id(6L).title("Linux 스터디").excerpt("리눅스 설명").thumbnail("linux thumbnail") - .status("RECRUITMENT_END").description("Linux를 공부하자의 베루스입니다.").createdDate(actual.getCreatedDate()) + .id(리눅스_스터디.getId()).title(리눅스_스터디.getContent().getTitle()).excerpt(리눅스_스터디.getContent().getExcerpt()).thumbnail(리눅스_스터디.getContent().getThumbnail()) + .status(리눅스_스터디.getRecruitPlanner().getRecruitStatus().toString()).description(리눅스_스터디.getContent().getDescription()).createdDate(actual.getCreatedDate()) // Study Participant - .currentMemberCount(1) - .owner(new MemberData(4L, "verus", "https://image", "github.com")) + .currentMemberCount(리눅스_스터디.getParticipants().getSize()) + .owner(new MemberData(베루스.getGithubId(), 베루스.getUsername(), 베루스.getImageUrl(), 베루스.getProfileUrl())) // Study Period - .startDate(LocalDate.of(2021, 12, 6)) - .enrollmentEndDate(LocalDate.of(2021, 12, 7)) - .endDate(LocalDate.of(2022, 1, 7)) + .startDate(리눅스_스터디.getStudyPlanner().getStartDate()) + .enrollmentEndDate(리눅스_스터디.getRecruitPlanner().getEnrollmentEndDate()) + .endDate(리눅스_스터디.getStudyPlanner().getEndDate()) .build(); assertStudyContent(actual, expect); diff --git a/backend/src/test/java/com/woowacourse/moamoa/study/query/StudySummaryDaoTest.java b/backend/src/test/java/com/woowacourse/moamoa/study/query/StudySummaryDaoTest.java index a4d9a7ed2..47cdfcb84 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/study/query/StudySummaryDaoTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/study/query/StudySummaryDaoTest.java @@ -20,7 +20,6 @@ import com.woowacourse.moamoa.study.domain.StudyPlanner; import com.woowacourse.moamoa.study.domain.repository.StudyRepository; import com.woowacourse.moamoa.study.query.data.StudySummaryData; -import com.woowacourse.moamoa.tag.query.TagDao; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -38,7 +37,6 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; -import org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest public class StudySummaryDaoTest { @@ -52,15 +50,9 @@ public class StudySummaryDaoTest { @Autowired private StudyRepository studyRepository; - @Autowired - private TagDao tagDao; - @Autowired private EntityManager em; - @Autowired - private JdbcTemplate jdbcTemplate; - private Member jjanggu; private Member greenlawn; private Member dwoo; diff --git a/backend/src/test/java/com/woowacourse/moamoa/study/service/MyStudyServiceTest.java b/backend/src/test/java/com/woowacourse/moamoa/study/service/MyStudyServiceTest.java index 5f08aa9d6..8eb3a890b 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/study/service/MyStudyServiceTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/study/service/MyStudyServiceTest.java @@ -1,38 +1,44 @@ package com.woowacourse.moamoa.study.service; -import static com.woowacourse.moamoa.study.domain.StudyStatus.PREPARE; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.HTTP_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.OS_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디; import static java.util.stream.Collectors.toList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.tuple; -import java.util.List; -import java.time.LocalDateTime; - -import com.woowacourse.moamoa.study.service.exception.StudyNotFoundException; import com.woowacourse.moamoa.common.RepositoryTest; +import com.woowacourse.moamoa.member.domain.Member; import com.woowacourse.moamoa.member.domain.repository.MemberRepository; import com.woowacourse.moamoa.member.query.data.MemberData; -import com.woowacourse.moamoa.study.domain.repository.StudyRepository; import com.woowacourse.moamoa.member.service.exception.MemberNotFoundException; +import com.woowacourse.moamoa.study.domain.Study; +import com.woowacourse.moamoa.study.domain.repository.StudyRepository; import com.woowacourse.moamoa.study.query.MyStudyDao; +import com.woowacourse.moamoa.study.service.exception.StudyNotFoundException; import com.woowacourse.moamoa.study.service.response.MyStudiesResponse; import com.woowacourse.moamoa.study.service.response.MyStudyResponse; import com.woowacourse.moamoa.tag.query.response.TagSummaryData; - +import java.util.List; +import java.util.Set; +import javax.persistence.EntityManager; 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 org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest class MyStudyServiceTest { - @Autowired - private JdbcTemplate jdbcTemplate; - @Autowired private MyStudyDao myStudyDao; @@ -42,65 +48,48 @@ class MyStudyServiceTest { @Autowired private StudyRepository studyRepository; + @Autowired + private EntityManager entityManager; + private MyStudyService myStudyService; + private Member 짱구; + private Member 그린론; + private Member 디우; + private Member 베루스; + + private Study 자바_스터디; + private Study 리액트_스터디; + private Study 자바스크립트_스터디; + private Study HTTP_스터디; + private Study 알고리즘_스터디; + private Study 리눅스_스터디; + private Study OS_스터디; + @BeforeEach void setUp() { myStudyService = new MyStudyService(myStudyDao, memberRepository, studyRepository); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (1, 1, 'jjanggu', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (2, 2, 'greenlawn', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (3, 3, 'dwoo', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (4, 4, 'verus', 'https://image', 'github.com')"); - - final LocalDateTime now = LocalDateTime.now(); - - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, start_date, owner_id) " - + "VALUES (1, 'Java 스터디', '자바 설명', 'java thumbnail', 'RECRUITMENT_START', 'PREPARE', '그린론의 우당탕탕 자바 스터디입니다.', 3, 10, '" + now + "', '2021-12-08', 2)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, enrollment_end_date, start_date, end_date, owner_id) " - + "VALUES (2, 'React 스터디', '리액트 설명', 'react thumbnail', 'RECRUITMENT_START', 'PREPARE', '디우의 뤼액트 스터디입니다.', 4, 5, '" + now + "', '2021-11-09', '2021-11-10', '2021-12-08', 3)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, start_date, owner_id) " - + "VALUES (3, 'javaScript 스터디', '자바스크립트 설명', 'javascript thumbnail', 'RECRUITMENT_START', 'PREPARE', '그린론의 자바스크립트 접해보기', 3, 20, '" + now + "', '2022-08-03', 2)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, max_member_count, created_at, start_date, owner_id) " - + "VALUES (4, 'HTTP 스터디', 'HTTP 설명', 'http thumbnail', 'RECRUITMENT_END', 'PREPARE', '디우의 HTTP 정복하기', 5, '" + now + "', '2022-08-03', 3)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, created_at, owner_id, start_date) " - + "VALUES (5, '알고리즘 스터디', '알고리즘 설명', 'algorithm thumbnail', 'RECRUITMENT_END', 'PREPARE', '알고리즘을 TDD로 풀자의 베루스입니다.', 1, '" + now + "', 4, '2021-12-06')"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, created_at, owner_id, start_date, enrollment_end_date, end_date) " - + "VALUES (6, 'Linux 스터디', '리눅스 설명', 'linux thumbnail', 'RECRUITMENT_END', 'PREPARE', 'Linux를 공부하자의 베루스입니다.', 1, '" + now + "', 4, '2021-12-06', '2021-12-07', '2022-01-07')"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, owner_id, start_date, enrollment_end_date, end_date) " - + "VALUES (7, 'OS 스터디', 'OS 설명', 'os thumbnail', 'RECRUITMENT_END', 'PREPARE', 'OS를 공부하자의 베루스입니다.', 1, 6, '" + now + "', 4, '2021-12-06', '2021-12-07', '2022-01-07')"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 1)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 3)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 4)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 5)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (3, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (3, 4)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (4, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (4, 3)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (1, 3)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (1, 4)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (2, 2)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (2, 4)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (3, 3)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (3, 4)"); - - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (7, 1)"); - jdbcTemplate.update("INSERT INTO study_member(study_id, member_id) VALUES (7, 2)"); + 짱구 = memberRepository.save(짱구()); + 그린론 = memberRepository.save(그린론()); + 디우 = memberRepository.save(디우()); + 베루스 = memberRepository.save(베루스()); + + 자바_스터디 = studyRepository.save(자바_스터디(짱구.getId(), Set.of(그린론.getId(), 디우.getId()))); + 리액트_스터디 = studyRepository.save(리액트_스터디(디우.getId(), Set.of(짱구.getId(), 그린론.getId(), 베루스.getId()))); + 자바스크립트_스터디 = studyRepository.save(자바스크립트_스터디(그린론.getId(), Set.of(디우.getId(), 베루스.getId()))); + HTTP_스터디 = studyRepository.save(HTTP_스터디(디우.getId(), Set.of(베루스.getId(), 짱구.getId()))); + 알고리즘_스터디 = studyRepository.save(알고리즘_스터디(베루스.getId(), Set.of(그린론.getId(), 디우.getId()))); + 리눅스_스터디 = studyRepository.save(리눅스_스터디(베루스.getId(), Set.of(그린론.getId(), 디우.getId()))); + OS_스터디 = studyRepository.save(OS_스터디(디우.getId(), Set.of(그린론.getId(), 짱구.getId(), 베루스.getId()))); + + entityManager.flush(); } @DisplayName("내가 참여한 스터디를 조회한다.") @Test void findMyStudies() { - final MyStudiesResponse myStudiesResponse = myStudyService.getStudies(2L); + final MyStudiesResponse myStudiesResponse = myStudyService.getStudies(짱구.getGithubId()); final List owners = myStudiesResponse.getStudies() .stream() @@ -114,25 +103,29 @@ void findMyStudies() { final List studies = myStudiesResponse.getStudies(); + for (MyStudyResponse study : studies) { + System.out.println("study.getTitle() = " + study.getTitle()); + } + assertThat(studies) .hasSize(4) .filteredOn(study -> study.getId() != null) .extracting("title", "studyStatus", "currentMemberCount", "maxMemberCount") .contains( - tuple("Java 스터디", PREPARE, 3, 10), - tuple("javaScript 스터디" ,PREPARE, 3, 20), - tuple("React 스터디", PREPARE, 4, 5), - tuple("OS 스터디", PREPARE, 1, 6) + tuple(자바_스터디.getContent().getTitle(), 자바_스터디.getStudyPlanner().getStudyStatus(), 자바_스터디.getParticipants().getSize(), 자바_스터디.getRecruitPlanner().getMax()), + tuple(리액트_스터디.getContent().getTitle(), 리액트_스터디.getStudyPlanner().getStudyStatus(), 리액트_스터디.getParticipants().getSize(), 리액트_스터디.getRecruitPlanner().getMax()), + tuple(HTTP_스터디.getContent().getTitle(), HTTP_스터디.getStudyPlanner().getStudyStatus(), HTTP_스터디.getParticipants().getSize(), HTTP_스터디.getRecruitPlanner().getMax()), + tuple(OS_스터디.getContent().getTitle(), OS_스터디.getStudyPlanner().getStudyStatus(), OS_스터디.getParticipants().getSize(), OS_스터디.getRecruitPlanner().getMax()) ); assertThat(owners) .hasSize(4) .extracting("githubId", "username", "imageUrl", "profileUrl") .contains( - tuple(2L, "greenlawn", "https://image", "github.com"), - tuple(2L, "greenlawn", "https://image", "github.com"), - tuple(3L, "dwoo", "https://image", "github.com"), - tuple(4L, "verus", "https://image", "github.com") + tuple(짱구.getGithubId(), 짱구.getUsername(), 짱구.getImageUrl(), 짱구.getProfileUrl()), + tuple(디우.getGithubId(), 디우.getUsername(), 디우.getImageUrl(), 디우.getProfileUrl()), + tuple(디우.getGithubId(), 디우.getUsername(), 디우.getImageUrl(), 디우.getProfileUrl()), + tuple(디우.getGithubId(), 디우.getUsername(), 디우.getImageUrl(), 디우.getProfileUrl()) ); assertThat(tags).hasSize(4); @@ -141,7 +134,7 @@ void findMyStudies() { @DisplayName("태그가 없는 스터디를 조회한다.") @Test void findMyStudiesWithoutTags() { - final MyStudiesResponse myStudiesResponse = myStudyService.getStudies(1L); + final MyStudiesResponse myStudiesResponse = myStudyService.getStudies(디우.getGithubId()); final List owners = myStudiesResponse.getStudies() .stream() @@ -156,21 +149,41 @@ void findMyStudiesWithoutTags() { final List studies = myStudiesResponse.getStudies(); assertThat(studies) - .hasSize(1) + .hasSize(7) .filteredOn(study -> study.getId() != null) .extracting("title", "studyStatus", "currentMemberCount", "maxMemberCount") .contains( - tuple("OS 스터디", PREPARE, 1, 6) + tuple(자바_스터디.getContent().getTitle(), 자바_스터디.getStudyPlanner().getStudyStatus(), + 자바_스터디.getParticipants().getSize(), 자바_스터디.getRecruitPlanner().getMax()), + tuple(리액트_스터디.getContent().getTitle(), 리액트_스터디.getStudyPlanner().getStudyStatus(), + 리액트_스터디.getParticipants().getSize(), 리액트_스터디.getRecruitPlanner().getMax()), + tuple(자바스크립트_스터디.getContent().getTitle(), 자바스크립트_스터디.getStudyPlanner().getStudyStatus(), + 자바스크립트_스터디.getParticipants().getSize(), 자바스크립트_스터디.getRecruitPlanner().getMax()), + tuple(HTTP_스터디.getContent().getTitle(), HTTP_스터디.getStudyPlanner().getStudyStatus(), + HTTP_스터디.getParticipants().getSize(), HTTP_스터디.getRecruitPlanner().getMax()), + tuple(알고리즘_스터디.getContent().getTitle(), 알고리즘_스터디.getStudyPlanner().getStudyStatus(), + 알고리즘_스터디.getParticipants().getSize(), 알고리즘_스터디.getRecruitPlanner().getMax()), + tuple(리눅스_스터디.getContent().getTitle(), 리눅스_스터디.getStudyPlanner().getStudyStatus(), + 리눅스_스터디.getParticipants().getSize(), 리눅스_스터디.getRecruitPlanner().getMax()), + tuple(OS_스터디.getContent().getTitle(), OS_스터디.getStudyPlanner().getStudyStatus(), + OS_스터디.getParticipants().getSize(), OS_스터디.getRecruitPlanner().getMax()) ); assertThat(owners) - .hasSize(1) + .hasSize(7) .extracting("githubId", "username", "imageUrl", "profileUrl") .contains( - tuple(4L, "verus", "https://image", "github.com") + tuple(짱구.getGithubId(), 짱구.getUsername(), 짱구.getImageUrl(), 짱구.getProfileUrl()), + tuple(디우.getGithubId(), 디우.getUsername(), 디우.getImageUrl(), 디우.getProfileUrl()), + tuple(그린론.getGithubId(), 그린론.getUsername(), 그린론.getImageUrl(), 그린론.getProfileUrl()), + tuple(디우.getGithubId(), 디우.getUsername(), 디우.getImageUrl(), 디우.getProfileUrl()), + tuple(베루스.getGithubId(), 베루스.getUsername(), 베루스.getImageUrl(), 베루스.getProfileUrl()), + tuple(베루스.getGithubId(), 베루스.getUsername(), 베루스.getImageUrl(), 베루스.getProfileUrl()), + tuple(디우.getGithubId(), 디우.getUsername(), 디우.getImageUrl(), 디우.getProfileUrl()) ); - assertThat(tags.get(0).size()).isZero(); + assertThat(tags.get(4).size()).isZero(); + assertThat(tags.get(5).size()).isZero(); } @DisplayName("존재하지 않은 내가 참여한 스터디 조회 시 예외 발생") diff --git a/backend/src/test/java/com/woowacourse/moamoa/tag/controller/SearchingTagControllerTest.java b/backend/src/test/java/com/woowacourse/moamoa/tag/controller/SearchingTagControllerTest.java index 881333ec0..30b072d36 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/tag/controller/SearchingTagControllerTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/tag/controller/SearchingTagControllerTest.java @@ -8,14 +8,12 @@ import com.woowacourse.moamoa.tag.query.request.CategoryIdRequest; import com.woowacourse.moamoa.tag.service.SearchingTagService; import com.woowacourse.moamoa.tag.service.response.TagsResponse; -import java.util.Optional; 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 org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest class SearchingTagControllerTest { diff --git a/backend/src/test/java/com/woowacourse/moamoa/tag/query/TagDaoTest.java b/backend/src/test/java/com/woowacourse/moamoa/tag/query/TagDaoTest.java index 91e0518ea..a42514f09 100644 --- a/backend/src/test/java/com/woowacourse/moamoa/tag/query/TagDaoTest.java +++ b/backend/src/test/java/com/woowacourse/moamoa/tag/query/TagDaoTest.java @@ -1,18 +1,32 @@ package com.woowacourse.moamoa.tag.query; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.그린론; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.디우; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.베루스; +import static com.woowacourse.moamoa.fixtures.MemberFixtures.짱구; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.HTTP_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리눅스_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.리액트_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.알고리즘_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바_스터디; +import static com.woowacourse.moamoa.fixtures.StudyFixtures.자바스크립트_스터디; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import com.woowacourse.moamoa.common.RepositoryTest; +import com.woowacourse.moamoa.member.domain.Member; +import com.woowacourse.moamoa.member.domain.repository.MemberRepository; +import com.woowacourse.moamoa.study.domain.Study; +import com.woowacourse.moamoa.study.domain.repository.StudyRepository; import com.woowacourse.moamoa.tag.query.request.CategoryIdRequest; import com.woowacourse.moamoa.tag.query.response.TagData; -import java.time.LocalDateTime; import java.util.List; +import java.util.Set; +import javax.persistence.EntityManager; 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 org.springframework.jdbc.core.JdbcTemplate; @RepositoryTest class TagDaoTest { @@ -21,43 +35,41 @@ class TagDaoTest { private TagDao tagDao; @Autowired - private JdbcTemplate jdbcTemplate; + private MemberRepository memberRepository; + + @Autowired + private StudyRepository studyRepository; + + @Autowired + private EntityManager entityManager; + + private Member 짱구; + private Member 그린론; + private Member 디우; + private Member 베루스; + + private Study 자바_스터디; + private Study 리액트_스터디; + private Study 자바스크립트_스터디; + private Study HTTP_스터디; + private Study 알고리즘_스터디; + private Study 리눅스_스터디; @BeforeEach void initDataBase() { - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (1, 1, 'jjanggu', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (2, 2, 'greenlawn', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (3, 3, 'dwoo', 'https://image', 'github.com')"); - jdbcTemplate.update("INSERT INTO member(id, github_id, username, image_url, profile_url) VALUES (4, 4, 'verus', 'https://image', 'github.com')"); - - final LocalDateTime now = LocalDateTime.now(); - - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, start_date, owner_id) " - + "VALUES (1, 'Java 스터디', '자바 설명', 'java thumbnail', 'RECRUITMENT_START', 'PREPARE', '그린론의 우당탕탕 자바 스터디입니다.', 3, 10, '" + now + "', '2021-12-08', 2)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, enrollment_end_date, start_date, end_date, owner_id) " - + "VALUES (2, 'React 스터디', '리액트 설명', 'react thumbnail', 'RECRUITMENT_START', 'PREPARE', '디우의 뤼액트 스터디입니다.', 4, 5, '" + now + "', '2021-11-09', '2021-11-10', '2021-12-08', 3)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, max_member_count, created_at, start_date, owner_id) " - + "VALUES (3, 'javaScript 스터디', '자바스크립트 설명', 'javascript thumbnail', 'RECRUITMENT_START', 'PREPARE', '그린론의 자바스크립트 접해보기', 3, 20, '" + now + "', '2022-08-03', 2)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, max_member_count, created_at, start_date, owner_id) " - + "VALUES (4, 'HTTP 스터디', 'HTTP 설명', 'http thumbnail', 'RECRUITMENT_END', 'PREPARE', '디우의 HTTP 정복하기', 5, '" + now + "', '2022-08-03', 3)"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, created_at, owner_id, start_date) " - + "VALUES (5, '알고리즘 스터디', '알고리즘 설명', 'algorithm thumbnail', 'RECRUITMENT_END', 'PREPARE', '알고리즘을 TDD로 풀자의 베루스입니다.', 1, '" + now + "', 4, '2021-12-06')"); - jdbcTemplate.update("INSERT INTO study(id, title, excerpt, thumbnail, recruitment_status, study_status, description, current_member_count, created_at, owner_id, start_date, enrollment_end_date, end_date) " - + "VALUES (6, 'Linux 스터디', '리눅스 설명', 'linux thumbnail', 'RECRUITMENT_END', 'PREPARE', 'Linux를 공부하자의 베루스입니다.', 1, '" + now + "', 4, '2021-12-06', '2021-12-07', '2022-01-07')"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 1)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (1, 3)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 4)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (2, 5)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (3, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (3, 4)"); - - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (4, 2)"); - jdbcTemplate.update("INSERT INTO study_tag(study_id, tag_id) VALUES (4, 3)"); + 짱구 = memberRepository.save(짱구()); + 그린론 = memberRepository.save(그린론()); + 디우 = memberRepository.save(디우()); + 베루스 = memberRepository.save(베루스()); + + 자바_스터디 = studyRepository.save(자바_스터디(짱구.getId(), Set.of(그린론.getId(), 디우.getId()))); + 리액트_스터디 = studyRepository.save(리액트_스터디(디우.getId(), Set.of(짱구.getId(), 그린론.getId(), 베루스.getId()))); + 자바스크립트_스터디 = studyRepository.save(자바스크립트_스터디(그린론.getId(), Set.of(디우.getId(), 베루스.getId()))); + HTTP_스터디 = studyRepository.save(HTTP_스터디(디우.getId(), Set.of(베루스.getId(), 짱구.getId()))); + 알고리즘_스터디 = studyRepository.save(알고리즘_스터디(베루스.getId(), Set.of(그린론.getId(), 디우.getId()))); + 리눅스_스터디 = studyRepository.save(리눅스_스터디(베루스.getId(), Set.of(그린론.getId(), 디우.getId()))); + + entityManager.flush(); } @DisplayName("필터 없이 조회시 태그 목록 전체를 조회한다.") @@ -121,7 +133,7 @@ void findAllByCategoryAndName() { @Test void getAttachedTagsByStudyId() { // Java 스터디에 부착된 태그 : Java, 4기, BE - final List attachedTags = tagDao.findTagsByStudyId(1L); + final List attachedTags = tagDao.findTagsByStudyId(자바_스터디.getId()); assertThat(attachedTags) .hasSize(3) diff --git a/backend/src/test/resources/schema.sql b/backend/src/test/resources/schema.sql index fcbcc4936..32d9512ad 100644 --- a/backend/src/test/resources/schema.sql +++ b/backend/src/test/resources/schema.sql @@ -42,8 +42,8 @@ CREATE TABLE review study_id BIGINT NOT NULL, member_id BIGINT NOT NULL, content MEDIUMTEXT, - created_date DATETIME not null, - last_modified_date DATETIME not null, + created_date DATE not null, + last_modified_date DATE not null, deleted boolean not null, FOREIGN KEY (study_id) REFERENCES study (id), FOREIGN KEY (member_id) REFERENCES member (id)