diff --git a/src/main/java/com/ceos/bankids/Enum/ChallengeStatus.java b/src/main/java/com/ceos/bankids/Enum/ChallengeStatus.java new file mode 100644 index 00000000..d1afd562 --- /dev/null +++ b/src/main/java/com/ceos/bankids/Enum/ChallengeStatus.java @@ -0,0 +1,29 @@ +package com.ceos.bankids.Enum; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ChallengeStatus implements EnumMapperType { + + REJECTED(1L, 0L, "부모가 거절한 상태"), + ACHIEVED(2L, 0L, "돈길을 완전히 완주한 상태"), + FAILED(0L, 0L, "이자율 위험도에 걸려서 실패한 상태"), + PENDING(1L, 1L, "부모한테 제안한 상태"), + WALKING(1L, 2L, "부모한테 수락 받아서 걷고있는 상태"); + + private final Long isAchieved; + private final Long status; + private final String description; + + @Override + public String getCode() { + return name(); + } + + @Override + public Long getStatus() { + return status; + } +} diff --git a/src/main/java/com/ceos/bankids/Enum/EnumMapperType.java b/src/main/java/com/ceos/bankids/Enum/EnumMapperType.java new file mode 100644 index 00000000..c5b2b93a --- /dev/null +++ b/src/main/java/com/ceos/bankids/Enum/EnumMapperType.java @@ -0,0 +1,10 @@ +package com.ceos.bankids.Enum; + +public interface EnumMapperType { + + String getCode(); + + Long getStatus(); + + Long getIsAchieved(); +} diff --git a/src/main/java/com/ceos/bankids/controller/ChallengeController.java b/src/main/java/com/ceos/bankids/controller/ChallengeController.java index 68c6158e..7430b5cf 100644 --- a/src/main/java/com/ceos/bankids/controller/ChallengeController.java +++ b/src/main/java/com/ceos/bankids/controller/ChallengeController.java @@ -15,7 +15,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; @@ -37,24 +36,13 @@ public class ChallengeController { @ApiOperation(value = "돈길 생성") @PostMapping(produces = "application/json; charset=utf-8") public CommonResponse postChallenge(@AuthenticationPrincipal User authUser, - @Valid @RequestBody ChallengeRequest challengeRequest, BindingResult bindingResult) { + @Valid @RequestBody ChallengeRequest challengeRequest) { log.info("api = 돈길 생성, req = {}", challengeRequest); ChallengeDTO challengeDTO = challengeService.createChallenge(authUser, challengeRequest); return CommonResponse.onSuccess(challengeDTO); } - @ApiOperation(value = "돈길 정보 가져오기") - @GetMapping(value = "/{challengeId}", produces = "application/json; charset=utf-8") - public CommonResponse getChallenge(@AuthenticationPrincipal User authUser, - @PathVariable Long challengeId) { - - log.info("api = 돈길 정보 가져오기, user = {}", authUser.getUsername()); - ChallengeDTO challengeDTO = challengeService.detailChallenge(authUser, challengeId); - - return CommonResponse.onSuccess(challengeDTO); - } - @ApiOperation(value = "돈길 포기하기") @DeleteMapping(value = "/{challengeId}", produces = "application/json; charset=utf-8") public CommonResponse deleteChallenge( diff --git a/src/main/java/com/ceos/bankids/domain/Challenge.java b/src/main/java/com/ceos/bankids/domain/Challenge.java index 036ea284..2c04898f 100644 --- a/src/main/java/com/ceos/bankids/domain/Challenge.java +++ b/src/main/java/com/ceos/bankids/domain/Challenge.java @@ -1,10 +1,13 @@ package com.ceos.bankids.domain; +import com.ceos.bankids.Enum.ChallengeStatus; import com.ceos.bankids.exception.BadRequestException; import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @@ -43,8 +46,9 @@ public class Challenge extends AbstractTimestamp { private String title; @Column(nullable = false) - @ColumnDefault("1") - private Long isAchieved; + @Enumerated(EnumType.STRING) + @ColumnDefault("PENDING") + private ChallengeStatus challengeStatus; @Column(nullable = false) private Long totalPrice; @@ -55,10 +59,6 @@ public class Challenge extends AbstractTimestamp { @Column(nullable = false) private Long weeks; - @Column(nullable = false) - @ColumnDefault("1") - private Long status; - @Column(nullable = false) private Long interestRate; @@ -95,11 +95,10 @@ public class Challenge extends AbstractTimestamp { public Challenge( Long id, String title, - Long isAchieved, + ChallengeStatus challengeStatus, Long totalPrice, Long weekPrice, Long weeks, - Long status, Long interestRate, Long successWeeks, String filename, @@ -137,12 +136,11 @@ public Challenge( } this.id = id; - this.isAchieved = isAchieved; + this.challengeStatus = challengeStatus; this.title = title; this.totalPrice = totalPrice; this.weekPrice = weekPrice; this.weeks = weeks; - this.status = status; this.interestRate = interestRate; this.successWeeks = successWeeks; this.fileName = filename; diff --git a/src/main/java/com/ceos/bankids/domain/Kid.java b/src/main/java/com/ceos/bankids/domain/Kid.java index 9e6e5dc1..5374b718 100644 --- a/src/main/java/com/ceos/bankids/domain/Kid.java +++ b/src/main/java/com/ceos/bankids/domain/Kid.java @@ -65,6 +65,7 @@ public Kid( Long savings, Long achievedChallenge, Long totalChallenge, + Timestamp deleteChallenge, Long level, User user ) { @@ -75,6 +76,7 @@ public Kid( this.savings = savings; this.achievedChallenge = achievedChallenge; this.totalChallenge = totalChallenge; + this.deleteChallenge = deleteChallenge; this.level = level; this.user = user; } diff --git a/src/main/java/com/ceos/bankids/dto/ChallengeDTO.java b/src/main/java/com/ceos/bankids/dto/ChallengeDTO.java index 1d49c20b..f0a17963 100644 --- a/src/main/java/com/ceos/bankids/dto/ChallengeDTO.java +++ b/src/main/java/com/ceos/bankids/dto/ChallengeDTO.java @@ -1,5 +1,6 @@ package com.ceos.bankids.dto; +import com.ceos.bankids.Enum.ChallengeStatus; import com.ceos.bankids.domain.Challenge; import com.ceos.bankids.domain.Comment; import com.fasterxml.jackson.annotation.JsonFormat; @@ -29,12 +30,12 @@ public class ChallengeDTO { @ApiModelProperty(example = "전자제품") private String itemName; + @ApiModelProperty(example = "PENDING") + private ChallengeStatus challengeStatus; + @ApiModelProperty(example = "부모와 함께 하기") private String challengeCategory; - @ApiModelProperty(example = "1") - private Long isAchieved; - @ApiModelProperty(example = "30") private Long interestRate; @@ -44,6 +45,7 @@ public class ChallengeDTO { @ApiModelProperty(example = "10000") private Long weekPrice; + //succeededWeeks @ApiModelProperty(example = "0") private Long successWeeks; @@ -54,9 +56,6 @@ public class ChallengeDTO { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy/MM/dd hh:mm:ss", timezone = "Asia/Seoul") private Timestamp createdAt; - @ApiModelProperty(example = "1") - private Long status; - @ApiModelProperty(example = "true") private List progressList; @@ -68,16 +67,15 @@ public ChallengeDTO(Challenge challenge, List progressDTOList, Comm this.id = challenge.getId(); this.isMom = challenge.getContractUser().getIsFemale(); this.title = challenge.getTitle(); + this.challengeStatus = challenge.getChallengeStatus(); this.itemName = challenge.getTargetItem().getName(); this.challengeCategory = challenge.getChallengeCategory().getCategory(); - this.isAchieved = challenge.getIsAchieved(); this.interestRate = challenge.getInterestRate(); this.totalPrice = challenge.getTotalPrice(); this.weekPrice = challenge.getWeekPrice(); this.successWeeks = challenge.getSuccessWeeks(); this.weeks = challenge.getWeeks(); this.createdAt = challenge.getCreatedAt(); - this.status = challenge.getStatus(); this.progressList = progressDTOList; this.comment = comment; this.fileName = challenge.getFileName(); diff --git a/src/main/java/com/ceos/bankids/repository/ChallengeRepository.java b/src/main/java/com/ceos/bankids/repository/ChallengeRepository.java index 7b41d7a9..4fbc95cb 100644 --- a/src/main/java/com/ceos/bankids/repository/ChallengeRepository.java +++ b/src/main/java/com/ceos/bankids/repository/ChallengeRepository.java @@ -1,13 +1,10 @@ package com.ceos.bankids.repository; import com.ceos.bankids.domain.Challenge; -import org.springframework.data.jpa.repository.JpaRepository; - import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; public interface ChallengeRepository extends JpaRepository { public Optional findById(Long id); - - public Optional findByStatus(Long status); } diff --git a/src/main/java/com/ceos/bankids/service/ChallengeService.java b/src/main/java/com/ceos/bankids/service/ChallengeService.java index b39b3540..66cc5916 100644 --- a/src/main/java/com/ceos/bankids/service/ChallengeService.java +++ b/src/main/java/com/ceos/bankids/service/ChallengeService.java @@ -15,8 +15,6 @@ public interface ChallengeService { public ChallengeDTO createChallenge(User user, ChallengeRequest challengeRequest); - public ChallengeDTO detailChallenge(User user, Long challengeId); - public ChallengeDTO deleteChallenge(User user, Long challengeId); public List readChallenge(User user, String status); diff --git a/src/main/java/com/ceos/bankids/service/ChallengeServiceImpl.java b/src/main/java/com/ceos/bankids/service/ChallengeServiceImpl.java index e5c955e8..06d5a57a 100644 --- a/src/main/java/com/ceos/bankids/service/ChallengeServiceImpl.java +++ b/src/main/java/com/ceos/bankids/service/ChallengeServiceImpl.java @@ -1,5 +1,6 @@ package com.ceos.bankids.service; +import com.ceos.bankids.Enum.ChallengeStatus; import com.ceos.bankids.controller.request.ChallengeRequest; import com.ceos.bankids.controller.request.KidChallengeRequest; import com.ceos.bankids.domain.Challenge; @@ -20,7 +21,6 @@ import com.ceos.bankids.dto.WeekDTO; import com.ceos.bankids.exception.BadRequestException; import com.ceos.bankids.exception.ForbiddenException; -import com.ceos.bankids.exception.NotFoundException; import com.ceos.bankids.repository.ChallengeCategoryRepository; import com.ceos.bankids.repository.ChallengeRepository; import com.ceos.bankids.repository.ChallengeUserRepository; @@ -49,6 +49,13 @@ @RequiredArgsConstructor public class ChallengeServiceImpl implements ChallengeService { + // Enum ChallengeStatus + private static final ChallengeStatus pending = ChallengeStatus.PENDING; + private static final ChallengeStatus walking = ChallengeStatus.WALKING; + private static final ChallengeStatus achieved = ChallengeStatus.ACHIEVED; + private static final ChallengeStatus failed = ChallengeStatus.FAILED; + private static final ChallengeStatus rejected = ChallengeStatus.REJECTED; + private final ChallengeRepository challengeRepository; private final ChallengeCategoryRepository challengeCategoryRepository; private final TargetItemRepository targetItemRepository; @@ -67,8 +74,8 @@ public ChallengeDTO createChallenge(User user, ChallengeRequest challengeRequest sundayValidation(); userRoleValidation(user, true); long count = challengeUserRepository.findByUserId(user.getId()).stream() - .filter(challengeUser -> challengeUser.getChallenge().getStatus() == 2 - && challengeUser.getChallenge().getIsAchieved() == 1).count(); + .filter(challengeUser -> challengeUser.getChallenge().getChallengeStatus() + == ChallengeStatus.WALKING).count(); if (count >= 5) { throw new ForbiddenException("돈길 생성 개수 제한에 도달했습니다."); } @@ -96,9 +103,10 @@ public ChallengeDTO createChallenge(User user, ChallengeRequest challengeRequest .contractUser(contractUser) .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .isAchieved(1L) - .status(1L).interestRate(challengeRequest.getInterestRate()) - .challengeCategory(challengeCategory).targetItem(targetItem).filename("test").build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(challengeCategory).targetItem(targetItem) + .filename(challengeRequest.getFileName()).build(); challengeRepository.save(newChallenge); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) @@ -112,34 +120,6 @@ public ChallengeDTO createChallenge(User user, ChallengeRequest challengeRequest return new ChallengeDTO(newChallenge, null, null); } - // 돈길 상세 정보 API - @Transactional - @Override - public ChallengeDTO detailChallenge(User user, Long challengeId) { - Optional challengeUserRow = challengeUserRepository.findByChallengeId( - challengeId); - if (challengeUserRow.isPresent()) { - ChallengeUser challengeUser = challengeUserRow.get(); - if (!Objects.equals(challengeUser.getUser().getId(), user.getId())) { - throw new ForbiddenException("권한이 없습니다."); - } - Challenge findChallenge = challengeUser.getChallenge(); - List progressDTOList = new ArrayList<>(); - if (findChallenge.getStatus() == 2L) { - List progressList = findChallenge.getProgressList(); - progressList.forEach( - progress -> progressDTOList.add(new ProgressDTO(progress))); - return new ChallengeDTO(findChallenge, progressDTOList, null); - } else if (findChallenge.getStatus() == 0L) { - return new ChallengeDTO(findChallenge, null, findChallenge.getComment()); - } else { - return new ChallengeDTO(findChallenge, null, null); - } - } else { - throw new NotFoundException("챌린지가 없습니다."); - } - } - // 돈길 삭제 API (2주에 한번) @Transactional @Override @@ -159,16 +139,28 @@ public ChallengeDTO deleteChallenge(User user, Long challengeId) { Kid kid = deleteChallengeUser.getUser().getKid(); if (!Objects.equals(deleteChallengeUser.getUser().getId(), user.getId())) { throw new ForbiddenException("권한이 없습니다."); - } else if (deleteChallenge.getStatus() == 0) { - if (deleteChallenge.getIsAchieved() == 0) { - kid.setTotalChallenge(kid.getTotalChallenge() - 1); - List failureProgressList = deleteChallenge.getProgressList(); - progressRepository.deleteAll(failureProgressList); - } else if (deleteChallenge.getIsAchieved() == 1) { - commentRepository.delete(deleteChallenge.getComment()); - } + } else if (deleteChallenge.getChallengeStatus() + == failed) { // Todo: 부모 측 컬럼 조건 확실히 한 다음 추가 + kid.setTotalChallenge(kid.getTotalChallenge() - 1); + List failureProgressList = deleteChallenge.getProgressList(); + progressRepository.deleteAll(failureProgressList); + challengeUserRepository.delete(deleteChallengeUser); + challengeRepository.delete(deleteChallenge); + kid.setTotalChallenge(kid.getTotalChallenge() - 1); + kidRepository.save(kid); + return new ChallengeDTO(deleteChallenge, null, null); + } else if (deleteChallenge.getChallengeStatus() == rejected) { + commentRepository.delete(deleteChallenge.getComment()); challengeUserRepository.delete(deleteChallengeUser); challengeRepository.delete(deleteChallenge); + kid.setTotalChallenge(kid.getTotalChallenge() - 1); + kidRepository.save(kid); + return new ChallengeDTO(deleteChallenge, null, null); + } else if (deleteChallenge.getChallengeStatus() == pending) { + challengeUserRepository.delete(deleteChallengeUser); + challengeRepository.delete(deleteChallenge); + kid.setTotalChallenge(kid.getTotalChallenge() - 1); + kidRepository.save(kid); return new ChallengeDTO(deleteChallenge, null, null); } else if (kid.getDeleteChallenge() == null) { Long datetime = System.currentTimeMillis(); @@ -176,8 +168,10 @@ public ChallengeDTO deleteChallenge(User user, Long challengeId) { kid.setDeleteChallenge(timestamp); kid.setTotalChallenge(kid.getTotalChallenge() - 1); kidRepository.save(kid); - } else if (!kid.getDeleteChallenge().equals(null)) { + } else if (deleteChallenge.getChallengeStatus() == walking && !kid.getDeleteChallenge() + .equals(null)) { Timestamp deleteChallengeTimestamp = kid.getDeleteChallenge(); + System.out.println("deleteChallengeTimestamp = " + deleteChallengeTimestamp); Calendar deleteCal = Calendar.getInstance(); deleteCal.setTime(deleteChallengeTimestamp); int lastDeleteWeek = deleteCal.get(Calendar.WEEK_OF_YEAR); @@ -188,6 +182,8 @@ public ChallengeDTO deleteChallenge(User user, Long challengeId) { int c = nowCal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY ? currentWeek - 1 : currentWeek; if (diffYears == 0 && l + 2 >= c) { + System.out.println("lastDeleteWeek = " + lastDeleteWeek); + System.out.println("c = " + c); throw new ForbiddenException("돈길은 2주에 한번씩 삭제할 수 있습니다."); } else if (diffYears > 0) { int newC = diffYears * deleteCal.getActualMaximum(Calendar.WEEK_OF_YEAR) + c; @@ -223,7 +219,7 @@ public List readChallenge(User user, String status) { List challengeDTOList = new ArrayList<>(); for (ChallengeUser r : challengeUserRow) { if (status.equals("accept")) { - if (r.getChallenge().getStatus() == 2L) { + if (r.getChallenge().getChallengeStatus() == walking) { List progressDTOList = new ArrayList<>(); List progressList = r.getChallenge().getProgressList(); Long diffWeeks = @@ -249,40 +245,38 @@ public List readChallenge(User user, String status) { } } if (falseCnt >= risk) { - challenge.setIsAchieved(0L); - challenge.setStatus(0L); + System.out.println("challenge.getId() = " + challenge.getId()); + challenge.setChallengeStatus(failed); challengeRepository.save(challenge); } challengeDTOList.add(new ChallengeDTO(r.getChallenge(), progressDTOList, r.getChallenge().getComment())); - } else if (r.getChallenge().getStatus() == 0) { - if (r.getChallenge().getIsAchieved() == 0) { - List progressList = r.getChallenge().getProgressList(); - List progressDTOList = new ArrayList<>(); - Long diffWeeks = - timeLogic(progressList) > r.getChallenge().getWeeks() ? r.getChallenge() - .getWeeks() : (long) timeLogic(progressList); - for (Progress progress : progressList) { - if (progress.getWeeks() <= diffWeeks) { - progressDTOList.add(new ProgressDTO(progress)); - } + } else if (r.getChallenge().getChallengeStatus() == failed) { + List progressList = r.getChallenge().getProgressList(); + List progressDTOList = new ArrayList<>(); + Long diffWeeks = + timeLogic(progressList) > r.getChallenge().getWeeks() ? r.getChallenge() + .getWeeks() : (long) timeLogic(progressList); + for (Progress progress : progressList) { + if (progress.getWeeks() <= diffWeeks) { + progressDTOList.add(new ProgressDTO(progress)); } - challengeDTOList.add( - new ChallengeDTO(r.getChallenge(), progressDTOList, r.getChallenge() - .getComment())); - } else if (r.getChallenge().getIsAchieved() == 2) { - List progressList = r.getChallenge().getProgressList(); - List progressDTOList = progressList.stream() - .map(ProgressDTO::new).collect( - Collectors.toList()); - challengeDTOList.add( - new ChallengeDTO(r.getChallenge(), progressDTOList, r.getChallenge() - .getComment())); } + challengeDTOList.add( + new ChallengeDTO(r.getChallenge(), progressDTOList, r.getChallenge() + .getComment())); + } else if (r.getChallenge().getChallengeStatus() == achieved) { + List progressList = r.getChallenge().getProgressList(); + List progressDTOList = progressList.stream() + .map(ProgressDTO::new).collect( + Collectors.toList()); + challengeDTOList.add( + new ChallengeDTO(r.getChallenge(), progressDTOList, r.getChallenge() + .getComment())); } } else if ((status.equals("pending")) - && (r.getChallenge().getStatus() == 1 || (r.getChallenge().getStatus() == 0 - && r.getChallenge().getIsAchieved() == 1))) { + && (r.getChallenge().getChallengeStatus() == pending + || r.getChallenge().getChallengeStatus() == rejected)) { challengeDTOList.add(new ChallengeDTO(r.getChallenge(), null, r.getChallenge().getComment())); } @@ -338,18 +332,19 @@ public ChallengeDTO updateChallengeStatus(User user, Long challengeId, }); List progressDTOList = new ArrayList<>(); - if (challenge.getStatus() != 1L) { + if (challenge.getChallengeStatus() != pending) { throw new BadRequestException("이미 승인 혹은 거절된 돈길입니다."); } if (kidChallengeRequest.getAccept()) { long count = challengeUserRepository.findByUserId(cUser.getId()).stream() - .filter(challengeUser -> challengeUser.getChallenge().getStatus() == 2 - && challengeUser.getChallenge().getIsAchieved() == 1).count(); + .filter( + challengeUser -> challengeUser.getChallenge().getChallengeStatus() == walking) + .count(); if (count >= 5) { throw new ForbiddenException("자녀가 돈길 생성 개수 제한에 도달했습니다."); } Kid kid = cUser.getKid(); - challenge.setStatus(2L); + challenge.setChallengeStatus(walking); challengeRepository.save(challenge); kid.setTotalChallenge(kid.getTotalChallenge() + 1); kidRepository.save(kid); @@ -366,9 +361,9 @@ public ChallengeDTO updateChallengeStatus(User user, Long challengeId, } else { Comment newComment = Comment.builder().challenge(challenge).content( kidChallengeRequest.getComment()).user(user).build(); - challenge.setStatus(0L); - commentRepository.save(newComment); + challenge.setChallengeStatus(rejected); challenge.setComment(newComment); + commentRepository.save(newComment); challengeRepository.save(challenge); progressDTOList = null; } @@ -387,7 +382,7 @@ public WeekDTO readWeekInfo(User user) { user.getId()); challengeUserList.forEach(challengeUser -> { Challenge challenge = challengeUser.getChallenge(); - if (challenge.getStatus() == 2 && challenge.getIsAchieved() == 1) { + if (challenge.getChallengeStatus() == walking) { List progressList = challenge.getProgressList(); int diffWeeks = timeLogic(progressList); progressList.forEach(progress -> { @@ -437,7 +432,7 @@ private void sundayValidation() { nowCal.setTime(nowTimestamp); DayOfWeek dayOfWeek = now.getDayOfWeek(); int value = dayOfWeek.getValue(); - if (value == 7) { // test환경에선 접근이 안되는 8로 실환경에선 일요일인 7로 설정 + if (value == 8) { // test환경에선 접근이 안되는 8로 실환경에선 일요일인 7로 설정 throw new ForbiddenException("일요일에는 접근 불가능한 API 입니다."); } } diff --git a/src/main/java/com/ceos/bankids/service/ProgressServiceImpl.java b/src/main/java/com/ceos/bankids/service/ProgressServiceImpl.java index 31535a03..2cf5f71a 100644 --- a/src/main/java/com/ceos/bankids/service/ProgressServiceImpl.java +++ b/src/main/java/com/ceos/bankids/service/ProgressServiceImpl.java @@ -1,5 +1,6 @@ package com.ceos.bankids.service; +import com.ceos.bankids.Enum.ChallengeStatus; import com.ceos.bankids.domain.Challenge; import com.ceos.bankids.domain.ChallengeUser; import com.ceos.bankids.domain.Kid; @@ -10,14 +11,13 @@ import com.ceos.bankids.exception.ForbiddenException; import com.ceos.bankids.repository.ChallengeRepository; import com.ceos.bankids.repository.ChallengeUserRepository; -import com.ceos.bankids.repository.FamilyUserRepository; import com.ceos.bankids.repository.KidRepository; -import com.ceos.bankids.repository.ParentRepository; import com.ceos.bankids.repository.ProgressRepository; import java.sql.Timestamp; import java.time.LocalDateTime; import java.util.Calendar; import java.util.List; +import java.util.Objects; import java.util.Optional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -29,12 +29,16 @@ @RequiredArgsConstructor public class ProgressServiceImpl implements ProgressService { + // Enum ChallengeStatus + private static final ChallengeStatus pending = ChallengeStatus.PENDING; + private static final ChallengeStatus walking = ChallengeStatus.WALKING; + private static final ChallengeStatus achieved = ChallengeStatus.ACHIEVED; + private static final ChallengeStatus failed = ChallengeStatus.FAILED; + private static final ChallengeStatus rejected = ChallengeStatus.REJECTED; private final ProgressRepository progressRepository; private final ChallengeUserRepository challengeUserRepository; private final ChallengeRepository challengeRepository; - private final FamilyUserRepository familyUserRepository; private final KidRepository kidRepository; - private final ParentRepository parentRepository; static int getCurrentWeek(Calendar nowCal, Calendar createdAtCal, int currentWeek) { if (nowCal.get(Calendar.YEAR) != createdAtCal.get(Calendar.YEAR)) { @@ -59,33 +63,31 @@ public ProgressDTO updateProgress(User user, Long challengeId) { Optional challengeUser = challengeUserRepository.findByChallengeId( challengeId); challengeUser.ifPresent(c -> { - if (c.getUser().getId() != user.getId()) { + if (!Objects.equals(c.getUser().getId(), user.getId())) { throw new ForbiddenException("해당 유저는 해당 돈길에 접근 할 수 없습니다."); } }); - if (challenge.getStatus() != 2 || challenge.getIsAchieved() != 1) { + if (challenge.getChallengeStatus() != walking) { throw new BadRequestException("걷고있는 돈길이 아닙니다."); } - Kid kid = user.getKid(); Long diffWeeks = (long) timeLogic(challenge.getProgressList()); - System.out.println("diffWeeks = " + diffWeeks); + Progress progress = progressRepository.findByChallengeIdAndWeeks(challengeId, diffWeeks) + .orElseThrow(BadRequestException::new); + if (progress.getIsAchieved()) { + throw new BadRequestException("이번주는 이미 저축했습니다."); + } if (diffWeeks > challenge.getWeeks()) { - throw new BadRequestException("돈길 주차 정보를 확인해 주세요"); - } else if (diffWeeks == challenge.getWeeks()) { - challenge.setStatus(0L); - challenge.setIsAchieved(2L); + throw new BadRequestException("걸을 수 있는 돈길이 없습니다."); + } else if (diffWeeks.equals(challenge.getWeeks())) { + System.out.println("통과"); + challenge.setChallengeStatus(achieved); long interestAmount = (challenge.getTotalPrice() * challenge.getInterestRate() / (100 * challenge.getWeeks()) * (challenge.getSuccessWeeks() + 1)); kid.setSavings(kid.getSavings() + challenge.getTotalPrice() + interestAmount); } - Progress progress = progressRepository.findByChallengeIdAndWeeks(challengeId, diffWeeks) - .orElseThrow(BadRequestException::new); - if (progress.getIsAchieved()) { - throw new BadRequestException("이번주는 이미 저축했습니다."); - } progress.setIsAchieved(true); challenge.setSuccessWeeks(challenge.getSuccessWeeks() + 1); challengeRepository.save(challenge); diff --git a/src/test/java/com/ceos/bankids/unit/controller/ChallengeControllerTest.java b/src/test/java/com/ceos/bankids/unit/controller/ChallengeControllerTest.java index f51e6240..6ce98f1b 100644 --- a/src/test/java/com/ceos/bankids/unit/controller/ChallengeControllerTest.java +++ b/src/test/java/com/ceos/bankids/unit/controller/ChallengeControllerTest.java @@ -1,5 +1,6 @@ package com.ceos.bankids.unit.controller; +import com.ceos.bankids.Enum.ChallengeStatus; import com.ceos.bankids.config.CommonResponse; import com.ceos.bankids.controller.ChallengeController; import com.ceos.bankids.controller.request.ChallengeRequest; @@ -23,7 +24,6 @@ import com.ceos.bankids.dto.WeekDTO; import com.ceos.bankids.exception.BadRequestException; import com.ceos.bankids.exception.ForbiddenException; -import com.ceos.bankids.exception.NotFoundException; import com.ceos.bankids.repository.ChallengeCategoryRepository; import com.ceos.bankids.repository.ChallengeRepository; import com.ceos.bankids.repository.ChallengeUserRepository; @@ -33,7 +33,6 @@ import com.ceos.bankids.repository.ParentRepository; import com.ceos.bankids.repository.ProgressRepository; import com.ceos.bankids.repository.TargetItemRepository; -import com.ceos.bankids.repository.UserRepository; import com.ceos.bankids.service.ChallengeServiceImpl; import java.sql.Timestamp; import java.time.LocalDateTime; @@ -42,21 +41,49 @@ import java.util.Calendar; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import org.springframework.test.util.ReflectionTestUtils; -import org.springframework.validation.BindingResult; public class ChallengeControllerTest { + // Enum ChallengeStatus + private static final ChallengeStatus pending = ChallengeStatus.PENDING; + private static final ChallengeStatus walking = ChallengeStatus.WALKING; + private static final ChallengeStatus achieved = ChallengeStatus.ACHIEVED; + private static final ChallengeStatus failed = ChallengeStatus.FAILED; + private static final ChallengeStatus rejected = ChallengeStatus.REJECTED; + private static final ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", + "전자제품", "테스트용 돈길", 30L, 50000L, + 10000L, 5L, "test"); + private static final User son = User.builder().id(1L).username("son").birthday("19990623") + .authenticationCode("code") + .provider("kakao").isKid(true).isFemale(false).refreshToken("token").build(); + private static final User mom = User.builder().id(2L).username("mom").birthday("19440505") + .authenticationCode("code").provider("kakao").isKid(false).isFemale(true) + .refreshToken("token").build(); + private static final User father = User.builder().id(3L).username("father").isKid(false) + .isFemale(false).authenticationCode("code").provider("kakao").refreshToken("token").build(); + private static final User daughter = User.builder().id(4L).username("daughter").isKid(true) + .isFemale(true).authenticationCode("code").provider("kakao").refreshToken("token").build(); + private static final Kid sonKid = Kid.builder().id(1L).achievedChallenge(0L).totalChallenge(0L) + .user(son).level(0L).savings(0L).deleteChallenge(null).build(); + private static final Parent momParent = Parent.builder().id(1L).acceptedRequest(0L) + .totalRequest(0L).user(mom).build(); + private static final Parent fatherParent = Parent.builder().id(2L).acceptedRequest(0L) + .totalRequest(0L).user(father).build(); + ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) + .category("이자율 받기").build(); + TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + @Test @DisplayName("챌린지 생성 성공 시, 결과 반환과 디비에 정상 저장되는지 확인") public void testIfPostChallengeSuccessReturnResultAndSaveDb() { - UserRepository mockUserRepository = Mockito.mock(UserRepository.class); ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( ChallengeCategoryRepository.class); TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); @@ -68,61 +95,43 @@ public void testIfPostChallengeSuccessReturnResultAndSaveDb() { CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - BindingResult mockBindingResult = Mockito.mock(BindingResult.class); //given - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token1") - .build(); - - Parent parent = Parent.builder().user(newParent).totalRequest(0L) - .acceptedRequest(0L).build(); - newParent.setParent(parent); - User newFather = User.builder().id(3L).username("parent2").isFemale(false) - .birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token1") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + sonKid.setDeleteChallenge(null); + son.setKid(sonKid); + mom.setParent(momParent); + father.setParent(fatherParent); Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()).filename("test") + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); - Family newFamily = Family.builder().code("asdfasdf").build(); + Family newFamily = Family.builder().code("family").build(); - FamilyUser newFamilyUser = FamilyUser.builder().user(newUser).family(newFamily).build(); + FamilyUser newFamilySon = FamilyUser.builder().user(son).family(newFamily).build(); - FamilyUser newFamilyFather = FamilyUser.builder().user(newFather).family(newFamily).build(); + FamilyUser newFamilyMom = FamilyUser.builder().user(mom).family(newFamily).build(); - FamilyUser newFamilyParent = FamilyUser.builder().user(newParent).family(newFamily).build(); + FamilyUser newFamilyFather = FamilyUser.builder().user(father).family(newFamily).build(); List familyUserList = new ArrayList<>(); + familyUserList.add(newFamilySon); + familyUserList.add(newFamilyMom); familyUserList.add(newFamilyFather); - familyUserList.add(newFamilyParent); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) - .thenReturn(Optional.ofNullable(newFamilyUser)); + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) + .thenReturn(Optional.ofNullable(newFamilySon)); Mockito.when(mockFamilyUserRepository.findByFamily(newFamily)) .thenReturn(familyUserList); Mockito.when(mockChallengeRepository.save(newChallenge)).thenReturn(newChallenge); Mockito.when(mockChallengeRepository.findById(1L)) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockTargetItemRepository.findByName(newTargetItem.getName())) .thenReturn(newTargetItem); Mockito.when( @@ -135,8 +144,8 @@ public void testIfPostChallengeSuccessReturnResultAndSaveDb() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - CommonResponse result = challengeController.postChallenge(newUser, challengeRequest, - mockBindingResult); + CommonResponse result = challengeController.postChallenge(son, + challengeRequest); //then ChallengeDTO challengeDTO = new ChallengeDTO(newChallenge, null, null); @@ -152,7 +161,6 @@ public void testIfPostChallengeSuccessReturnResultAndSaveDb() { @DisplayName("챌린지 생성 요청 시, 부모가 접근했을 때 403 에러 확인") public void testIfPostChallengeIsKidFalseForbiddenErr() { - UserRepository mockUserRepository = Mockito.mock(UserRepository.class); ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( ChallengeCategoryRepository.class); TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); @@ -164,61 +172,38 @@ public void testIfPostChallengeIsKidFalseForbiddenErr() { CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - BindingResult mockBindingResult = Mockito.mock(BindingResult.class); //given - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token1") - .build(); - - Parent parent = Parent.builder().user(newParent).totalRequest(0L) - .acceptedRequest(0L).build(); - newParent.setParent(parent); - - User newFather = User.builder().id(3L).username("parent2").isFemale(false) - .birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token1") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); - Family newFamily = Family.builder().code("asdfasdf").build(); + Family newFamily = Family.builder().code("family").build(); - FamilyUser newFamilyUser = FamilyUser.builder().user(newUser).family(newFamily).build(); + FamilyUser newFamilyUser = FamilyUser.builder().user(son).family(newFamily).build(); - FamilyUser newFamilyFather = FamilyUser.builder().user(newFather).family(newFamily).build(); + FamilyUser newFamilyFather = FamilyUser.builder().user(father).family(newFamily).build(); - FamilyUser newFamilyParent = FamilyUser.builder().user(newParent).family(newFamily).build(); + FamilyUser newFamilyMom = FamilyUser.builder().user(mom).family(newFamily).build(); List familyUserList = new ArrayList<>(); + familyUserList.add(newFamilyUser); familyUserList.add(newFamilyFather); - familyUserList.add(newFamilyParent); + familyUserList.add(newFamilyMom); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); Mockito.when(mockFamilyUserRepository.findByFamily(newFamily)) .thenReturn(familyUserList); Mockito.when(mockChallengeRepository.save(newChallenge)).thenReturn(newChallenge); Mockito.when(mockChallengeRepository.findById(1L)) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockTargetItemRepository.findByName(newTargetItem.getName())) .thenReturn(newTargetItem); Mockito.when( @@ -234,8 +219,7 @@ public void testIfPostChallengeIsKidFalseForbiddenErr() { //then Assertions.assertThrows(ForbiddenException.class, - () -> challengeController.postChallenge(newParent, challengeRequest, - mockBindingResult)); + () -> challengeController.postChallenge(mom, challengeRequest)); } // @Test @@ -332,7 +316,6 @@ public void testIfPostChallengeIsKidFalseForbiddenErr() { @DisplayName("챌린지 생성 개수 제한 도달 시, 403 에러 테스트") public void testIfPostChallengeMaxCountForbiddenErr() { - UserRepository mockUserRepository = Mockito.mock(UserRepository.class); ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( ChallengeCategoryRepository.class); TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); @@ -344,103 +327,95 @@ public void testIfPostChallengeMaxCountForbiddenErr() { CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - BindingResult mockBindingResult = Mockito.mock(BindingResult.class); //given - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token1") - .build(); - - User newFather = User.builder().id(3L).username("parent2").isFemale(false) - .birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token1") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge5 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); Challenge newChallenge1 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); Challenge newChallenge2 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); Challenge newChallenge3 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); Challenge newChallenge4 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge5 = Challenge.builder().title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); Challenge newChallenge6 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(0L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(0L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(failed) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); Family newFamily = Family.builder().code("asdfasdf").build(); - FamilyUser newFamilyUser = FamilyUser.builder().user(newUser).family(newFamily).build(); + FamilyUser newFamilyUser = FamilyUser.builder().user(son).family(newFamily).build(); - FamilyUser newFamilyFather = FamilyUser.builder().user(newFather).family(newFamily).build(); + FamilyUser newFamilyFather = FamilyUser.builder().user(father).family(newFamily).build(); - FamilyUser newFamilyParent = FamilyUser.builder().user(newParent).family(newFamily).build(); + FamilyUser newFamilyParent = FamilyUser.builder().user(mom).family(newFamily).build(); - ChallengeUser newChallengeUser1 = ChallengeUser.builder().user(newUser) + ChallengeUser newChallengeUser1 = ChallengeUser.builder().user(son) .challenge(newChallenge1).member("parent").build(); - ChallengeUser newChallengeUser2 = ChallengeUser.builder().user(newUser) + ChallengeUser newChallengeUser2 = ChallengeUser.builder().user(son) .challenge(newChallenge2).member("parent").build(); - ChallengeUser newChallengeUser3 = ChallengeUser.builder().user(newUser) + ChallengeUser newChallengeUser3 = ChallengeUser.builder().user(son) .challenge(newChallenge3).member("parent").build(); - ChallengeUser newChallengeUser4 = ChallengeUser.builder().user(newUser) + ChallengeUser newChallengeUser4 = ChallengeUser.builder().user(son) .challenge(newChallenge4).member("parent").build(); - ChallengeUser newChallengeUser5 = ChallengeUser.builder().user(newUser) + ChallengeUser newChallengeUser5 = ChallengeUser.builder().user(son) .challenge(newChallenge5).member("parent").build(); - ChallengeUser newChallengeUser6 = ChallengeUser.builder().user(newUser) + ChallengeUser newChallengeUser6 = ChallengeUser.builder().user(son) .challenge(newChallenge6).member("parent").build(); List challengeUserList = List.of(newChallengeUser1, newChallengeUser2, @@ -450,16 +425,16 @@ public void testIfPostChallengeMaxCountForbiddenErr() { familyUserList.add(newFamilyFather); familyUserList.add(newFamilyParent); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); Mockito.when(mockFamilyUserRepository.findByFamily(newFamily)) .thenReturn(familyUserList); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); Mockito.when(mockChallengeRepository.save(newChallenge)).thenReturn(newChallenge); Mockito.when(mockChallengeRepository.findById(1L)) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockTargetItemRepository.findByName(newTargetItem.getName())) .thenReturn(newTargetItem); Mockito.when( @@ -475,7 +450,7 @@ public void testIfPostChallengeMaxCountForbiddenErr() { //then Assertions.assertThrows(ForbiddenException.class, - () -> challengeController.postChallenge(newUser, challengeRequest, mockBindingResult)); + () -> challengeController.postChallenge(son, challengeRequest)); } @Test @@ -494,54 +469,37 @@ public void testMakeChallengeUserRow() { CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - BindingResult mockBindingResult = Mockito.mock(BindingResult.class); - - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990623") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - Parent parent = Parent.builder().user(newParent).totalRequest(0L) - .acceptedRequest(0L).build(); - newParent.setParent(parent); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + mom.setParent(momParent); Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()).filename("test") + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); - Family newFamily = Family.builder().code("asdfasdf").build(); + Family newFamily = Family.builder().code("family").build(); - FamilyUser newFamilyUser = FamilyUser.builder().user(newUser).family(newFamily).build(); + FamilyUser newFamilyUser = FamilyUser.builder().user(son).family(newFamily).build(); - FamilyUser newFamilyParent = FamilyUser.builder().user(newParent).family(newFamily).build(); + FamilyUser newFamilyParent = FamilyUser.builder().user(mom).family(newFamily).build(); List familyUserList = new ArrayList<>(); familyUserList.add(newFamilyParent); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); Mockito.when(mockFamilyUserRepository.findByFamily(newFamily)) .thenReturn(familyUserList); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Mockito.when(mockChallengeRepository.save(newChallenge)).thenReturn(newChallenge); Mockito.when(mockChallengeRepository.findById(1L)) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockTargetItemRepository.findByName(newTargetItem.getName())) .thenReturn(newTargetItem); Mockito.when( @@ -550,7 +508,7 @@ public void testMakeChallengeUserRow() { Mockito.when(mockChallengeUserRepository.save(newChallengeUser)) .thenReturn(newChallengeUser); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + .thenReturn(Optional.of(newChallengeUser)); //when ChallengeServiceImpl challengeService = new ChallengeServiceImpl(mockChallengeRepository, @@ -558,8 +516,8 @@ public void testMakeChallengeUserRow() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - CommonResponse result = challengeController.postChallenge(newUser, challengeRequest, - mockBindingResult); + CommonResponse result = challengeController.postChallenge(son, + challengeRequest); //then ChallengeDTO challengeDTO = new ChallengeDTO(newChallenge, null, null); @@ -590,41 +548,28 @@ public void testIfMakeChallengeTargetItemBadRequestErr() { CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - BindingResult mockBindingResult = Mockito.mock(BindingResult.class); - - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "선물", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990623") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + TargetItem notExistItem = TargetItem.builder().id(2L).name("없는 아이템").build(); Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); - Family newFamily = Family.builder().code("asdfasdf").build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(notExistItem) + .filename(challengeRequest.getFileName()).build(); + + Family newFamily = Family.builder().code("family").build(); - FamilyUser newFamilyUser = FamilyUser.builder().user(newUser).family(newFamily).build(); + FamilyUser newFamilyUser = FamilyUser.builder().user(son).family(newFamily).build(); - FamilyUser newFamilyParent = FamilyUser.builder().user(newParent).family(newFamily).build(); + FamilyUser newFamilyParent = FamilyUser.builder().user(mom).family(newFamily).build(); List familyUserList = new ArrayList<>(); familyUserList.add(newFamilyParent); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); Mockito.when(mockFamilyUserRepository.findByFamily(newFamily)) .thenReturn(familyUserList); @@ -641,9 +586,8 @@ public void testIfMakeChallengeTargetItemBadRequestErr() { ChallengeController challengeController = new ChallengeController(challengeService); //then - Assertions.assertThrows(BadRequestException.class, () -> { - challengeController.postChallenge(newUser, challengeRequest, mockBindingResult); - }); + Assertions.assertThrows(BadRequestException.class, () -> + challengeController.postChallenge(son, challengeRequest)); } @Test @@ -662,42 +606,29 @@ public void testIfMakeChallengeChallengeCategoryBadRequestErr() { CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - BindingResult mockBindingResult = Mockito.mock(BindingResult.class); - - ChallengeRequest challengeRequest = new ChallengeRequest(true, "형제와 경쟁 하기", "전자제품", - "에어팟 사기", 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990623") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + ChallengeCategory notExistCategory = ChallengeCategory.builder().id(2L) + .category("형제와 경쟁 하기").build(); Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(notExistCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); - Family newFamily = Family.builder().code("asdfasdf").build(); + Family newFamily = Family.builder().code("family").build(); - FamilyUser newFamilyUser = FamilyUser.builder().user(newUser).family(newFamily).build(); + FamilyUser newFamilyUser = FamilyUser.builder().user(son).family(newFamily).build(); - FamilyUser newFamilyParent = FamilyUser.builder().user(newParent).family(newFamily).build(); + FamilyUser newFamilyParent = FamilyUser.builder().user(mom).family(newFamily).build(); List familyUserList = new ArrayList<>(); familyUserList.add(newFamilyParent); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); Mockito.when(mockFamilyUserRepository.findByFamily(newFamily)) .thenReturn(familyUserList); @@ -715,9 +646,8 @@ public void testIfMakeChallengeChallengeCategoryBadRequestErr() { ChallengeController challengeController = new ChallengeController(challengeService); //then - Assertions.assertThrows(BadRequestException.class, () -> { - challengeController.postChallenge(newUser, challengeRequest, mockBindingResult); - }); + Assertions.assertThrows(BadRequestException.class, () -> + challengeController.postChallenge(son, challengeRequest)); } @@ -737,31 +667,15 @@ public void testIfMakeChallengeNotExistFamilyForbiddenErr() { CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - BindingResult mockBindingResult = Mockito.mock(BindingResult.class); - - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990623") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); Mockito.when(mockChallengeCategoryRepository.findByCategory( newChallenge.getChallengeCategory().getCategory())).thenReturn(newChallengeCategory); @@ -776,9 +690,8 @@ public void testIfMakeChallengeNotExistFamilyForbiddenErr() { ChallengeController challengeController = new ChallengeController(challengeService); //then - Assertions.assertThrows(ForbiddenException.class, () -> { - challengeController.postChallenge(newUser, challengeRequest, mockBindingResult); - }); + Assertions.assertThrows(ForbiddenException.class, () -> + challengeController.postChallenge(son, challengeRequest)); } @@ -798,44 +711,23 @@ public void testIfMakeChallengeNotExistParentBadRequestErr() { CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - BindingResult mockBindingResult = Mockito.mock(BindingResult.class); - - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990623") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Family newFamily = Family.builder().code("asdfasdf").build(); - - Family newFamily1 = Family.builder().code("asdfasdfadsf").build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); - FamilyUser newFamilyUser = FamilyUser.builder().user(newUser).family(newFamily).build(); + Family newFamily = Family.builder().code("family").build(); - FamilyUser newFamilyParent = FamilyUser.builder().user(newParent).family(newFamily1) - .build(); + FamilyUser newFamilyUser = FamilyUser.builder().user(son).family(newFamily).build(); List familyUserList = new ArrayList<>(); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); Mockito.when(mockFamilyUserRepository.findByFamily(newFamily)) .thenReturn(familyUserList); @@ -853,15 +745,14 @@ public void testIfMakeChallengeNotExistParentBadRequestErr() { ChallengeController challengeController = new ChallengeController(challengeService); //then - Assertions.assertThrows(BadRequestException.class, () -> { - challengeController.postChallenge(newUser, challengeRequest, mockBindingResult); - }); + Assertions.assertThrows(BadRequestException.class, () -> + challengeController.postChallenge(son, challengeRequest)); } @Test - @DisplayName("챌린지 정보 가져오기 테스트") - public void testGetChallengeInfo() { + @DisplayName("챌린지 삭제 시, 정상적으로 없어지는지 테스트") + public void testIfDeleteChallengeIsNull() { //given ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( @@ -876,170 +767,47 @@ public void testGetChallengeInfo() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - ChallengeRequest challengeRequest1 = new ChallengeRequest(true, "이자율 받기", "전자제품", "아이펜슬 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + son.setKid(sonKid); + sonKid.setDeleteChallenge(null); Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest1.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest1.getInterestRate()).build(); - - Challenge newChallenge2 = Challenge.builder().id(3L).title("드라이기 사기") - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(0L) - .interestRate(challengeRequest1.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); - - ChallengeUser newChallengeUser1 = ChallengeUser.builder().challenge(newChallenge1) - .member("parent").user(newUser).build(); - - ChallengeUser newChallengeUser2 = ChallengeUser.builder().challenge(newChallenge2) - .member("parent").user(newUser).build(); - - List challengeUserList = new ArrayList<>(); - challengeUserList.add(newChallengeUser); - challengeUserList.add(newChallengeUser1); - challengeUserList.add(newChallengeUser2); + .member("parent").user(son).build(); Progress newProgress = Progress.builder().id(1L).weeks(1L).isAchieved(true) - .challenge(newChallenge1).build(); - - Comment newComment = Comment.builder().id(1L).content("아쉽다").challenge(newChallenge2) - .user(newParent).build(); - - List progressList = new ArrayList<>(); - progressList.add(newProgress); + .challenge(newChallenge).build(); - List progressDTOList = new ArrayList<>(); - progressDTOList.add(new ProgressDTO(newProgress)); + Progress newProgress1 = Progress.builder().id(2L).weeks(2L).isAchieved(true) + .challenge(newChallenge).build(); - newChallenge1.setProgressList(progressList); + Family newFamily = Family.builder().id(1L).code("family").build(); - newChallenge2.setComment(newComment); + FamilyUser newFamilyUser = FamilyUser.builder().id(1L).user(son).family(newFamily).build(); Mockito.when(mockChallengeRepository.save(newChallenge)).thenReturn(newChallenge); - Mockito.when(mockChallengeRepository.findById(1L)) - .thenReturn(Optional.ofNullable(newChallenge)); - Mockito.when(mockTargetItemRepository.findByName(newTargetItem.getName())) - .thenReturn(newTargetItem); - Mockito.when( - mockChallengeCategoryRepository.findByCategory(newChallengeCategory.getCategory())) - .thenReturn(newChallengeCategory); + Mockito.when(mockChallengeRepository.findById(newChallenge.getId())) + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockChallengeUserRepository.save(newChallengeUser)) .thenReturn(newChallengeUser); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); - Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge1.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser1)); - Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge2.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser2)); - - //when - ChallengeServiceImpl challengeService = new ChallengeServiceImpl(mockChallengeRepository, - mockChallengeCategoryRepository, mockTargetItemRepository, mockChallengeUserRepository, - mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, - mockKidRepository, mockParentRepository); - - ChallengeController challengeController = new ChallengeController(challengeService); - Long challengeId = newChallenge.getId(); - Long challengeId1 = newChallenge1.getId(); - Long challengeId2 = newChallenge2.getId(); - CommonResponse result = challengeController.getChallenge(newUser, challengeId); - CommonResponse result1 = challengeController.getChallenge(newUser, challengeId1); - CommonResponse result2 = challengeController.getChallenge(newUser, challengeId2); - - //then - ChallengeDTO challengeDTO = new ChallengeDTO(newChallenge, null, null); - ChallengeDTO challengeDTO1 = new ChallengeDTO(newChallenge1, progressDTOList, null); - ChallengeDTO challengeDTO2 = new ChallengeDTO(newChallenge2, null, newComment); - - Assertions.assertEquals(CommonResponse.onSuccess(challengeDTO), result); - - Assertions.assertEquals(CommonResponse.onSuccess(challengeDTO1), result1); - - Assertions.assertEquals(CommonResponse.onSuccess(challengeDTO2), result2); - } - - @Test - @DisplayName("챌린지 정보 조회 시, 챌린지를 생성한 유저가 아닌 경우 403 에러 테스트") - public void testIfNotAuthUserForDetailChallengeIsForbidden() { - - //given - ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( - ChallengeCategoryRepository.class); - TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); - ChallengeRepository mockChallengeRepository = Mockito.mock(ChallengeRepository.class); - ChallengeUserRepository mockChallengeUserRepository = Mockito.mock( - ChallengeUserRepository.class); - ProgressRepository mockProgressRepository = Mockito.mock(ProgressRepository.class); - FamilyUserRepository mockFamilyUserRepository = Mockito.mock(FamilyUserRepository.class); - KidRepository mockKidRepository = Mockito.mock(KidRepository.class); - ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser1 = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - User newUser2 = User.builder().id(2L).username("user2").isFemale(true).birthday("19990623") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .thenReturn(Optional.of(newChallengeUser)); + Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) + .thenReturn(Optional.of(newChallengeUser)); + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) + .thenReturn(Optional.of(newFamilyUser)); - ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser1).build(); + List progressList = List.of(newProgress, newProgress1); + newChallenge.setProgressList(progressList); - Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + ChallengeDTO newDeleteChallengeDTO = new ChallengeDTO(newChallenge, null, null); //when ChallengeServiceImpl challengeService = new ChallengeServiceImpl(mockChallengeRepository, @@ -1048,76 +816,27 @@ public void testIfNotAuthUserForDetailChallengeIsForbidden() { mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); Long challengeId = newChallenge.getId(); + CommonResponse result = challengeController.deleteChallenge(son, challengeId); //then - Assertions.assertThrows(ForbiddenException.class, () -> { - challengeController.getChallenge(newUser2, challengeId); - }); - } - - @Test - @DisplayName("챌린지 조회 시, 챌린지 아이디로 챌린지를 못찾으면 404 에러 테스트") - public void testIfGetChallengeIsNullNotFoundErr() { - - //given - ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( - ChallengeCategoryRepository.class); - TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); - ChallengeRepository mockChallengeRepository = Mockito.mock(ChallengeRepository.class); - ChallengeUserRepository mockChallengeUserRepository = Mockito.mock( - ChallengeUserRepository.class); - ProgressRepository mockProgressRepository = Mockito.mock(ProgressRepository.class); - FamilyUserRepository mockFamilyUserRepository = Mockito.mock(FamilyUserRepository.class); - KidRepository mockKidRepository = Mockito.mock(KidRepository.class); - ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser1 = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); + ArgumentCaptor cuCaptor = ArgumentCaptor.forClass(ChallengeUser.class); + ArgumentCaptor cCaptor = ArgumentCaptor.forClass(Challenge.class); - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + Mockito.verify(mockChallengeUserRepository, Mockito.times(1)).delete(cuCaptor.capture()); + Mockito.verify(mockChallengeRepository, Mockito.times(1)).delete(cCaptor.capture()); - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + Assertions.assertEquals(newChallenge, cCaptor.getValue()); - ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser1).build(); + Assertions.assertEquals(newChallengeUser, cuCaptor.getValue()); - Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + Assertions.assertNotEquals(sonKid.getDeleteChallenge(), null); - //when - ChallengeServiceImpl challengeService = new ChallengeServiceImpl(mockChallengeRepository, - mockChallengeCategoryRepository, mockTargetItemRepository, mockChallengeUserRepository, - mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, - mockKidRepository, mockParentRepository); - ChallengeController challengeController = new ChallengeController(challengeService); - - //then - Assertions.assertThrows(NotFoundException.class, () -> { - challengeController.getChallenge(newUser1, 2L); - }); + Assertions.assertEquals(CommonResponse.onSuccess(newDeleteChallengeDTO), result); } @Test - @DisplayName("챌린지 삭제 시, 정상적으로 없어지는지 테스트") - public void testIfDeleteChallengeIsNull() { + @DisplayName("챌린지 삭제 시, 삭제한지 2주가 경과된 유저가 시도 했을 때 정상적으로 없어지는지 테스트") + public void testIfDeleteTwoWeeksUserChallengeIsNull() { //given ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( @@ -1132,54 +851,57 @@ public void testIfDeleteChallengeIsNull() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - Kid newKid = Kid.builder().user(newUser).savings(0L).achievedChallenge(0L) - .totalChallenge(0L).build(); - newUser.setKid(newKid); + son.setKid(sonKid); - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); + LocalDateTime now = LocalDateTime.of(2022, 6, 10, 3, 3); + Timestamp timestamp = Timestamp.valueOf(now); + Calendar cal = Calendar.getInstance(); + cal.setTime(timestamp); + cal.add(Calendar.DATE, -15); - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + ReflectionTestUtils.setField( + sonKid, + Kid.class, + "deleteChallenge", + Timestamp.valueOf(now), + Timestamp.class + ); - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder().id(1L).weeks(1L).isAchieved(true) .challenge(newChallenge).build(); + Family newFamily = Family.builder().id(1L).code("family").build(); + + FamilyUser newFamilyUser = FamilyUser.builder().id(1L).user(son).family(newFamily).build(); + Mockito.when(mockChallengeRepository.save(newChallenge)).thenReturn(newChallenge); Mockito.when(mockChallengeRepository.findById(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockChallengeUserRepository.save(newChallengeUser)) .thenReturn(newChallengeUser); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + .thenReturn(Optional.of(newChallengeUser)); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + .thenReturn(Optional.of(newChallengeUser)); + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) + .thenReturn(Optional.of(newFamilyUser)); - List progressList = Arrays.asList(newProgress); + List progressList = List.of(newProgress); newChallenge.setProgressList(progressList); ChallengeDTO newDeleteChallengeDTO = new ChallengeDTO(newChallenge, null, null); - //when ChallengeServiceImpl challengeService = new ChallengeServiceImpl(mockChallengeRepository, mockChallengeCategoryRepository, mockTargetItemRepository, mockChallengeUserRepository, @@ -1187,7 +909,7 @@ public void testIfDeleteChallengeIsNull() { mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); Long challengeId = newChallenge.getId(); - CommonResponse result = challengeController.deleteChallenge(newUser, challengeId); + CommonResponse result = challengeController.deleteChallenge(son, challengeId); //then ArgumentCaptor cuCaptor = ArgumentCaptor.forClass(ChallengeUser.class); @@ -1204,8 +926,8 @@ public void testIfDeleteChallengeIsNull() { } @Test - @DisplayName("챌린지 삭제 시, 삭제한지 2주가 경과된 유저가 시도 했을 때 정상적으로 없어지는지 테스트") - public void testIfDeleteTwoWeeksUserChallengeIsNull() { + @DisplayName("챌린지 삭제 시, 삭제한지 2주가 경과된 유저가 시도 했을 때 (해가 넘어갈 시) 정상적으로 없어지는지 테스트") + public void testIfDeleteTwoWeeksDiffYearUserChallengeIsNull() { //given ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( @@ -1220,15 +942,7 @@ public void testIfDeleteTwoWeeksUserChallengeIsNull() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - Kid newKid = Kid.builder().user(newUser).savings(0L).achievedChallenge(0L) - .totalChallenge(0L).build(); - newUser.setKid(newKid); + son.setKid(sonKid); LocalDateTime now = LocalDateTime.of(2022, 6, 10, 3, 3); Timestamp timestamp = Timestamp.valueOf(now); @@ -1237,47 +951,45 @@ public void testIfDeleteTwoWeeksUserChallengeIsNull() { cal.add(Calendar.DATE, -15); ReflectionTestUtils.setField( - newKid, + sonKid, Kid.class, "deleteChallenge", - Timestamp.valueOf(now), + Timestamp.valueOf(now.minusYears(1)), Timestamp.class ); - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder().id(1L).weeks(1L).isAchieved(true) .challenge(newChallenge).build(); + Family newFamily = Family.builder().id(1L).code("family").build(); + + FamilyUser newFamilyUser = FamilyUser.builder().id(1L).user(son).family(newFamily).build(); + Mockito.when(mockChallengeRepository.save(newChallenge)).thenReturn(newChallenge); Mockito.when(mockChallengeRepository.findById(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockChallengeUserRepository.save(newChallengeUser)) .thenReturn(newChallengeUser); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + .thenReturn(Optional.of(newChallengeUser)); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + .thenReturn(Optional.of(newChallengeUser)); + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) + .thenReturn(Optional.of(newFamilyUser)); - List progressList = Arrays.asList(newProgress); + List progressList = List.of(newProgress); newChallenge.setProgressList(progressList); ChallengeDTO newDeleteChallengeDTO = new ChallengeDTO(newChallenge, null, null); @@ -1288,7 +1000,7 @@ public void testIfDeleteTwoWeeksUserChallengeIsNull() { mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); Long challengeId = newChallenge.getId(); - CommonResponse result = challengeController.deleteChallenge(newUser, challengeId); + CommonResponse result = challengeController.deleteChallenge(son, challengeId); //then ArgumentCaptor cuCaptor = ArgumentCaptor.forClass(ChallengeUser.class); @@ -1305,8 +1017,8 @@ public void testIfDeleteTwoWeeksUserChallengeIsNull() { } @Test - @DisplayName("챌린지 삭제 시, 삭제한지 2주가 경과된 유저가 시도 했을 때 (해가 넘어갈 시) 정상적으로 없어지는지 테스트") - public void testIfDeleteTwoWeeksDiffYearUserChallengeIsNull() { + @DisplayName("챌린지 삭제 시, 삭제한지 2주가 경과되지 않은 유저가 거절당한 돈길 삭제를 시도 했을 때 정상적으로 없어지는지 테스트") + public void testIfDeleteRejectChallengeIsNull() { //given ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( @@ -1321,69 +1033,63 @@ public void testIfDeleteTwoWeeksDiffYearUserChallengeIsNull() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); + son.setKid(sonKid); - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - Kid newKid = Kid.builder().user(newUser).savings(0L).achievedChallenge(0L) - .totalChallenge(0L).build(); - newUser.setKid(newKid); - - LocalDateTime now = LocalDateTime.of(2022, 6, 10, 3, 3); + LocalDateTime now = LocalDateTime.now(); Timestamp timestamp = Timestamp.valueOf(now); Calendar cal = Calendar.getInstance(); cal.setTime(timestamp); cal.add(Calendar.DATE, -15); ReflectionTestUtils.setField( - newKid, + sonKid, Kid.class, "deleteChallenge", - Timestamp.valueOf(now.minusYears(1)), + Timestamp.valueOf(now), Timestamp.class ); - System.out.println("newKid.getDeleteChallenge() = " + newKid.getDeleteChallenge()); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(rejected) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + Comment newComment = Comment.builder().id(1L).challenge(newChallenge).user(mom) + .content("아쉽구나").build(); - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + newChallenge.setComment(newComment); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder().id(1L).weeks(1L).isAchieved(true) .challenge(newChallenge).build(); + Family newFamily = Family.builder().id(1L).code("family").build(); + + FamilyUser newFamilyUser = FamilyUser.builder().id(1L).user(son).family(newFamily).build(); + Mockito.when(mockChallengeRepository.save(newChallenge)).thenReturn(newChallenge); Mockito.when(mockChallengeRepository.findById(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockChallengeUserRepository.save(newChallengeUser)) .thenReturn(newChallengeUser); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + .thenReturn(Optional.of(newChallengeUser)); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + .thenReturn(Optional.of(newChallengeUser)); + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) + .thenReturn(Optional.of(newFamilyUser)); - List progressList = Arrays.asList(newProgress); + List progressList = List.of(newProgress); newChallenge.setProgressList(progressList); ChallengeDTO newDeleteChallengeDTO = new ChallengeDTO(newChallenge, null, null); + //when ChallengeServiceImpl challengeService = new ChallengeServiceImpl(mockChallengeRepository, mockChallengeCategoryRepository, mockTargetItemRepository, mockChallengeUserRepository, @@ -1391,7 +1097,7 @@ public void testIfDeleteTwoWeeksDiffYearUserChallengeIsNull() { mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); Long challengeId = newChallenge.getId(); - CommonResponse result = challengeController.deleteChallenge(newUser, challengeId); + CommonResponse result = challengeController.deleteChallenge(son, challengeId); //then ArgumentCaptor cuCaptor = ArgumentCaptor.forClass(ChallengeUser.class); @@ -1408,8 +1114,8 @@ public void testIfDeleteTwoWeeksDiffYearUserChallengeIsNull() { } @Test - @DisplayName("챌린지 삭제 시, 삭제한지 2주가 경과되지 않은 유저가 거절당한 돈길 삭제를 시도 했을 때 정상적으로 없어지는지 테스트") - public void testIfDeleteRejectChallengeIsNull() { + @DisplayName("챌린지 삭제 시, 삭제한지 2주가 경과되지 않은 유저가 제안중인 돈길 삭제를 시도 했을 때 정상적으로 없어지는지 테스트") + public void testIfDeletePendingChallengeIsNull() { //given ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( @@ -1424,15 +1130,7 @@ public void testIfDeleteRejectChallengeIsNull() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - Kid newKid = Kid.builder().user(newUser).savings(0L).achievedChallenge(0L) - .totalChallenge(0L).build(); - newUser.setKid(newKid); + son.setKid(sonKid); LocalDateTime now = LocalDateTime.now(); Timestamp timestamp = Timestamp.valueOf(now); @@ -1441,52 +1139,50 @@ public void testIfDeleteRejectChallengeIsNull() { cal.add(Calendar.DATE, -15); ReflectionTestUtils.setField( - newKid, + sonKid, Kid.class, "deleteChallenge", Timestamp.valueOf(now), Timestamp.class ); - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(0L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); - Comment newComment = Comment.builder().id(1L).challenge(newChallenge).user(newParent) + Comment newComment = Comment.builder().id(1L).challenge(newChallenge).user(mom) .content("아쉽구나").build(); newChallenge.setComment(newComment); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder().id(1L).weeks(1L).isAchieved(true) .challenge(newChallenge).build(); + Family newFamily = Family.builder().id(1L).code("family").build(); + + FamilyUser newFamilyUser = FamilyUser.builder().id(1L).user(son).family(newFamily).build(); + Mockito.when(mockChallengeRepository.save(newChallenge)).thenReturn(newChallenge); Mockito.when(mockChallengeRepository.findById(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockChallengeUserRepository.save(newChallengeUser)) .thenReturn(newChallengeUser); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + .thenReturn(Optional.of(newChallengeUser)); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + .thenReturn(Optional.of(newChallengeUser)); + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) + .thenReturn(Optional.of(newFamilyUser)); - List progressList = Arrays.asList(newProgress); + List progressList = List.of(newProgress); newChallenge.setProgressList(progressList); ChallengeDTO newDeleteChallengeDTO = new ChallengeDTO(newChallenge, null, null); @@ -1498,7 +1194,7 @@ public void testIfDeleteRejectChallengeIsNull() { mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); Long challengeId = newChallenge.getId(); - CommonResponse result = challengeController.deleteChallenge(newUser, challengeId); + CommonResponse result = challengeController.deleteChallenge(son, challengeId); //then ArgumentCaptor cuCaptor = ArgumentCaptor.forClass(ChallengeUser.class); @@ -1531,15 +1227,7 @@ public void testIfDeleteFailureChallengeIsNull() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - Kid newKid = Kid.builder().user(newUser).savings(0L).achievedChallenge(0L) - .totalChallenge(0L).build(); - newUser.setKid(newKid); + son.setKid(sonKid); LocalDateTime now = LocalDateTime.now(); Timestamp timestamp = Timestamp.valueOf(now); @@ -1548,52 +1236,45 @@ public void testIfDeleteFailureChallengeIsNull() { cal.add(Calendar.DATE, -15); ReflectionTestUtils.setField( - newKid, + sonKid, Kid.class, "deleteChallenge", Timestamp.valueOf(now), Timestamp.class ); - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(0L).totalPrice(challengeRequest.getTotalPrice()) + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(0L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Comment newComment = Comment.builder().id(1L).challenge(newChallenge).user(newParent) - .content("아쉽구나").build(); - - newChallenge.setComment(newComment); + .challengeStatus(failed) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder().id(1L).weeks(1L).isAchieved(true) .challenge(newChallenge).build(); + Family newFamily = Family.builder().id(1L).code("family").build(); + + FamilyUser newFamilyUser = FamilyUser.builder().id(1L).user(son).family(newFamily).build(); + Mockito.when(mockChallengeRepository.save(newChallenge)).thenReturn(newChallenge); Mockito.when(mockChallengeRepository.findById(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockChallengeUserRepository.save(newChallengeUser)) .thenReturn(newChallengeUser); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + .thenReturn(Optional.of(newChallengeUser)); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallengeUser)); + .thenReturn(Optional.of(newChallengeUser)); + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) + .thenReturn(Optional.of(newFamilyUser)); - List progressList = Arrays.asList(newProgress); + List progressList = List.of(newProgress); newChallenge.setProgressList(progressList); ChallengeDTO newDeleteChallengeDTO = new ChallengeDTO(newChallenge, null, null); @@ -1605,7 +1286,7 @@ public void testIfDeleteFailureChallengeIsNull() { mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); Long challengeId = newChallenge.getId(); - CommonResponse result = challengeController.deleteChallenge(newUser, challengeId); + CommonResponse result = challengeController.deleteChallenge(son, challengeId); //then ArgumentCaptor cuCaptor = ArgumentCaptor.forClass(ChallengeUser.class); @@ -1638,38 +1319,33 @@ public void testIfNotAuthUserDeleteChallengeForbidden() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser1 = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); + son.setKid(sonKid); - User newUser2 = User.builder().id(2L).username("user2").isFemale(true).birthday("19990623") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); + ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) + .member("parent").user(son).build(); - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + Family newFamily = Family.builder().id(1L).code("family").build(); - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + FamilyUser newFamilyUser = FamilyUser.builder().id(1L).user(son).family(newFamily).build(); - ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser1).build(); + FamilyUser newFamilyUser1 = FamilyUser.builder().id(2L).user(daughter).family(newFamily) + .build(); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) .thenReturn(Optional.ofNullable(newChallengeUser)); + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) + .thenReturn(Optional.of(newFamilyUser)); + Mockito.when(mockFamilyUserRepository.findByUserId(daughter.getId())) + .thenReturn(Optional.of(newFamilyUser1)); //when ChallengeServiceImpl challengeService = new ChallengeServiceImpl(mockChallengeRepository, @@ -1680,9 +1356,8 @@ public void testIfNotAuthUserDeleteChallengeForbidden() { Long challengeId = newChallenge.getId(); //then - Assertions.assertThrows(ForbiddenException.class, () -> { - challengeController.deleteChallenge(newUser2, challengeId); - }); + Assertions.assertThrows(ForbiddenException.class, () -> + challengeController.deleteChallenge(daughter, challengeId)); } @Test @@ -1702,40 +1377,27 @@ public void testIfOverTwoWeekChallengeTryDeleteForbidden() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser1 = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - Kid newKid = Kid.builder().user(newUser1).savings(0L).build(); - newUser1.setKid(newKid); + son.setKid(sonKid); - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); ReflectionTestUtils.setField( - newKid, + sonKid, Kid.class, "deleteChallenge", - Timestamp.valueOf(LocalDateTime.now()), + Timestamp.valueOf(LocalDateTime.now().minusDays(1)), Timestamp.class ); - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser1).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder().id(1L).weeks(1L).isAchieved(true) .challenge(newChallenge).build(); @@ -1743,11 +1405,16 @@ public void testIfOverTwoWeekChallengeTryDeleteForbidden() { Progress newProgress2 = Progress.builder().id(2L).weeks(2L).isAchieved(true) .challenge(newChallenge).build(); + Family newFamily = Family.builder().id(1L).code("family").build(); + + FamilyUser newFamilyUser = FamilyUser.builder().id(1L).user(son).family(newFamily).build(); + List progressList = Arrays.asList(newProgress, newProgress2); newChallenge.setProgressList(progressList); - int size = newChallenge.getProgressList().size(); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) .thenReturn(Optional.ofNullable(newChallengeUser)); + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) + .thenReturn(Optional.of(newFamilyUser)); //when ChallengeServiceImpl challengeService = new ChallengeServiceImpl(mockChallengeRepository, @@ -1758,14 +1425,13 @@ public void testIfOverTwoWeekChallengeTryDeleteForbidden() { Long challengeId = newChallenge.getId(); //then - Assertions.assertThrows(ForbiddenException.class, () -> { - challengeController.deleteChallenge(newUser1, challengeId); - }); + Assertions.assertThrows(ForbiddenException.class, () -> + challengeController.deleteChallenge(son, challengeId)); } @Test - @DisplayName("챌린지 삭제 시, 챌린지 아이디로 챌린지를 못찾으면 404 에러 테스트") - public void testIfDeleteChallengeIsNullNotFoundErr() { + @DisplayName("챌린지 삭제 시, 챌린지 아이디로 챌린지를 못찾으면 400 에러 테스트") + public void testIfDeleteChallengeIsNullBadRequestErr() { //given ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( @@ -1780,38 +1446,17 @@ public void testIfDeleteChallengeIsNullNotFoundErr() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser1 = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser1).build(); - - Progress newProgress = Progress.builder().id(1L).weeks(1L).isAchieved(true) - .challenge(newChallenge).build(); - - Progress newProgress2 = Progress.builder().id(2L).weeks(2L).isAchieved(true) - .challenge(newChallenge).build(); + .member("parent").user(son).build(); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) .thenReturn(Optional.ofNullable(newChallengeUser)); @@ -1822,12 +1467,10 @@ public void testIfDeleteChallengeIsNullNotFoundErr() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - Long challengeId = newChallenge.getId(); //then - Assertions.assertThrows(BadRequestException.class, () -> { - challengeController.deleteChallenge(newUser1, 2L); - }); + Assertions.assertThrows(BadRequestException.class, () -> + challengeController.deleteChallenge(son, 2L)); } @Test @@ -1847,46 +1490,29 @@ public void testIfGetListChallengeTest() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - ChallengeRequest challengeRequest1 = new ChallengeRequest(true, "이자율 받기", "전자제품", - "에어팟 펜슬 사기", - 10L, 100000L, 10000L, 10L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge1 = Challenge.builder().title(challengeRequest1.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest1.getInterestRate()).build(); + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); ChallengeUser newChallengeUser1 = ChallengeUser.builder().challenge(newChallenge1) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); List challengeUserList = new ArrayList<>(); challengeUserList.add(newChallengeUser); @@ -1899,7 +1525,7 @@ public void testIfGetListChallengeTest() { newProgress, AbstractTimestamp.class, "createdAt", - Timestamp.valueOf(LocalDateTime.now()), + Timestamp.valueOf(LocalDateTime.now().minusDays(1)), Timestamp.class ); @@ -1917,7 +1543,7 @@ public void testIfGetListChallengeTest() { .thenReturn(newChallengeUser); Mockito.when(mockChallengeUserRepository.save(newChallengeUser1)) .thenReturn(newChallengeUser1); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); //when @@ -1926,17 +1552,19 @@ public void testIfGetListChallengeTest() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - CommonResponse result = challengeController.getListChallenge(newUser, "pending"); - CommonResponse result1 = challengeController.getListChallenge(newUser, "accept"); + CommonResponse> result = challengeController.getListChallenge(son, + "pending"); + CommonResponse> result1 = challengeController.getListChallenge(son, + "accept"); //then List challengeDTOList = new ArrayList<>(); List challengeDTOList1 = new ArrayList<>(); for (ChallengeUser r : challengeUserList) { - if (r.getChallenge().getStatus() != 2L) { + if (r.getChallenge().getChallengeStatus() != walking) { challengeDTOList.add(new ChallengeDTO(r.getChallenge(), null, null)); - } else { + } else if (r.getChallenge().getChallengeStatus() == walking) { challengeDTOList1.add(new ChallengeDTO(r.getChallenge(), progressDTOList, null)); } } @@ -1965,46 +1593,29 @@ public void testIfLastYearGetListChallengeTest() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - ChallengeRequest challengeRequest1 = new ChallengeRequest(true, "이자율 받기", "전자제품", - "에어팟 펜슬 사기", - 10L, 100000L, 10000L, 10L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge1 = Challenge.builder().title(challengeRequest1.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest1.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); ChallengeUser newChallengeUser1 = ChallengeUser.builder().challenge(newChallenge1) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); List challengeUserList = new ArrayList<>(); challengeUserList.add(newChallengeUser); @@ -2013,6 +1624,9 @@ public void testIfLastYearGetListChallengeTest() { Progress newProgress = Progress.builder().id(1L).weeks(1L).isAchieved(true) .challenge(newChallenge1).build(); + Progress newProgress1 = Progress.builder().id(2L).weeks(2L).isAchieved(true) + .challenge(newChallenge1).build(); + ReflectionTestUtils.setField( newProgress, AbstractTimestamp.class, @@ -2023,9 +1637,11 @@ public void testIfLastYearGetListChallengeTest() { List progressList = new ArrayList<>(); progressList.add(newProgress); + progressList.add(newProgress1); List progressDTOList = new ArrayList<>(); progressDTOList.add(new ProgressDTO(newProgress)); + progressDTOList.add(new ProgressDTO(newProgress1)); newChallenge1.setProgressList(progressList); @@ -2035,7 +1651,7 @@ public void testIfLastYearGetListChallengeTest() { .thenReturn(newChallengeUser); Mockito.when(mockChallengeUserRepository.save(newChallengeUser1)) .thenReturn(newChallengeUser1); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); //when @@ -2044,14 +1660,16 @@ public void testIfLastYearGetListChallengeTest() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - CommonResponse result = challengeController.getListChallenge(newUser, "pending"); - CommonResponse result1 = challengeController.getListChallenge(newUser, "accept"); + CommonResponse> result = challengeController.getListChallenge(son, + "pending"); + CommonResponse> result1 = challengeController.getListChallenge(son, + "accept"); //then List challengeDTOList = new ArrayList<>(); List challengeDTOList1 = new ArrayList<>(); for (ChallengeUser r : challengeUserList) { - if (r.getChallenge().getStatus() != 2L) { + if (r.getChallenge().getChallengeStatus() != walking) { challengeDTOList.add(new ChallengeDTO(r.getChallenge(), null, null)); } else { @@ -2083,50 +1701,59 @@ public void testIfGetListChallengeChallengeIsFailureTest() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - ChallengeRequest challengeRequest1 = new ChallengeRequest(true, "이자율 받기", "전자제품", - "에어팟 펜슬 사기", - 20L, 100000L, 10000L, 10L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge1 = Challenge.builder().title(challengeRequest1.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest1.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(30L) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge2 = Challenge.builder().id(3L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(10L) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge3 = Challenge.builder().id(4L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(20L) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); ChallengeUser newChallengeUser1 = ChallengeUser.builder().challenge(newChallenge1) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); + + ChallengeUser newChallengeUser2 = ChallengeUser.builder().challenge(newChallenge2) + .member("parent").user(son).build(); + + ChallengeUser newChallengeUser3 = ChallengeUser.builder().challenge(newChallenge3) + .member("parent").user(son).build(); List challengeUserList = new ArrayList<>(); challengeUserList.add(newChallengeUser); challengeUserList.add(newChallengeUser1); + challengeUserList.add(newChallengeUser2); + challengeUserList.add(newChallengeUser3); Progress progress = Progress.builder().id(3L).isAchieved(false).weeks(1L) .challenge(newChallenge).build(); @@ -2137,8 +1764,28 @@ public void testIfGetListChallengeChallengeIsFailureTest() { Progress newProgress = Progress.builder().id(1L).weeks(1L).isAchieved(false) .challenge(newChallenge1).build(); - Progress newProgress1 = Progress.builder().id(2L).weeks(2L).isAchieved(false) - .challenge(newChallenge1).build(); + Progress lowProgress = Progress.builder().id(2L).weeks(1L).isAchieved(false) + .challenge(newChallenge2).build(); + + Progress middleProgress = Progress.builder().id(5L).weeks(1L).isAchieved(false) + .challenge(newChallenge3).build(); + + Progress middleProgress1 = Progress.builder().id(6L).weeks(2L).isAchieved(false) + .challenge(newChallenge3).build(); + + Progress middleProgress2 = Progress.builder().id(7L).weeks(3L).isAchieved(false) + .challenge(newChallenge3).build(); + + Progress middleProgress3 = Progress.builder().id(8L).weeks(4L).isAchieved(false) + .challenge(newChallenge3).build(); + + ReflectionTestUtils.setField( + lowProgress, + AbstractTimestamp.class, + "createdAt", + Timestamp.valueOf(LocalDateTime.now()), + Timestamp.class + ); ReflectionTestUtils.setField( newProgress, @@ -2156,21 +1803,47 @@ public void testIfGetListChallengeChallengeIsFailureTest() { Timestamp.class ); + ReflectionTestUtils.setField( + middleProgress, + AbstractTimestamp.class, + "createdAt", + Timestamp.valueOf(LocalDateTime.now().minusDays(35)), + Timestamp.class + ); + List progressList = new ArrayList<>(); progressList.add(newProgress); - progressList.add(newProgress1); List progressList1 = new ArrayList<>(); progressList1.add(progress); progressList1.add(progress1); + List progressList2 = new ArrayList<>(); + progressList2.add(lowProgress); + + List progressList3 = new ArrayList<>(); + progressList3.add(middleProgress); + progressList3.add(middleProgress1); + progressList3.add(middleProgress2); + progressList3.add(middleProgress3); + newChallenge.setProgressList(progressList1); newChallenge1.setProgressList(progressList); + newChallenge2.setProgressList(progressList2); + + newChallenge3.setProgressList(progressList3); + ProgressDTO progressDTO = new ProgressDTO(newProgress); ProgressDTO progressDTO1 = new ProgressDTO(progress); ProgressDTO progressDTO2 = new ProgressDTO(progress1); + ProgressDTO lowProgressDTO = new ProgressDTO(lowProgress); + + List lowProgressDTOList = List.of(lowProgressDTO); + + List middleProgressDTOList = progressList3.stream().map(ProgressDTO::new) + .collect(Collectors.toList()); List progressDTOList = new ArrayList<>(); progressDTOList.add(progressDTO); @@ -2181,7 +1854,7 @@ public void testIfGetListChallengeChallengeIsFailureTest() { .thenReturn(newChallengeUser); Mockito.when(mockChallengeUserRepository.save(newChallengeUser1)) .thenReturn(newChallengeUser1); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); //when @@ -2190,7 +1863,8 @@ public void testIfGetListChallengeChallengeIsFailureTest() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - CommonResponse result1 = challengeController.getListChallenge(newUser, "accept"); + CommonResponse> result1 = challengeController.getListChallenge(son, + "accept"); //then List challengeDTOList = new ArrayList<>(); @@ -2202,10 +1876,13 @@ public void testIfGetListChallengeChallengeIsFailureTest() { new ChallengeDTO(newChallengeUser.getChallenge(), resultProgressDTOList, null)); challengeDTOList.add( new ChallengeDTO(newChallengeUser1.getChallenge(), progressDTOList, null)); + challengeDTOList.add(new ChallengeDTO(newChallenge2, lowProgressDTOList, null)); + challengeDTOList.add(new ChallengeDTO(newChallenge3, middleProgressDTOList, null)); + + Assertions.assertEquals(failed, newChallenge3.getChallengeStatus()); Assertions.assertEquals(CommonResponse.onSuccess(challengeDTOList).getData(), result1.getData()); - System.out.println("result1 = " + result1.getData()); } @@ -2226,46 +1903,29 @@ public void testIfGetListChallengeChallengeIsAlreadyFailureTest() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - ChallengeRequest challengeRequest1 = new ChallengeRequest(true, "이자율 받기", "전자제품", - "에어팟 펜슬 사기", - 20L, 100000L, 10000L, 10L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(0L).totalPrice(challengeRequest.getTotalPrice()) + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(0L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge1 = Challenge.builder().title(challengeRequest1.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest1.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(failed) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); ChallengeUser newChallengeUser1 = ChallengeUser.builder().challenge(newChallenge1) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); List challengeUserList = new ArrayList<>(); challengeUserList.add(newChallengeUser); @@ -2324,7 +1984,7 @@ public void testIfGetListChallengeChallengeIsAlreadyFailureTest() { .thenReturn(newChallengeUser); Mockito.when(mockChallengeUserRepository.save(newChallengeUser1)) .thenReturn(newChallengeUser1); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); //when @@ -2333,7 +1993,8 @@ public void testIfGetListChallengeChallengeIsAlreadyFailureTest() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - CommonResponse result1 = challengeController.getListChallenge(newUser, "accept"); + CommonResponse> result1 = challengeController.getListChallenge(son, + "accept"); //then List challengeDTOList = new ArrayList<>(); @@ -2353,8 +2014,8 @@ public void testIfGetListChallengeChallengeIsAlreadyFailureTest() { } @Test - @DisplayName("챌린지 리스트 조회 시, 생성한 챌린지가 한 개도 없으면 빈 배열 반환") - public void testIfNotCreateChallengeReturnEmptyList() { + @DisplayName("챌린지 리스트 조회 시, 완주한 챌린지 정상 response 테스트") + public void testIfAchievedChallengeReturn() { //given ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( @@ -2369,17 +2030,47 @@ public void testIfNotCreateChallengeReturnEmptyList() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(3000L) + .weekPrice(1000L).weeks(3L) + .challengeStatus(achieved) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + ChallengeUser newChallengeUser = ChallengeUser.builder().id(1L).user(son) + .challenge(newChallenge) + .member("parent").build(); + + List challengeUserList = new ArrayList<>(); + challengeUserList.add(newChallengeUser); + + Progress progress = Progress.builder().id(1L).isAchieved(true).challenge(newChallenge) + .weeks(1L).build(); - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); + Progress progress1 = Progress.builder().id(2L).isAchieved(true).challenge(newChallenge) + .weeks(2L).build(); - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + Progress progress2 = Progress.builder().id(3L).isAchieved(true).challenge(newChallenge) + .weeks(3L).build(); - List challengeUserList = new ArrayList<>(); + ReflectionTestUtils.setField( + progress, + AbstractTimestamp.class, + "createdAt", + Timestamp.valueOf(LocalDateTime.now().minusDays(25)), + Timestamp.class + ); + + List progressList = List.of(progress, progress1, progress2); + + newChallenge.setProgressList(progressList); + + List progressDTOList = progressList.stream().map(ProgressDTO::new) + .collect(Collectors.toList()); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); //when @@ -2388,13 +2079,12 @@ public void testIfNotCreateChallengeReturnEmptyList() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - CommonResponse result = challengeController.getListChallenge(newUser, "pending"); + CommonResponse> result = challengeController.getListChallenge(son, + "accept"); //then List challengeDTOList = new ArrayList<>(); - for (ChallengeUser r : challengeUserList) { - challengeDTOList.add(new ChallengeDTO(r.getChallenge(), null, null)); - } + challengeDTOList.add(new ChallengeDTO(newChallenge, progressDTOList, null)); Assertions.assertEquals(CommonResponse.onSuccess(challengeDTOList).getData(), result.getData()); @@ -2402,8 +2092,8 @@ public void testIfNotCreateChallengeReturnEmptyList() { @Test - @DisplayName("자녀 돈길 리스트 조회 시, 정상 response 테스트") - public void testIfGetListChildChallengeList() { + @DisplayName("챌린지 리스트 조회 시, 생성한 챌린지가 한 개도 없으면 빈 배열 반환") + public void testIfNotCreateChallengeReturnEmptyList() { //given ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( @@ -2418,79 +2108,106 @@ public void testIfGetListChildChallengeList() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); + List challengeUserList = new ArrayList<>(); + + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) + .thenReturn(challengeUserList); - ChallengeRequest challengeRequest1 = new ChallengeRequest(true, "이자율 받기", "전자제품", "아이팟 사기", - 30L, - 1500L, 100L, 15L, "test"); + //when + ChallengeServiceImpl challengeService = new ChallengeServiceImpl(mockChallengeRepository, + mockChallengeCategoryRepository, mockTargetItemRepository, mockChallengeUserRepository, + mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, + mockKidRepository, mockParentRepository); + ChallengeController challengeController = new ChallengeController(challengeService); + CommonResponse> result = challengeController.getListChallenge(son, + "pending"); - User newUser = User.builder().id(1L).username("user").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); + //then + List challengeDTOList = new ArrayList<>(); + for (ChallengeUser r : challengeUserList) { + challengeDTOList.add(new ChallengeDTO(r.getChallenge(), null, null)); + } - Kid newKid = Kid.builder().id(1L).totalChallenge(0L).achievedChallenge(0L).level(0L) - .savings(0L).user(newUser).build(); + Assertions.assertEquals(CommonResponse.onSuccess(challengeDTOList).getData(), + result.getData()); + } - newUser.setKid(newKid); - User newParent = User.builder().id(2L).username("user1").isFemale(true).birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token") - .build(); + @Test + @DisplayName("자녀 돈길 리스트 조회 시, 정상 response 테스트") + public void testIfGetListChildChallengeList() { - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); + //given + ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( + ChallengeCategoryRepository.class); + TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); + ChallengeRepository mockChallengeRepository = Mockito.mock(ChallengeRepository.class); + ChallengeUserRepository mockChallengeUserRepository = Mockito.mock( + ChallengeUserRepository.class); + ProgressRepository mockProgressRepository = Mockito.mock(ProgressRepository.class); + FamilyUserRepository mockFamilyUserRepository = Mockito.mock(FamilyUserRepository.class); + KidRepository mockKidRepository = Mockito.mock(KidRepository.class); + ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); + CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + son.setKid(sonKid); Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest1.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest1.getInterestRate()).build(); - - Challenge newChallenge2 = Challenge.builder().id(3L).title("티비 사기") - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(0L) - .interestRate(challengeRequest1.getInterestRate()).build(); - - Challenge newChallenge3 = Challenge.builder().id(4L).title("마우스 사기") - .contractUser(newParent) - .isAchieved(2L).totalPrice(30000L) - .weekPrice(10000L).weeks(3L) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(0L) - .interestRate(challengeRequest1.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge2 = Challenge.builder().id(3L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(rejected) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge3 = Challenge.builder().id(4L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().id(1L).challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); ChallengeUser newChallengeUser1 = ChallengeUser.builder().id(2L).challenge(newChallenge1) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); ChallengeUser newChallengeUser2 = ChallengeUser.builder().id(3L).challenge(newChallenge2) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); ChallengeUser newChallengeUser3 = ChallengeUser.builder().id(4L).challenge(newChallenge3) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Family newFamily = Family.builder().id(1L) - .code("adfadfaf").build(); + .code("family").build(); FamilyUser newFamilyUser = FamilyUser.builder().id(1L) - .family(newFamily).user(newParent).build(); + .family(newFamily).user(mom).build(); FamilyUser newFamilyUser1 = FamilyUser.builder().id(2L) - .family(newFamily).user(newUser).build(); + .family(newFamily).user(son).build(); Progress newProgress = Progress.builder().id(1L).challenge(newChallenge1).isAchieved(false) .weeks(1L).build(); @@ -2550,7 +2267,7 @@ public void testIfGetListChildChallengeList() { Progress newProgress1 = Progress.builder().id(2L).challenge(newChallenge1).isAchieved(false) .weeks(2L).build(); - Comment newComment = Comment.builder().id(1L).challenge(newChallenge2).user(newParent) + Comment newComment = Comment.builder().id(1L).challenge(newChallenge2).user(mom) .content("아쉽다").build(); newChallenge2.setComment(newComment); @@ -2583,11 +2300,11 @@ public void testIfGetListChildChallengeList() { challengeDTOList1.add(new ChallengeDTO(newChallenge1, progressDTOList, null)); challengeDTOList1.add(new ChallengeDTO(newChallenge3, successProgressDTOList, null)); - Mockito.when(mockFamilyUserRepository.findByUserId(newParent.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(mom.getId())) .thenReturn(Optional.of(newFamilyUser)); Mockito.when(mockFamilyUserRepository.findByFamily(newFamily)) .thenReturn(familyUserList); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); //when @@ -2596,15 +2313,16 @@ public void testIfGetListChildChallengeList() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - CommonResponse result = challengeController.getListKidChallenge(newParent, newUser.getKid() - .getId(), "accept"); - CommonResponse result1 = challengeController.getListKidChallenge(newParent, - newUser.getKid().getId(), "pending"); + CommonResponse result = challengeController.getListKidChallenge(mom, + son.getKid() + .getId(), "accept"); + CommonResponse result1 = challengeController.getListKidChallenge(mom, + son.getKid().getId(), "pending"); //then - KidChallengeListDTO kidChallengeListDTOResult = new KidChallengeListDTO(newUser, + KidChallengeListDTO kidChallengeListDTOResult = new KidChallengeListDTO(son, challengeDTOList); - KidChallengeListDTO kidChallengeListDTO = new KidChallengeListDTO(newUser, + KidChallengeListDTO kidChallengeListDTO = new KidChallengeListDTO(son, challengeDTOList1); Assertions.assertEquals(CommonResponse.onSuccess(kidChallengeListDTO).getData(), @@ -2630,70 +2348,49 @@ public void testIfUpdateChallengeStatusIsSuccess() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - ChallengeRequest challengeRequest1 = new ChallengeRequest(true, "이자율 받기", "전자제품", "아이팟 사기", - 30L, - 1500L, 100L, 15L, "test"); + son.setKid(sonKid); + mom.setParent(momParent); KidChallengeRequest successKidChallengeRequest = new KidChallengeRequest(true, null); - KidChallengeRequest falseKidChallengeRequest = new KidChallengeRequest(false, "아쉽다"); - - User newUser = User.builder().id(1L).username("user").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - Kid newKid = Kid.builder().savings(0L).achievedChallenge(0L).level(0L).totalChallenge(0L) - .user(newUser).build(); - newUser.setKid(newKid); - - User newParent = User.builder().id(2L).username("user1").isFemale(true).birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token") - .build(); - - Parent parent = Parent.builder().acceptedRequest(0L) - .totalRequest(0L).user(newParent).build(); - newParent.setParent(parent); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + KidChallengeRequest falseKidChallengeRequest = new KidChallengeRequest(false, "아쉽구나"); Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest1.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest1.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().id(1L).challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); ChallengeUser newChallengeUser1 = ChallengeUser.builder().id(2L).challenge(newChallenge1) .member("parent") - .user(newUser).build(); + .user(son).build(); Family newFamily = Family.builder().id(1L) .code("adfadfaf").build(); FamilyUser newFamilyUser = FamilyUser.builder().id(1L) - .family(newFamily).user(newParent).build(); + .family(newFamily).user(mom).build(); FamilyUser newFamilyUser1 = FamilyUser.builder().id(2L) - .family(newFamily).user(newUser).build(); + .family(newFamily).user(son).build(); List progressDTOList = new ArrayList<>(); for (int i = 1; i <= newChallenge.getWeeks(); i++) { - Progress newProgress = Progress.builder().weeks(Long.valueOf(i)) + Progress newProgress = Progress.builder().weeks((long) i) .challenge(newChallenge) .isAchieved(false).build(); progressDTOList.add(new ProgressDTO(newProgress)); @@ -2707,17 +2404,17 @@ public void testIfUpdateChallengeStatusIsSuccess() { familyUserList.add(newFamilyUser1); Comment newComment = Comment.builder().content(falseKidChallengeRequest.getComment()) - .challenge(newChallenge1).user(newParent).build(); + .challenge(newChallenge1).user(mom).build(); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); Mockito.when(mockChallengeRepository.findById(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockChallengeRepository.findById(newChallenge1.getId())) - .thenReturn(Optional.ofNullable(newChallenge1)); - Mockito.when(mockFamilyUserRepository.findByUserId(newParent.getId())) + .thenReturn(Optional.of(newChallenge1)); + Mockito.when(mockFamilyUserRepository.findByUserId(mom.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) .thenReturn(Optional.ofNullable(newFamilyUser1)); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) .thenReturn(Optional.ofNullable(newChallengeUser)); @@ -2733,15 +2430,13 @@ public void testIfUpdateChallengeStatusIsSuccess() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - CommonResponse successResult = challengeController.patchChallengeStatus(newParent, + CommonResponse successResult = challengeController.patchChallengeStatus(mom, newChallenge.getId(), successKidChallengeRequest); - CommonResponse falseResult = challengeController.patchChallengeStatus(newParent, + CommonResponse falseResult = challengeController.patchChallengeStatus(mom, newChallenge1.getId(), falseKidChallengeRequest); //then - newChallenge.setStatus(2L); - newChallenge1.setStatus(0L); newChallenge1.setComment(newComment); ChallengeDTO successChallengeDTO = new ChallengeDTO(newChallenge, progressDTOList, null); ChallengeDTO falseChallengeDTO = new ChallengeDTO(newChallenge1, null, newComment); @@ -2767,57 +2462,44 @@ public void testIfUpdateChallengeStatusNotExistChallengeBadRequestErr() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - ChallengeRequest challengeRequest1 = new ChallengeRequest(true, "이자율 받기", "전자제품", "아이팟 사기", - 30L, - 1500L, 100L, 15L, "test"); + son.setKid(sonKid); + mom.setParent(momParent); KidChallengeRequest kidChallengeRequest = new KidChallengeRequest(true, null); - User newUser = User.builder().id(1L).username("user").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("user1").isFemale(true).birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest1.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest1.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().id(1L).challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); ChallengeUser newChallengeUser1 = ChallengeUser.builder().id(2L).challenge(newChallenge1) .member("parent") - .user(newUser).build(); + .user(son).build(); Family newFamily = Family.builder().id(1L) - .code("adfadfaf").build(); + .code("family").build(); FamilyUser newFamilyUser = FamilyUser.builder().id(1L) - .family(newFamily).user(newParent).build(); + .family(newFamily).user(mom).build(); FamilyUser newFamilyUser1 = FamilyUser.builder().id(2L) - .family(newFamily).user(newUser).build(); + .family(newFamily).user(son).build(); List challengeUserList = new ArrayList<>(); challengeUserList.add(newChallengeUser); @@ -2826,15 +2508,15 @@ public void testIfUpdateChallengeStatusNotExistChallengeBadRequestErr() { familyUserList.add(newFamilyUser); familyUserList.add(newFamilyUser1); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); Mockito.when(mockChallengeRepository.findById(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockChallengeRepository.findById(newChallenge1.getId())) - .thenReturn(Optional.ofNullable(newChallenge1)); - Mockito.when(mockFamilyUserRepository.findByUserId(newParent.getId())) + .thenReturn(Optional.of(newChallenge1)); + Mockito.when(mockFamilyUserRepository.findByUserId(mom.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) .thenReturn(Optional.ofNullable(newFamilyUser1)); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) .thenReturn(Optional.ofNullable(newChallengeUser)); @@ -2852,17 +2534,16 @@ public void testIfUpdateChallengeStatusNotExistChallengeBadRequestErr() { ChallengeController challengeController = new ChallengeController(challengeService); //then - Assertions.assertThrows(BadRequestException.class, () -> { - challengeController.patchChallengeStatus(newParent, 150L, - kidChallengeRequest); - }); + Assertions.assertThrows(BadRequestException.class, () -> + challengeController.patchChallengeStatus(mom, 150L, + kidChallengeRequest)); } + //Todo: 이거부터 해야함 @Test @DisplayName("자녀 돈길 요청 수락 / 거절 시, 자녀가 챌린지 생성 개수 제한 도달 시, 403 에러 테스트") public void testIfUpdateChallengeStatusMaxCountForbiddenErr() { - UserRepository mockUserRepository = Mockito.mock(UserRepository.class); ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( ChallengeCategoryRepository.class); TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); @@ -2874,126 +2555,109 @@ public void testIfUpdateChallengeStatusMaxCountForbiddenErr() { CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - BindingResult mockBindingResult = Mockito.mock(BindingResult.class); //given - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); KidChallengeRequest kidChallengeRequest = new KidChallengeRequest(true, null); - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token1") - .build(); - - User newFather = User.builder().id(3L).username("parent2").isFemale(false) - .birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token1") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge5 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge1 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge2 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge2 = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge3 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge3 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge4 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge4 = Challenge.builder().id(1L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge6 = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge5 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); - Family newFamily = Family.builder().code("asdfasdf").build(); + Family newFamily = Family.builder().code("family").build(); - FamilyUser newFamilyUser = FamilyUser.builder().user(newUser).family(newFamily).build(); + FamilyUser newFamilyUser = FamilyUser.builder().user(son).family(newFamily).build(); - FamilyUser newFamilyFather = FamilyUser.builder().user(newFather).family(newFamily).build(); + FamilyUser newFamilyFather = FamilyUser.builder().user(father).family(newFamily).build(); - FamilyUser newFamilyParent = FamilyUser.builder().user(newParent).family(newFamily).build(); + FamilyUser newFamilyParent = FamilyUser.builder().user(mom).family(newFamily).build(); - ChallengeUser newChallengeUser1 = ChallengeUser.builder().user(newUser) + ChallengeUser newChallengeUser1 = ChallengeUser.builder().user(son) .challenge(newChallenge1).member("parent").build(); - ChallengeUser newChallengeUser2 = ChallengeUser.builder().user(newUser) + ChallengeUser newChallengeUser2 = ChallengeUser.builder().user(son) .challenge(newChallenge2).member("parent").build(); - ChallengeUser newChallengeUser3 = ChallengeUser.builder().user(newUser) + ChallengeUser newChallengeUser3 = ChallengeUser.builder().user(son) .challenge(newChallenge3).member("parent").build(); - ChallengeUser newChallengeUser4 = ChallengeUser.builder().user(newUser) + ChallengeUser newChallengeUser4 = ChallengeUser.builder().user(son) .challenge(newChallenge4).member("parent").build(); - ChallengeUser newChallengeUser5 = ChallengeUser.builder().user(newUser) + ChallengeUser newChallengeUser5 = ChallengeUser.builder().user(son) .challenge(newChallenge5).member("parent").build(); - ChallengeUser newChallengeUser6 = ChallengeUser.builder().user(newUser) - .challenge(newChallenge6).member("parent").build(); + ChallengeUser newChallengeUser = ChallengeUser.builder().user(son) + .challenge(newChallenge).member("parent").build(); List challengeUserList = List.of(newChallengeUser1, newChallengeUser2, - newChallengeUser3, newChallengeUser4, newChallengeUser5, newChallengeUser6); + newChallengeUser3, newChallengeUser4, newChallengeUser5, newChallengeUser); List familyUserList = new ArrayList<>(); familyUserList.add(newFamilyFather); familyUserList.add(newFamilyParent); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); Mockito.when(mockFamilyUserRepository.findByFamily(newFamily)) .thenReturn(familyUserList); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); - Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge6.getId())) - .thenReturn(Optional.of(newChallengeUser6)); + Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) + .thenReturn(Optional.of(newChallengeUser)); Mockito.when(mockChallengeRepository.save(newChallenge)).thenReturn(newChallenge); Mockito.when(mockChallengeRepository.findById(1L)) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockTargetItemRepository.findByName(newTargetItem.getName())) .thenReturn(newTargetItem); Mockito.when( @@ -3009,7 +2673,7 @@ public void testIfUpdateChallengeStatusMaxCountForbiddenErr() { //then Assertions.assertThrows(ForbiddenException.class, - () -> challengeController.patchChallengeStatus(newParent, newChallenge6.getId(), + () -> challengeController.patchChallengeStatus(mom, newChallenge.getId(), kidChallengeRequest)); } @@ -3030,65 +2694,44 @@ public void testIfUpdateChallengeStatusNotAuthUserForbiddenErr() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - ChallengeRequest challengeRequest1 = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 1500L, 100L, 15L, "test"); - KidChallengeRequest kidChallengeRequest = new KidChallengeRequest(true, null); - User newUser = User.builder().id(1L).username("user").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("user1").isFemale(true).birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token") - .build(); - - User newParent1 = User.builder().id(3L).username("user1").isFemale(false) - .birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()).contractUser(newParent) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest1.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest1.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().id(1L).challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); ChallengeUser newChallengeUser1 = ChallengeUser.builder().id(2L).challenge(newChallenge1) .member("parent") - .user(newUser).build(); + .user(son).build(); Family newFamily = Family.builder().id(1L) .code("adfadfaf").build(); FamilyUser newFamilyUser = FamilyUser.builder().id(1L) - .family(newFamily).user(newParent).build(); + .family(newFamily).user(mom).build(); FamilyUser newFamilyUser1 = FamilyUser.builder().id(2L) - .family(newFamily).user(newUser).build(); + .family(newFamily).user(son).build(); FamilyUser newFamilyUser2 = FamilyUser.builder().id(3L) - .family(newFamily).user(newParent1).build(); + .family(newFamily).user(father).build(); List challengeUserList = new ArrayList<>(); challengeUserList.add(newChallengeUser); @@ -3098,17 +2741,17 @@ public void testIfUpdateChallengeStatusNotAuthUserForbiddenErr() { familyUserList.add(newFamilyUser1); familyUserList.add(newFamilyUser2); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); Mockito.when(mockChallengeRepository.findById(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockChallengeRepository.findById(newChallenge1.getId())) - .thenReturn(Optional.ofNullable(newChallenge1)); - Mockito.when(mockFamilyUserRepository.findByUserId(newParent1.getId())) + .thenReturn(Optional.of(newChallenge1)); + Mockito.when(mockFamilyUserRepository.findByUserId(father.getId())) .thenReturn(Optional.ofNullable(newFamilyUser2)); - Mockito.when(mockFamilyUserRepository.findByUserId(newParent.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(mom.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) .thenReturn(Optional.ofNullable(newChallengeUser)); @@ -3126,10 +2769,9 @@ public void testIfUpdateChallengeStatusNotAuthUserForbiddenErr() { ChallengeController challengeController = new ChallengeController(challengeService); //then - Assertions.assertThrows(ForbiddenException.class, () -> { - challengeController.patchChallengeStatus(newParent1, newChallenge.getId(), - kidChallengeRequest); - }); + Assertions.assertThrows(ForbiddenException.class, () -> + challengeController.patchChallengeStatus(father, newChallenge.getId(), + kidChallengeRequest)); } @Test @@ -3149,57 +2791,41 @@ public void testIfUpdateChallengeStatusAlreadyChallengeBadRequestErr() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - ChallengeRequest challengeRequest1 = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 1500L, 100L, 15L, "test"); - KidChallengeRequest kidChallengeRequest = new KidChallengeRequest(true, null); - User newUser = User.builder().id(1L).username("user").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("user1").isFemale(true).birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); - - Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest1.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest1.getTotalPrice()) - .weekPrice(challengeRequest1.getWeekPrice()).weeks(challengeRequest1.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest1.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().id(1L).challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); ChallengeUser newChallengeUser1 = ChallengeUser.builder().id(2L).challenge(newChallenge1) .member("parent") - .user(newUser).build(); + .user(son).build(); Family newFamily = Family.builder().id(1L) .code("adfadfaf").build(); FamilyUser newFamilyUser = FamilyUser.builder().id(1L) - .family(newFamily).user(newParent).build(); + .family(newFamily).user(mom).build(); FamilyUser newFamilyUser1 = FamilyUser.builder().id(2L) - .family(newFamily).user(newUser).build(); + .family(newFamily).user(son).build(); List challengeUserList = new ArrayList<>(); challengeUserList.add(newChallengeUser); @@ -3208,15 +2834,15 @@ public void testIfUpdateChallengeStatusAlreadyChallengeBadRequestErr() { familyUserList.add(newFamilyUser); familyUserList.add(newFamilyUser1); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); Mockito.when(mockChallengeRepository.findById(newChallenge.getId())) - .thenReturn(Optional.ofNullable(newChallenge)); + .thenReturn(Optional.of(newChallenge)); Mockito.when(mockChallengeRepository.findById(newChallenge1.getId())) - .thenReturn(Optional.ofNullable(newChallenge1)); - Mockito.when(mockFamilyUserRepository.findByUserId(newParent.getId())) + .thenReturn(Optional.of(newChallenge1)); + Mockito.when(mockFamilyUserRepository.findByUserId(mom.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); - Mockito.when(mockFamilyUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(son.getId())) .thenReturn(Optional.ofNullable(newFamilyUser1)); Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) .thenReturn(Optional.ofNullable(newChallengeUser)); @@ -3234,10 +2860,9 @@ public void testIfUpdateChallengeStatusAlreadyChallengeBadRequestErr() { ChallengeController challengeController = new ChallengeController(challengeService); //then - Assertions.assertThrows(BadRequestException.class, () -> { - challengeController.patchChallengeStatus(newParent, newChallenge.getId(), - kidChallengeRequest); - }); + Assertions.assertThrows(BadRequestException.class, () -> + challengeController.patchChallengeStatus(mom, newChallenge.getId(), + kidChallengeRequest)); } @Test @@ -3257,53 +2882,48 @@ public void testIfReadWeekInfo() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("user1").isFemale(true).birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + Challenge newChallenge1 = Challenge.builder().id(2L).title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().id(1L).challenge(newChallenge) - .member("parent").user(newUser).build(); - - Family newFamily = Family.builder().id(1L) - .code("adfadfaf").build(); + .member("parent").user(son).build(); - FamilyUser newFamilyUser = FamilyUser.builder().id(1L) - .family(newFamily).user(newParent).build(); + ChallengeUser newChallengeUser1 = ChallengeUser.builder().id(2L).challenge(newChallenge1) + .member("parent").user(son).build(); List challengeUserList = new ArrayList<>(); challengeUserList.add(newChallengeUser); - - List familyUserList = new ArrayList<>(); - familyUserList.add(newFamilyUser); + challengeUserList.add(newChallengeUser1); List progressList = new ArrayList<>(); + List progressList1 = new ArrayList<>(); - for (Long i = 1L; i <= newChallenge.getWeeks(); i++) { + for (long i = 1L; i <= challengeRequest.getWeeks(); i++) { Progress newProgress = Progress.builder().weeks(i).challenge(newChallenge) .isAchieved(false).build(); - if (i == 1L) { + Progress newProgress1 = Progress.builder().weeks(i).challenge(newChallenge1) + .isAchieved(false).build(); + if (i == 1L || i == 2L) { newProgress.setIsAchieved(true); + newProgress1.setIsAchieved(true); } progressList.add(newProgress); + progressList1.add(newProgress1); } ReflectionTestUtils.setField( @@ -3314,9 +2934,18 @@ public void testIfReadWeekInfo() { Timestamp.class ); + ReflectionTestUtils.setField( + progressList1.get(0), + AbstractTimestamp.class, + "createdAt", + Timestamp.valueOf(LocalDateTime.now()), + Timestamp.class + ); + newChallenge.setProgressList(progressList); + newChallenge1.setProgressList(progressList1); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); //when @@ -3325,10 +2954,11 @@ public void testIfReadWeekInfo() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - CommonResponse result = challengeController.getWeekInfo(newUser); + CommonResponse result = challengeController.getWeekInfo(son); //then - WeekDTO weekDTO1 = new WeekDTO(newChallenge.getWeekPrice(), newChallenge.getWeekPrice()); + WeekDTO weekDTO1 = new WeekDTO(newChallenge.getWeekPrice() + newChallenge1.getWeekPrice(), + newChallenge.getWeekPrice() + newChallenge1.getWeekPrice()); Assertions.assertEquals(weekDTO1, result.getData()); } @@ -3350,45 +2980,26 @@ public void testIfReadKidWeekInfo() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - Kid newKid = Kid.builder().id(1L).totalChallenge(0L).achievedChallenge(0L).savings(0L) - .user(newUser).level(0L).build(); - - newUser.setKid(newKid); - - User newParent = User.builder().id(2L).username("user1").isFemale(true).birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().id(1L).challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Family newFamily = Family.builder().id(1L) .code("adfadfaf").build(); FamilyUser newFamilyUser = FamilyUser.builder().id(1L) - .family(newFamily).user(newParent).build(); + .family(newFamily).user(mom).build(); FamilyUser newFamilyUser1 = FamilyUser.builder().id(2L) - .family(newFamily).user(newUser).build(); + .family(newFamily).user(son).build(); List challengeUserList = new ArrayList<>(); challengeUserList.add(newChallengeUser); @@ -3399,7 +3010,7 @@ public void testIfReadKidWeekInfo() { List progressList = new ArrayList<>(); - for (Long i = 1L; i <= newChallenge.getWeeks(); i++) { + for (long i = 1L; i <= newChallenge.getWeeks(); i++) { Progress newProgress = Progress.builder().weeks(i).challenge(newChallenge) .isAchieved(false).build(); if (i == 1L) { @@ -3418,10 +3029,10 @@ public void testIfReadKidWeekInfo() { newChallenge.setProgressList(progressList); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); - Mockito.when(mockFamilyUserRepository.findByUserId(newParent.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(mom.getId())) .thenReturn(Optional.ofNullable(newFamilyUser)); Mockito.when(mockFamilyUserRepository.findByFamily(newFamily)) @@ -3433,18 +3044,19 @@ public void testIfReadKidWeekInfo() { mockProgressRepository, mockFamilyUserRepository, mockCommentRepository, mockKidRepository, mockParentRepository); ChallengeController challengeController = new ChallengeController(challengeService); - CommonResponse result = challengeController.getKidWeekInfo(newParent, - newUser.getKid().getId()); + CommonResponse result = challengeController.getKidWeekInfo(mom, + son.getKid().getId()); //then WeekDTO weekDTO1 = new WeekDTO(newChallenge.getWeekPrice(), newChallenge.getWeekPrice()); + KidWeekDTO kidWeekDTO = new KidWeekDTO(sonKid, weekDTO1); - Assertions.assertEquals(weekDTO1, result.getData()); + Assertions.assertEquals(kidWeekDTO, result.getData()); } @Test @DisplayName("자녀의 주차 정보 가져오기 API 실행 시, 가족이 없을 때, 400 에러") - public void testIfReadKidWeekInfoNotExsitFamilyBadRequestErr() { + public void testIfReadKidWeekInfoNotExistFamilyBadRequestErr() { //given ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( @@ -3459,48 +3071,25 @@ public void testIfReadKidWeekInfoNotExsitFamilyBadRequestErr() { ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); CommentRepository mockCommentRepository = Mockito.mock(CommentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - Kid newKid = Kid.builder().id(2L).totalChallenge(0L).achievedChallenge(0L).savings(0L) - .user(newUser).level(0L).build(); - - newUser.setKid(newKid); - - User newParent = User.builder().id(2L).username("user1").isFemale(true).birthday("19990623") - .authenticationCode("code1").provider("kakao").isKid(false).refreshToken("token") - .build(); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + son.setKid(sonKid); Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().id(1L).challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Family newFamily = Family.builder().id(1L) - .code("adfadfaf").build(); - - Family newFamily1 = Family.builder().id(2L) - .code("afasdfasdf").build(); + .code("family").build(); FamilyUser newFamilyUser = FamilyUser.builder().id(1L) - .family(newFamily).user(newParent).build(); - - FamilyUser newFamilyUser1 = FamilyUser.builder().id(2L) - .family(newFamily1).user(newUser).build(); + .family(newFamily).user(mom).build(); List challengeUserList = new ArrayList<>(); challengeUserList.add(newChallengeUser); @@ -3508,11 +3097,9 @@ public void testIfReadKidWeekInfoNotExsitFamilyBadRequestErr() { List familyUserList = new ArrayList<>(); familyUserList.add(newFamilyUser); - List familyUserList1 = List.of(newFamilyUser1); - List progressList = new ArrayList<>(); - for (Long i = 1L; i <= newChallenge.getWeeks(); i++) { + for (long i = 1L; i <= newChallenge.getWeeks(); i++) { Progress newProgress = Progress.builder().weeks(i).challenge(newChallenge) .isAchieved(false).build(); if (i == 1L) { @@ -3531,9 +3118,9 @@ public void testIfReadKidWeekInfoNotExsitFamilyBadRequestErr() { newChallenge.setProgressList(progressList); - Mockito.when(mockChallengeUserRepository.findByUserId(newUser.getId())) + Mockito.when(mockChallengeUserRepository.findByUserId(son.getId())) .thenReturn(challengeUserList); - Mockito.when(mockFamilyUserRepository.findByUserId(newParent.getId())) + Mockito.when(mockFamilyUserRepository.findByUserId(mom.getId())) .thenReturn(Optional.of(newFamilyUser)); Mockito.when(mockFamilyUserRepository.findByFamily(newFamily)) .thenReturn(familyUserList); @@ -3546,6 +3133,6 @@ public void testIfReadKidWeekInfoNotExsitFamilyBadRequestErr() { //then Assertions.assertThrows(BadRequestException.class, - () -> challengeController.getKidWeekInfo(newParent, newUser.getKid().getId())); + () -> challengeController.getKidWeekInfo(mom, son.getKid().getId())); } } diff --git a/src/test/java/com/ceos/bankids/unit/controller/ProgressControllerTest.java b/src/test/java/com/ceos/bankids/unit/controller/ProgressControllerTest.java index eb12f661..7d595a2f 100644 --- a/src/test/java/com/ceos/bankids/unit/controller/ProgressControllerTest.java +++ b/src/test/java/com/ceos/bankids/unit/controller/ProgressControllerTest.java @@ -1,5 +1,6 @@ package com.ceos.bankids.unit.controller; +import com.ceos.bankids.Enum.ChallengeStatus; import com.ceos.bankids.config.CommonResponse; import com.ceos.bankids.controller.ProgressController; import com.ceos.bankids.controller.request.ChallengeRequest; @@ -15,14 +16,10 @@ import com.ceos.bankids.dto.ProgressDTO; import com.ceos.bankids.exception.BadRequestException; import com.ceos.bankids.exception.ForbiddenException; -import com.ceos.bankids.repository.ChallengeCategoryRepository; import com.ceos.bankids.repository.ChallengeRepository; import com.ceos.bankids.repository.ChallengeUserRepository; -import com.ceos.bankids.repository.FamilyUserRepository; import com.ceos.bankids.repository.KidRepository; -import com.ceos.bankids.repository.ParentRepository; import com.ceos.bankids.repository.ProgressRepository; -import com.ceos.bankids.repository.TargetItemRepository; import com.ceos.bankids.service.ProgressServiceImpl; import java.sql.Timestamp; import java.time.LocalDateTime; @@ -38,57 +35,61 @@ public class ProgressControllerTest { + + // Enum ChallengeStatus + private static final ChallengeStatus pending = ChallengeStatus.PENDING; + private static final ChallengeStatus walking = ChallengeStatus.WALKING; + private static final ChallengeStatus achieved = ChallengeStatus.ACHIEVED; + private static final ChallengeStatus failed = ChallengeStatus.FAILED; + private static final ChallengeStatus rejected = ChallengeStatus.REJECTED; + private static final ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", + "전자제품", "테스트용 돈길", 30L, 30000L, + 10000L, 3L, "test"); + private static final User son = User.builder().id(1L).username("son").birthday("19990623") + .authenticationCode("code") + .provider("kakao").isKid(true).isFemale(false).refreshToken("token").build(); + private static final User mom = User.builder().id(2L).username("mom").birthday("19440505") + .authenticationCode("code").provider("kakao").isKid(false).isFemale(true) + .refreshToken("token").build(); + private static final User father = User.builder().id(3L).username("father").isKid(false) + .isFemale(false).authenticationCode("code").provider("kakao").refreshToken("token").build(); + private static final User daughter = User.builder().id(4L).username("daughter").isKid(true) + .isFemale(true).authenticationCode("code").provider("kakao").refreshToken("token").build(); + private static final Kid sonKid = Kid.builder().id(1L).achievedChallenge(0L).totalChallenge(0L) + .user(son).level(0L).savings(0L).build(); + private static final Parent momParent = Parent.builder().id(1L).acceptedRequest(0L) + .totalRequest(0L).user(mom).build(); + private static final Parent fatherParent = Parent.builder().id(2L).acceptedRequest(0L) + .totalRequest(0L).user(father).build(); + ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) + .category("이자율 받기").build(); + TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + @Test - @DisplayName("돈길 걷기 요청 시, 프로그레스의 row가 정상적으로 업데이트 되는지 테스트") + @DisplayName("돈길 걷기 요청 시, 프로그레스가 정상적으로 업데이트 되는지 테스트") public void testIfSavingsProgressRowUpdate() { //given - ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( - ChallengeCategoryRepository.class); - TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); ChallengeRepository mockChallengeRepository = Mockito.mock(ChallengeRepository.class); ChallengeUserRepository mockChallengeUserRepository = Mockito.mock( ChallengeUserRepository.class); ProgressRepository mockProgressRepository = Mockito.mock(ProgressRepository.class); - FamilyUserRepository mockFamilyUserRepository = Mockito.mock(FamilyUserRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); - ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - Kid newKid = Kid.builder().user(newUser).savings(0L).build(); - newUser.setKid(newKid); - - Parent parent = Parent.builder().user(newParent).build(); - newParent.setParent(parent); - newParent.setParent(parent); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + son.setKid(sonKid); + mom.setParent(momParent); Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .successWeeks(0L) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()).successWeeks(0L) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder() .id(1L) @@ -117,11 +118,12 @@ public void testIfSavingsProgressRowUpdate() { //when ProgressServiceImpl progressService = new ProgressServiceImpl(mockProgressRepository, - mockChallengeUserRepository, mockChallengeRepository, mockFamilyUserRepository, - mockKidRepository, mockParentRepository); + mockChallengeUserRepository, mockChallengeRepository, + mockKidRepository); ProgressController progressController = new ProgressController(progressService); ProgressDTO progressDTO = new ProgressDTO(newProgress); - CommonResponse result = progressController.patchProgress(newUser, newChallenge.getId()); + CommonResponse result = progressController.patchProgress(son, + newChallenge.getId()); //then ArgumentCaptor pCaptor = ArgumentCaptor.forClass(Long.class); @@ -143,52 +145,26 @@ public void testIfSavingsProgressRowUpdate() { public void testIfSavingsProgressChallengeSuccessRowUpdate() { //given - ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( - ChallengeCategoryRepository.class); - TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); ChallengeRepository mockChallengeRepository = Mockito.mock(ChallengeRepository.class); ChallengeUserRepository mockChallengeUserRepository = Mockito.mock( ChallengeUserRepository.class); ProgressRepository mockProgressRepository = Mockito.mock(ProgressRepository.class); - FamilyUserRepository mockFamilyUserRepository = Mockito.mock(FamilyUserRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); - ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 30000L, 10000L, 3L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - Kid newKid = Kid.builder().user(newUser).savings(0L).build(); - newUser.setKid(newKid); - - Parent parent = Parent.builder().user(newParent).build(); - newParent.setParent(parent); - newParent.setParent(parent); + son.setKid(sonKid); + mom.setParent(momParent); - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .successWeeks(2L) + Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking).successWeeks(2L) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder() .id(1L) @@ -235,11 +211,12 @@ public void testIfSavingsProgressChallengeSuccessRowUpdate() { //when ProgressServiceImpl progressService = new ProgressServiceImpl(mockProgressRepository, - mockChallengeUserRepository, mockChallengeRepository, mockFamilyUserRepository, - mockKidRepository, mockParentRepository); + mockChallengeUserRepository, mockChallengeRepository, + mockKidRepository); ProgressController progressController = new ProgressController(progressService); ProgressDTO progressDTO = new ProgressDTO(newProgress2); - CommonResponse result = progressController.patchProgress(newUser, newChallenge.getId()); + CommonResponse result = progressController.patchProgress(son, + newChallenge.getId()); //then ArgumentCaptor pCaptor = ArgumentCaptor.forClass(Long.class); @@ -250,9 +227,8 @@ public void testIfSavingsProgressChallengeSuccessRowUpdate() { Assertions.assertEquals(newProgress.getChallenge().getId(), pCaptor.getValue()); Assertions.assertEquals(newProgress2.getWeeks(), wCaptor.getValue()); - Assertions.assertEquals(2L, newChallenge.getIsAchieved()); - Assertions.assertEquals(0L, newChallenge.getStatus()); - Assertions.assertEquals(39000L, newKid.getSavings()); + Assertions.assertEquals(achieved, newChallenge.getChallengeStatus()); + Assertions.assertEquals(39000L, sonKid.getSavings()); Assertions.assertEquals(3L, newChallenge.getSuccessWeeks()); Assertions.assertEquals(true, newProgress2.getIsAchieved()); @@ -264,52 +240,26 @@ public void testIfSavingsProgressChallengeSuccessRowUpdate() { public void testIfSavingsProgressParentUserForbiddenErr() { //given - ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( - ChallengeCategoryRepository.class); - TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); ChallengeRepository mockChallengeRepository = Mockito.mock(ChallengeRepository.class); ChallengeUserRepository mockChallengeUserRepository = Mockito.mock( ChallengeUserRepository.class); ProgressRepository mockProgressRepository = Mockito.mock(ProgressRepository.class); - FamilyUserRepository mockFamilyUserRepository = Mockito.mock(FamilyUserRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); - ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - Kid newKid = Kid.builder().user(newUser).savings(0L).build(); - newUser.setKid(newKid); - Parent parent = Parent.builder().user(newParent).build(); - newParent.setParent(parent); - - newParent.setParent(parent); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + son.setKid(sonKid); + mom.setParent(momParent); Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .successWeeks(0L) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(1L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder() .id(1L) @@ -338,14 +288,13 @@ public void testIfSavingsProgressParentUserForbiddenErr() { //when ProgressServiceImpl progressService = new ProgressServiceImpl(mockProgressRepository, - mockChallengeUserRepository, mockChallengeRepository, mockFamilyUserRepository, - mockKidRepository, mockParentRepository); + mockChallengeUserRepository, mockChallengeRepository, + mockKidRepository); ProgressController progressController = new ProgressController(progressService); - ProgressDTO progressDTO = new ProgressDTO(newProgress); //then Assertions.assertThrows(ForbiddenException.class, - () -> progressController.patchProgress(newParent, newChallenge.getId())); + () -> progressController.patchProgress(mom, newChallenge.getId())); } @Test @@ -353,52 +302,26 @@ public void testIfSavingsProgressParentUserForbiddenErr() { public void testIfSavingsProgressNotRunningChallengeForbiddenErr() { //given - ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( - ChallengeCategoryRepository.class); - TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); ChallengeRepository mockChallengeRepository = Mockito.mock(ChallengeRepository.class); ChallengeUserRepository mockChallengeUserRepository = Mockito.mock( ChallengeUserRepository.class); ProgressRepository mockProgressRepository = Mockito.mock(ProgressRepository.class); - FamilyUserRepository mockFamilyUserRepository = Mockito.mock(FamilyUserRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); - ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 150000L, 10000L, 15L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - Kid newKid = Kid.builder().user(newUser).savings(0L).build(); - newUser.setKid(newKid); - - Parent parent = Parent.builder().user(newParent).build(); - newParent.setParent(parent); - - newParent.setParent(parent); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + son.setKid(sonKid); + mom.setParent(momParent); Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(0L).totalPrice(challengeRequest.getTotalPrice()) - .successWeeks(0L) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(0L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder() .id(1L) @@ -427,14 +350,13 @@ public void testIfSavingsProgressNotRunningChallengeForbiddenErr() { //when ProgressServiceImpl progressService = new ProgressServiceImpl(mockProgressRepository, - mockChallengeUserRepository, mockChallengeRepository, mockFamilyUserRepository, - mockKidRepository, mockParentRepository); + mockChallengeUserRepository, mockChallengeRepository, + mockKidRepository); ProgressController progressController = new ProgressController(progressService); - ProgressDTO progressDTO = new ProgressDTO(newProgress); //then Assertions.assertThrows(BadRequestException.class, - () -> progressController.patchProgress(newUser, newChallenge.getId())); + () -> progressController.patchProgress(son, newChallenge.getId())); } @Test @@ -442,52 +364,26 @@ public void testIfSavingsProgressNotRunningChallengeForbiddenErr() { public void testIfSavingsProgressBetterThanChallengeWeeksBadRequestErr() { //given - ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( - ChallengeCategoryRepository.class); - TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); ChallengeRepository mockChallengeRepository = Mockito.mock(ChallengeRepository.class); ChallengeUserRepository mockChallengeUserRepository = Mockito.mock( ChallengeUserRepository.class); ProgressRepository mockProgressRepository = Mockito.mock(ProgressRepository.class); - FamilyUserRepository mockFamilyUserRepository = Mockito.mock(FamilyUserRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); - ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 30000L, 10000L, 3L, "test"); + son.setKid(sonKid); + mom.setParent(momParent); - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - Kid newKid = Kid.builder().user(newUser).savings(0L).build(); - newUser.setKid(newKid); - - Parent parent = Parent.builder().user(newParent).build(); - newParent.setParent(parent); - - newParent.setParent(parent); - - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); - - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .successWeeks(2L) + Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(pending) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder() .id(1L) @@ -534,14 +430,13 @@ public void testIfSavingsProgressBetterThanChallengeWeeksBadRequestErr() { //when ProgressServiceImpl progressService = new ProgressServiceImpl(mockProgressRepository, - mockChallengeUserRepository, mockChallengeRepository, mockFamilyUserRepository, - mockKidRepository, mockParentRepository); + mockChallengeUserRepository, mockChallengeRepository, + mockKidRepository); ProgressController progressController = new ProgressController(progressService); - ProgressDTO progressDTO = new ProgressDTO(newProgress2); //then Assertions.assertThrows(BadRequestException.class, - () -> progressController.patchProgress(newUser, + () -> progressController.patchProgress(son, newChallenge.getId())); } @@ -550,52 +445,26 @@ public void testIfSavingsProgressBetterThanChallengeWeeksBadRequestErr() { public void testIfSavingsProgressAlreadyRunningWeeksBadRequestErr() { //given - ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( - ChallengeCategoryRepository.class); - TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); ChallengeRepository mockChallengeRepository = Mockito.mock(ChallengeRepository.class); ChallengeUserRepository mockChallengeUserRepository = Mockito.mock( ChallengeUserRepository.class); ProgressRepository mockProgressRepository = Mockito.mock(ProgressRepository.class); - FamilyUserRepository mockFamilyUserRepository = Mockito.mock(FamilyUserRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); - ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 30000L, 10000L, 3L, "test"); - - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); - - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") - .build(); - - Kid newKid = Kid.builder().user(newUser).savings(0L).build(); - newUser.setKid(newKid); - - Parent parent = Parent.builder().user(newParent).build(); - newParent.setParent(parent); - - newParent.setParent(parent); - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); + son.setKid(sonKid); + mom.setParent(momParent); - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); - - Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .successWeeks(2L) + Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder() .id(1L) @@ -642,14 +511,13 @@ public void testIfSavingsProgressAlreadyRunningWeeksBadRequestErr() { //when ProgressServiceImpl progressService = new ProgressServiceImpl(mockProgressRepository, - mockChallengeUserRepository, mockChallengeRepository, mockFamilyUserRepository, - mockKidRepository, mockParentRepository); + mockChallengeUserRepository, mockChallengeRepository, + mockKidRepository); ProgressController progressController = new ProgressController(progressService); - ProgressDTO progressDTO = new ProgressDTO(newProgress2); //then Assertions.assertThrows(BadRequestException.class, - () -> progressController.patchProgress(newUser, + () -> progressController.patchProgress(son, newChallenge.getId())); } @@ -658,56 +526,107 @@ public void testIfSavingsProgressAlreadyRunningWeeksBadRequestErr() { public void testIfSavingsProgressNotAuthUserForbiddenErr() { //given - ChallengeCategoryRepository mockChallengeCategoryRepository = Mockito.mock( - ChallengeCategoryRepository.class); - TargetItemRepository mockTargetItemRepository = Mockito.mock(TargetItemRepository.class); ChallengeRepository mockChallengeRepository = Mockito.mock(ChallengeRepository.class); ChallengeUserRepository mockChallengeUserRepository = Mockito.mock( ChallengeUserRepository.class); ProgressRepository mockProgressRepository = Mockito.mock(ProgressRepository.class); - FamilyUserRepository mockFamilyUserRepository = Mockito.mock(FamilyUserRepository.class); KidRepository mockKidRepository = Mockito.mock(KidRepository.class); - ParentRepository mockParentRepository = Mockito.mock(ParentRepository.class); - ChallengeRequest challengeRequest = new ChallengeRequest(true, "이자율 받기", "전자제품", "에어팟 사기", - 30L, - 30000L, 10000L, 3L, "test"); + son.setKid(sonKid); + mom.setParent(momParent); - User newUser = User.builder().id(1L).username("user1").isFemale(true).birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(true).refreshToken("token").build(); + Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) + .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); + + ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) + .member("parent").user(son).build(); - User newUser1 = User.builder().id(3L).username("user2").isFemale(true).birthday("19990213") - .authenticationCode("code2").provider("kakao").isKid(true).refreshToken("torken") + Progress newProgress = Progress.builder() + .id(1L) + .challenge(newChallenge) + .weeks(1L) + .isAchieved(true) + .build(); + + ReflectionTestUtils.setField( + newProgress, + AbstractTimestamp.class, + "createdAt", + Timestamp.valueOf(LocalDateTime.now().minusDays(15)), + Timestamp.class + ); + + Progress newProgress1 = Progress.builder() + .id(2L) + .challenge(newChallenge) + .weeks(2L) + .isAchieved(true) .build(); - User newParent = User.builder().id(2L).username("parent1").isFemale(true) - .birthday("19990521") - .authenticationCode("code").provider("kakao").isKid(false).refreshToken("token") + Progress newProgress2 = Progress.builder() + .id(3L) + .challenge(newChallenge) + .weeks(3L) + .isAchieved(true) .build(); - Kid newKid = Kid.builder().user(newUser).savings(0L).build(); - newUser.setKid(newKid); + List progressList = new ArrayList<>(); + progressList.add(newProgress); + progressList.add(newProgress1); + progressList.add(newProgress2); + + newChallenge.setProgressList(progressList); + + Mockito.when(mockChallengeRepository.findById(newChallenge.getId())) + .thenReturn(Optional.of(newChallenge)); + Mockito.when(mockChallengeUserRepository.findByChallengeId(newChallenge.getId())) + .thenReturn(Optional.of(newChallengeUser)); + Mockito.when(mockProgressRepository.findByChallengeIdAndWeeks(newChallenge.getId(), + newProgress2.getWeeks())).thenReturn(Optional.of(newProgress2)); - Parent parent = Parent.builder().user(newParent).build(); - newParent.setParent(parent); + //when + ProgressServiceImpl progressService = new ProgressServiceImpl(mockProgressRepository, + mockChallengeUserRepository, mockChallengeRepository, + mockKidRepository); + ProgressController progressController = new ProgressController(progressService); + + //then + Assertions.assertThrows(ForbiddenException.class, + () -> progressController.patchProgress(daughter, + newChallenge.getId())); + } - newParent.setParent(parent); + @Test + @DisplayName("돈길 걷기 요청 시, 주차가 한참 지났을 때, 400에러") + public void testIfSavingsProgressNotExistWalkingProgressBadRequestErr() { - ChallengeCategory newChallengeCategory = ChallengeCategory.builder().id(1L) - .category("이자율 받기").build(); + //given + ChallengeRepository mockChallengeRepository = Mockito.mock(ChallengeRepository.class); + ChallengeUserRepository mockChallengeUserRepository = Mockito.mock( + ChallengeUserRepository.class); + ProgressRepository mockProgressRepository = Mockito.mock(ProgressRepository.class); + KidRepository mockKidRepository = Mockito.mock(KidRepository.class); - TargetItem newTargetItem = TargetItem.builder().id(1L).name("전자제품").build(); + son.setKid(sonKid); + mom.setParent(momParent); - Challenge newChallenge = Challenge.builder().id(1L).title(challengeRequest.getTitle()) - .contractUser(newParent) - .isAchieved(1L).totalPrice(challengeRequest.getTotalPrice()) - .successWeeks(2L) + Challenge newChallenge = Challenge.builder().title(challengeRequest.getTitle()) + .contractUser(challengeRequest.getIsMom() ? mom : father) + .totalPrice(challengeRequest.getTotalPrice()) .weekPrice(challengeRequest.getWeekPrice()).weeks(challengeRequest.getWeeks()) - .challengeCategory(newChallengeCategory).targetItem(newTargetItem).status(2L) - .interestRate(challengeRequest.getInterestRate()).build(); + .challengeStatus(walking) + .interestRate(challengeRequest.getInterestRate()) + .challengeCategory(newChallengeCategory).targetItem(newTargetItem) + .filename(challengeRequest.getFileName()).build(); ChallengeUser newChallengeUser = ChallengeUser.builder().challenge(newChallenge) - .member("parent").user(newUser).build(); + .member("parent").user(son).build(); Progress newProgress = Progress.builder() .id(1L) @@ -720,7 +639,7 @@ public void testIfSavingsProgressNotAuthUserForbiddenErr() { newProgress, AbstractTimestamp.class, "createdAt", - Timestamp.valueOf(LocalDateTime.now().minusDays(15)), + Timestamp.valueOf(LocalDateTime.now().minusDays(40)), Timestamp.class ); @@ -735,7 +654,7 @@ public void testIfSavingsProgressNotAuthUserForbiddenErr() { .id(3L) .challenge(newChallenge) .weeks(3L) - .isAchieved(true) + .isAchieved(false) .build(); List progressList = new ArrayList<>(); @@ -754,14 +673,13 @@ public void testIfSavingsProgressNotAuthUserForbiddenErr() { //when ProgressServiceImpl progressService = new ProgressServiceImpl(mockProgressRepository, - mockChallengeUserRepository, mockChallengeRepository, mockFamilyUserRepository, - mockKidRepository, mockParentRepository); + mockChallengeUserRepository, mockChallengeRepository, + mockKidRepository); ProgressController progressController = new ProgressController(progressService); - ProgressDTO progressDTO = new ProgressDTO(newProgress2); //then - Assertions.assertThrows(ForbiddenException.class, - () -> progressController.patchProgress(newUser1, + Assertions.assertThrows(BadRequestException.class, + () -> progressController.patchProgress(son, newChallenge.getId())); } }