Skip to content

Commit

Permalink
test: 스터디 수료 쿠폰 관련 테스트 추가 (#870)
Browse files Browse the repository at this point in the history
* test: 스터디 수료 쿠폰 관련 테스트 추가

* feat: 테스트용 페치 메서드 추가

* refactor: 쿼리 메서드 추출

* feat: nullable 어노테이면 추가

* test: 테스트를 적절한 위치로 이동

* test: 검증 방식 수정

* remove: 사용하지 않는 메서드 제거

* fix: 크기 비교 로직 수정
  • Loading branch information
Sangwook02 authored Feb 9, 2025
1 parent 20691f7 commit efe4a8f
Showing 1 changed file with 101 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,28 @@
import static java.math.BigDecimal.*;
import static org.assertj.core.api.Assertions.*;

import com.gdschongik.gdsc.domain.common.vo.Money;
import com.gdschongik.gdsc.domain.common.vo.Period;
import com.gdschongik.gdsc.domain.coupon.dao.CouponRepository;
import com.gdschongik.gdsc.domain.coupon.dao.IssuedCouponRepository;
import com.gdschongik.gdsc.domain.coupon.domain.Coupon;
import com.gdschongik.gdsc.domain.coupon.domain.CouponType;
import com.gdschongik.gdsc.domain.coupon.domain.IssuedCoupon;
import com.gdschongik.gdsc.domain.coupon.dto.request.CouponCreateRequest;
import com.gdschongik.gdsc.domain.coupon.dto.request.CouponIssueRequest;
import com.gdschongik.gdsc.domain.coupon.dto.request.IssuedCouponQueryOption;
import com.gdschongik.gdsc.domain.member.domain.Member;
import com.gdschongik.gdsc.domain.study.domain.Study;
import com.gdschongik.gdsc.domain.study.domain.StudyHistory;
import com.gdschongik.gdsc.global.exception.CustomException;
import com.gdschongik.gdsc.helper.IntegrationTest;
import java.time.LocalDateTime;
import java.util.List;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;

class CouponServiceTest extends IntegrationTest {

Expand Down Expand Up @@ -193,4 +204,94 @@ class 쿠폰_회수할때 {
.hasMessageContaining(COUPON_NOT_REVOKABLE_ALREADY_USED.getMessage());
}
}

@Nested
class 스터디_수료_쿠폰_발급시 {

@Test
void 발급쿠폰을_생성한다() {
// given
Member student = createRegularMember();
Member mentor = createMentor();
LocalDateTime now = LocalDateTime.now();
Study study =
createStudy(mentor, Period.of(now.plusDays(5), now.plusDays(10)), Period.of(now.minusDays(5), now));

StudyHistory studyHistory = createStudyHistory(student, study);

// when
couponService.createAndIssueCouponByStudyHistories(List.of(1L));

// then
Page<IssuedCoupon> issuedCoupons = issuedCouponRepository.findAllIssuedCoupons(
new IssuedCouponQueryOption(null, null, null, null, null, null), PageRequest.of(0, 10));
assertThat(issuedCoupons).hasSize(1);
}

@Test
void 수료_쿠폰이_이미_존재한다면_새로_생성하지_않는다() {
// given
Member student = createRegularMember();
Member mentor = createMentor();
LocalDateTime now = LocalDateTime.now();
Study study =
createStudy(mentor, Period.of(now.plusDays(5), now.plusDays(10)), Period.of(now.minusDays(5), now));

StudyHistory studyHistory = createStudyHistory(student, study);

// when
Coupon coupon = couponRepository.save(
Coupon.createAutomatic(COUPON_NAME, Money.FIVE_THOUSAND, CouponType.STUDY_COMPLETION, study));

couponService.createAndIssueCouponByStudyHistories(List.of(student.getId()));

// then
List<Coupon> coupons = couponRepository.findAll();
assertThat(coupons).hasSize(1);
}

@Test
void 수료_쿠폰이_없다면_새로_생성한다() {
// given
Member student = createRegularMember();
Member mentor = createMentor();
LocalDateTime now = LocalDateTime.now();
Study study =
createStudy(mentor, Period.of(now.plusDays(5), now.plusDays(10)), Period.of(now.minusDays(5), now));

StudyHistory studyHistory = createStudyHistory(student, study);

// when
couponService.createAndIssueCouponByStudyHistories(List.of(1L));

// then
List<Coupon> coupons = couponRepository.findAll();
assertThat(coupons).hasSize(1);
}
}

@Nested
class 스터디_수료_쿠폰_회수시 {

@Test
void 발급쿠폰을_회수한다() {
// given
Member student = createRegularMember();
Member mentor = createMentor();
LocalDateTime now = LocalDateTime.now();
Study study =
createStudy(mentor, Period.of(now.plusDays(5), now.plusDays(10)), Period.of(now.minusDays(5), now));

StudyHistory studyHistory = createStudyHistory(student, study);

couponService.createAndIssueCouponByStudyHistories(List.of(1L));

// when
couponService.revokeStudyCompletionCouponByStudyHistoryId(student.getId());

// then
IssuedCoupon issuedCoupon = issuedCouponRepository.findById(1L).orElseThrow();
assertThat(issuedCoupon.getHasRevoked()).isTrue();
}
}
}

0 comments on commit efe4a8f

Please sign in to comment.