Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] issue241: 테스트 코드 리팩토링 #242

Merged
merged 29 commits into from
Aug 16, 2022
Merged
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
20656f8
refactor: ReviewDaoTest 리팩토링
tco0427 Aug 10, 2022
2bad521
refactor: createdDate 수정 및 schema 변경
tco0427 Aug 10, 2022
778c200
refactor: ReviewControllerTest 리팩토링
tco0427 Aug 10, 2022
db06960
refactor: MemberData Fixture 사용
tco0427 Aug 10, 2022
2e32b80
refactor: MyStudyControllerTest 리팩토링
tco0427 Aug 11, 2022
7ef8eb8
Merge branch 'develop' of https://github.com/woowacourse-teams/2022-m…
tco0427 Aug 11, 2022
65f6a01
refactor: MyStudyControllerTest 리팩토링 완료
tco0427 Aug 11, 2022
adfb22b
refactor: MyStudyDaoTest
tco0427 Aug 11, 2022
3a875e4
refactor: MyStudyDaoTest 수정 중
tco0427 Aug 11, 2022
64fa5b2
refactor: MyStudyDaoTest 완료
tco0427 Aug 11, 2022
d027489
fix: 깨지는 테스트 수정
tco0427 Aug 11, 2022
926f950
fix: id 값은 알 수 없으므로 null만 검사하도록 수정
tco0427 Aug 11, 2022
5de9bd5
refactor: MemberFixtures에서 Member 상수 -> 메서드로 변경
sc0116 Aug 11, 2022
34ac7f4
refactor: ReviewFixtures에서 Review 상수 -> 메서드로 변경
sc0116 Aug 11, 2022
38d6d3e
refactor: StudyDetailsDaoTest 리팩토링
tco0427 Aug 11, 2022
48a7f8f
Merge branch 'refactor/241-test-refactoring' of https://github.com/wo…
tco0427 Aug 11, 2022
d5bccdc
refactor: MyStudyServiceTest 리팩토링
tco0427 Aug 11, 2022
7e39ade
refactor: 불필요한 StudyFixtures 제거
tco0427 Aug 11, 2022
0e976f6
refactor: TagDaoTest 수정
tco0427 Aug 11, 2022
d0d87d8
refactor: ReviewDaoTest 리팩토링
tco0427 Aug 11, 2022
6d28741
refactor: 사용하지 않는 Fixture 제거
tco0427 Aug 11, 2022
4f7da73
fix: ReviewDaoTest 수정
tco0427 Aug 11, 2022
19b374e
feat: 스터디 최대 인원이 한명인 경우 바로 모집 종료가 된다.
tco0427 Aug 11, 2022
59a2a51
fix: 테스트 코드 통과하도록 수정
tco0427 Aug 11, 2022
36e69e7
refactor: 린론 피드백 반영
tco0427 Aug 16, 2022
1236b0f
Merge branch 'refactor/241-test-refactoring' of https://github.com/wo…
tco0427 Aug 16, 2022
7feb089
refactor: DTO 검증문 추가
tco0427 Aug 16, 2022
8ef9f56
fix: 테스트 수정
tco0427 Aug 16, 2022
e1efa66
refactor: 픽스쳐 추가
tco0427 Aug 16, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.woowacourse.moamoa.common.entity;

import java.util.Date;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
Expand All @@ -16,9 +16,9 @@ public class BaseEntity {

@CreatedDate
@Column(updatable = false, nullable = false)
private Date createdDate;
private LocalDateTime createdDate;

@LastModifiedDate
@Column(nullable = false)
private Date lastModifiedDate;
private LocalDateTime lastModifiedDate;
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
import javax.persistence.ElementCollection;
import javax.persistence.Embeddable;
import javax.persistence.JoinColumn;
import lombok.Getter;

@Getter
@Embeddable
public class AttachedTags {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public boolean isParticipate(Long memberId) {
return participants.contains(new Participant(memberId));
}

int getSize() {
public int getSize() {
return size;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -55,7 +57,7 @@ void closeRecruiting() {
recruitStatus = RECRUITMENT_END;
}

LocalDate getEnrollmentEndDate() {
public LocalDate getEnrollmentEndDate() {
return enrollmentEndDate;
}

Expand All @@ -74,7 +76,8 @@ boolean hasCapacity() {
return max != null;
}

public RecruitStatus getRecruitStatus() {
return recruitStatus;

public boolean isMemberMax(final String maxMemberCount, final int size) {
return maxMemberCount != null && size == this.getMax();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import com.woowacourse.moamoa.study.domain.exception.InvalidPeriodException;
import com.woowacourse.moamoa.study.service.exception.FailureParticipationException;
import com.woowacourse.moamoa.study.service.response.MyRoleResponse;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.woowacourse.moamoa.study.service;

import static com.woowacourse.moamoa.study.domain.RecruitStatus.RECRUITMENT_END;

import com.woowacourse.moamoa.common.exception.UnauthorizedException;
import com.woowacourse.moamoa.common.utils.DateTimeSystem;
import com.woowacourse.moamoa.member.domain.Member;
Expand Down Expand Up @@ -41,14 +43,24 @@ public Study createStudy(final Long githubId, final CreatingStudyRequest request
final Member owner = findMemberBy(githubId);

final Participants participants = request.mapToParticipants(owner.getId());
final RecruitPlanner recruitPlanner = request.mapToRecruitPlan();
final RecruitPlanner recruitPlanner = getRecruitPlanner(request, participants);

final StudyPlanner studyPlanner = request.mapToStudyPlanner(createdAt.toLocalDate());
final AttachedTags attachedTags = request.mapToAttachedTags();
final Content content = request.mapToContent();

return studyRepository.save(new Study(content, participants, recruitPlanner, studyPlanner, attachedTags, createdAt));
}

private RecruitPlanner getRecruitPlanner(final CreatingStudyRequest request, final Participants participants) {
final RecruitPlanner recruitPlanner = request.mapToRecruitPlan();
if (recruitPlanner.isMemberMax(request.getMaxMemberCount(), participants.getSize())) {
return new RecruitPlanner(recruitPlanner.getMax(), RECRUITMENT_END, recruitPlanner.getEnrollmentEndDate());
}

return recruitPlanner;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if (maxMemberCount != null && maxMemberCount == 1) {
    return new RecruitPlanner(maxMemberCount, RecruitStatus.RECRUITMENT_END, enrollmentEndDate);
}

이런 식으로 CreatingStudyRequest.mapToRecruitPlan 메서드안에 넣는게 좋아보여요

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RecruitPlanner 도메인의 로직도 제거할 수 있고, Service 쪽 private 메소드도 제거 가능해지네요!


public void participateStudy(final Long githubId, final Long studyId) {
final Member member = findMemberBy(githubId);
final Study study = findStudyBy(studyId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public String getEndDate() {
}

public String getMaxMemberCount() {
return maxMemberCount == null ? "" : String.valueOf(maxMemberCount);
return maxMemberCount == null ? null : String.valueOf(maxMemberCount);
}

public String getEnrollmentEndDate() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import io.restassured.RestAssured;
import java.time.LocalDate;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpHeaders;
Expand Down Expand Up @@ -129,10 +128,10 @@ public void getReviewsBySize() {
디우가().로그인하고().스터디에(자바_스터디_ID).참여한다();
베루스가().로그인하고().스터디에(자바_스터디_ID).참여한다();

long 짱구_리뷰_ID = 짱구가().로그인하고().스터디에(자바_스터디_ID).리뷰를_작성한다("리뷰 내용1");
long 그린론_리뷰_ID = 그린론이().로그인하고().스터디에(자바_스터디_ID).리뷰를_작성한다("리뷰 내용2");
long 디우_리뷰_ID = 디우가().로그인하고().스터디에(자바_스터디_ID).리뷰를_작성한다("리뷰 내용3");
long 베루스_리뷰_ID = 베루스가().로그인하고().스터디에(자바_스터디_ID).리뷰를_작성한다("리뷰 내용4");
짱구가().로그인하고().스터디에(자바_스터디_ID).리뷰를_작성한다("리뷰 내용1");
그린론이().로그인하고().스터디에(자바_스터디_ID).리뷰를_작성한다("리뷰 내용2");
짱구가().로그인하고().스터디에(리액트_스터디_ID).리뷰를_작성한다("리뷰 내용5");

// act
Expand All @@ -156,7 +155,7 @@ public void getReviewsBySize() {
final ReviewResponse 베루스_리뷰 = new ReviewResponse(베루스_리뷰_ID, 베루스, 리뷰_생성일, 리뷰_수정일, "리뷰 내용4");

assertThat(reviewsResponse.getTotalCount()).isEqualTo(4);
assertThat(reviewsResponse.getReviews()).containsExactly(베루스_리뷰, 디우_리뷰);
assertThat(reviewsResponse.getReviews()).containsExactly(디우_리뷰, 베루스_리뷰);
}

@DisplayName("자신이 참여한 스터디에 작성한 리뷰를 삭제할 수 있다.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down

This file was deleted.

32 changes: 24 additions & 8 deletions backend/src/test/java/com/woowacourse/fixtures/MemberFixtures.java
Original file line number Diff line number Diff line change
Expand Up @@ -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(짱구_깃허브_아이디, 짱구_유저네임, 짱구_이미지, 짱구_프로필);

/* 그린론 */
Expand All @@ -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(그린론_깃허브_아이디, 그린론_유저네임, 그린론_이미지, 그린론_프로필);

/* 디우 */
Expand All @@ -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(디우_깃허브_아이디, 디우_유저네임, 디우_이미지, 디우_프로필);

/* 베루스 */
Expand All @@ -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 짱구() {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

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(태태_깃허브_아이디, 태태_유저네임, 태태_이미지, 태태_프로필);
}
}
67 changes: 35 additions & 32 deletions backend/src/test/java/com/woowacourse/fixtures/ReviewFixtures.java
Original file line number Diff line number Diff line change
@@ -1,47 +1,50 @@
package com.woowacourse.fixtures;

import static com.woowacourse.fixtures.MemberFixtures.그린론_아이디;
import static com.woowacourse.fixtures.MemberFixtures.그린론_응답;
import static com.woowacourse.fixtures.MemberFixtures.디우_아이디;
import static com.woowacourse.fixtures.MemberFixtures.디우_응답;
import static com.woowacourse.fixtures.MemberFixtures.베루스_아이디;
import static com.woowacourse.fixtures.MemberFixtures.베루스_응답;
import static com.woowacourse.fixtures.MemberFixtures.짱구_아이디;
import static com.woowacourse.fixtures.MemberFixtures.짱구_응답;
import static com.woowacourse.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);
}
}
Loading