From 9aab9b8bfb6aaa810454cd30a298d9e70c02fa05 Mon Sep 17 00:00:00 2001 From: songhyeonpk Date: Sat, 16 Aug 2025 17:54:24 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20Mission=20=EC=88=9C=EC=84=9C,=20?= =?UTF-8?q?=EB=A9=94=EB=AA=A8=20=ED=95=84=EB=93=9C=20=EC=A0=9C=EA=B1=B0=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: Mission 엔티티 순서, 메모 필드 제거 * refactor: Mission 생성/수정, 쿼리 메서드, 검증/에러코드, DTO 리팩토링 * test: Mission 순서, 메모 관련 통합/단위 테스트 코드 리팩토링 --- .../mission/application/dto/MissionInfo.java | 4 - .../application/facade/MissionFacade.java | 12 +- .../application/service/MissionService.java | 48 +- .../domain/error/MissionErrorCode.java | 4 - .../domain/factory/MissionFactory.java | 4 +- .../mission/domain/model/Mission.java | 27 +- .../mission/domain/policy/MissionPolicy.java | 33 -- .../domain/repository/MissionRepository.java | 6 +- .../infra/jpa/MissionJpaRepository.java | 6 +- .../infra/jpa/MissionRepositoryAdapter.java | 16 +- .../controller/MissionController.java | 20 +- .../dto/request/CreateMissionRequest.java | 7 +- .../request/UpdateMissionOrderRequest.java | 11 - .../dto/request/UpdateMissionRequest.java | 3 +- .../dto/response/LoadMissionInfoResponse.java | 4 +- .../stamp/application/facade/StampFacade.java | 6 +- .../response/LoadDailyGoalDetailResponse.java | 7 +- .../service/DailyMissionServiceTest.java | 2 +- .../service/MissionServiceTest.java | 195 +------ .../fixture/CreateMissionRequestFixture.java | 14 +- .../mission/fixture/MissionFixture.java | 9 +- .../UpdateMissionOrderRequestFixture.java | 17 - .../fixture/UpdateMissionRequestFixture.java | 8 +- .../mission/helper/MissionTestHelper.java | 12 +- .../MissionControllerIntegrationTest.java | 511 +----------------- .../StampControllerIntegrationTest.java | 4 +- .../StudyLogDailyMissionServiceTest.java | 4 +- .../StudyLogControllerIntegrationTest.java | 6 +- .../DailyGoalControllerIntegrationTest.java | 22 +- 29 files changed, 75 insertions(+), 947 deletions(-) delete mode 100644 src/main/java/com/ject/studytrip/mission/presentation/dto/request/UpdateMissionOrderRequest.java delete mode 100644 src/test/java/com/ject/studytrip/mission/fixture/UpdateMissionOrderRequestFixture.java diff --git a/src/main/java/com/ject/studytrip/mission/application/dto/MissionInfo.java b/src/main/java/com/ject/studytrip/mission/application/dto/MissionInfo.java index 83a7602..b3e24e3 100644 --- a/src/main/java/com/ject/studytrip/mission/application/dto/MissionInfo.java +++ b/src/main/java/com/ject/studytrip/mission/application/dto/MissionInfo.java @@ -6,8 +6,6 @@ public record MissionInfo( Long missionId, String missionName, - String missionMemo, - int missionOrder, boolean completed, String createdAt, String updatedAt, @@ -16,8 +14,6 @@ public static MissionInfo from(Mission mission) { return new MissionInfo( mission.getId(), mission.getName(), - mission.getMemo(), - mission.getMissionOrder(), mission.isCompleted(), DateUtil.formatDateTime(mission.getCreatedAt()), DateUtil.formatDateTime(mission.getUpdatedAt()), diff --git a/src/main/java/com/ject/studytrip/mission/application/facade/MissionFacade.java b/src/main/java/com/ject/studytrip/mission/application/facade/MissionFacade.java index 9c0c0a6..91644f7 100644 --- a/src/main/java/com/ject/studytrip/mission/application/facade/MissionFacade.java +++ b/src/main/java/com/ject/studytrip/mission/application/facade/MissionFacade.java @@ -4,7 +4,6 @@ import com.ject.studytrip.mission.application.service.MissionService; import com.ject.studytrip.mission.domain.model.Mission; import com.ject.studytrip.mission.presentation.dto.request.CreateMissionRequest; -import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionOrderRequest; import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionRequest; import com.ject.studytrip.stamp.application.service.StampService; import com.ject.studytrip.stamp.domain.model.Stamp; @@ -29,7 +28,7 @@ public MissionInfo createMission( return MissionInfo.from(mission); } - public void updateMissionNameAndMemoIfPresent( + public void updateMissionNameIfPresent( Long memberId, Long tripId, Long stampId, @@ -38,14 +37,7 @@ public void updateMissionNameAndMemoIfPresent( Stamp stamp = getValidStampFromTripOwnedByMember(memberId, tripId, stampId); Mission mission = missionService.getValidMission(stamp.getId(), missionId); - missionService.updateMissionNameAndMemoIfPresent(stamp.getId(), mission, request); - } - - public void updateMissionOrders( - Long memberId, Long tripId, Long stampId, UpdateMissionOrderRequest request) { - Stamp stamp = getValidStampFromTripOwnedByMember(memberId, tripId, stampId); - - missionService.updateMissionOrders(stamp.getId(), request); + missionService.updateMissionNameIfPresent(stamp.getId(), mission, request); } public void deleteMission(Long memberId, Long tripId, Long stampId, Long missionId) { diff --git a/src/main/java/com/ject/studytrip/mission/application/service/MissionService.java b/src/main/java/com/ject/studytrip/mission/application/service/MissionService.java index a038cf7..7e8a11b 100644 --- a/src/main/java/com/ject/studytrip/mission/application/service/MissionService.java +++ b/src/main/java/com/ject/studytrip/mission/application/service/MissionService.java @@ -1,7 +1,6 @@ package com.ject.studytrip.mission.application.service; import com.ject.studytrip.global.exception.CustomException; -import com.ject.studytrip.mission.application.dto.MissionInfo; import com.ject.studytrip.mission.domain.error.MissionErrorCode; import com.ject.studytrip.mission.domain.factory.MissionFactory; import com.ject.studytrip.mission.domain.model.Mission; @@ -9,13 +8,9 @@ import com.ject.studytrip.mission.domain.repository.MissionQueryRepository; import com.ject.studytrip.mission.domain.repository.MissionRepository; import com.ject.studytrip.mission.presentation.dto.request.CreateMissionRequest; -import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionOrderRequest; import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionRequest; import com.ject.studytrip.stamp.domain.model.Stamp; import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,45 +23,17 @@ public class MissionService { @Transactional public Mission createMission(Stamp stamp, CreateMissionRequest request) { - boolean exists = - missionRepository.existsByStampIdAndMissionOrderAndDeletedAtIsNull( - stamp.getId(), request.order()); - MissionPolicy.validateOrderNotDuplicated(exists); - - Mission mission = - MissionFactory.create(stamp, request.name(), request.memo(), request.order()); + Mission mission = MissionFactory.create(stamp, request.missionName()); return missionRepository.save(mission); } @Transactional - public void updateMissionNameAndMemoIfPresent( + public void updateMissionNameIfPresent( Long stampId, Mission mission, UpdateMissionRequest request) { validateMissionIsActiveAndBelongsToStamp(stampId, mission); - mission.update(request.name(), request.memo()); - } - - @Transactional - public void updateMissionOrders(Long stampId, UpdateMissionOrderRequest request) { - // 요청된 ID 목록에 해당하는 미션 조회 - List orderedMissionIds = request.orderedMissionIds(); - List missions = missionRepository.findAllByIdIn(orderedMissionIds); - - // 정책 검증 - missions.forEach(mission -> validateMissionIsActiveAndBelongsToStamp(stampId, mission)); - MissionPolicy.validateMissionOrders(orderedMissionIds, missions); - - // ID -> 미션 맵 생성 - Map missionMap = - missions.stream().collect(Collectors.toMap(Mission::getId, Function.identity())); - - // 미션 순서 업데이트 - for (int i = 0; i < orderedMissionIds.size(); i++) { - Long missionId = orderedMissionIds.get(i); - Mission mission = missionMap.get(missionId); - mission.updateMissionOrder(i + 1); - } + mission.updateName(request.missionName()); } @Transactional @@ -76,16 +43,9 @@ public void deleteMission(Long stampId, Mission mission) { mission.updateDeletedAt(); } - @Transactional(readOnly = true) - public List getMissionsByStamp(Long stampId) { - List missions = missionRepository.findAllByStampIdOrderByMissionOrder(stampId); - - return missions.stream().map(MissionInfo::from).toList(); - } - @Transactional(readOnly = true) public List getMissionsByStampId(Long stampId) { - return missionRepository.findAllByStampIdAndDeletedAtIsNullOrderByMissionOrder(stampId); + return missionRepository.findAllByStampIdAndDeletedAtIsNullOrderByCreatedAt(stampId); } @Transactional(readOnly = true) diff --git a/src/main/java/com/ject/studytrip/mission/domain/error/MissionErrorCode.java b/src/main/java/com/ject/studytrip/mission/domain/error/MissionErrorCode.java index 8e13648..261005a 100644 --- a/src/main/java/com/ject/studytrip/mission/domain/error/MissionErrorCode.java +++ b/src/main/java/com/ject/studytrip/mission/domain/error/MissionErrorCode.java @@ -7,11 +7,7 @@ @RequiredArgsConstructor public enum MissionErrorCode implements ErrorCode { // 400 - MISSION_ORDER_IDS_DUPLICATED(HttpStatus.BAD_REQUEST, "요청한 미션 ID 목록에 중복이 존재합니다."), - MISSION_ORDER_SIZE_MISMATCHED(HttpStatus.BAD_REQUEST, "요청한 미션 수의 크기가 기존 미션 수의 크기와 일치하지 않습니다."), - MISSION_ORDER_IDS_NOT_MATCHED(HttpStatus.BAD_REQUEST, "요청한 미션 ID 목록이 기존 미션 목록과 일치하지 않습니다."), MISSION_ALREADY_DELETED(HttpStatus.BAD_REQUEST, "해당 미션은 이미 삭제되었습니다."), - MISSION_ORDER_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "이미 존재하는 미션 순서입니다."), MISSION_ALREADY_COMPLETED(HttpStatus.BAD_REQUEST, "이미 완료된 미션입니다."), ALL_MISSIONS_NOT_COMPLETED(HttpStatus.BAD_REQUEST, "모든 미션이 완료되지 않았습니다."), diff --git a/src/main/java/com/ject/studytrip/mission/domain/factory/MissionFactory.java b/src/main/java/com/ject/studytrip/mission/domain/factory/MissionFactory.java index efb09b6..fc6ae64 100644 --- a/src/main/java/com/ject/studytrip/mission/domain/factory/MissionFactory.java +++ b/src/main/java/com/ject/studytrip/mission/domain/factory/MissionFactory.java @@ -7,7 +7,7 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public class MissionFactory { - public static Mission create(Stamp stamp, String name, String memo, int missionOrder) { - return Mission.of(stamp, name, memo, missionOrder); + public static Mission create(Stamp stamp, String name) { + return Mission.of(stamp, name); } } diff --git a/src/main/java/com/ject/studytrip/mission/domain/model/Mission.java b/src/main/java/com/ject/studytrip/mission/domain/model/Mission.java index ec87ba4..1f8b0d7 100644 --- a/src/main/java/com/ject/studytrip/mission/domain/model/Mission.java +++ b/src/main/java/com/ject/studytrip/mission/domain/model/Mission.java @@ -26,33 +26,14 @@ public class Mission extends BaseTimeEntity { @Column(nullable = false) private String name; - private String memo; - - private int missionOrder; - private boolean completed; - public static Mission of(Stamp stamp, String name, String memo, int missionOrder) { - return Mission.builder() - .stamp(stamp) - .name(name) - .memo(memo) - .missionOrder(missionOrder) - .completed(false) - .build(); - } - - public void update(String name, String memo) { - if (hasText(name)) { - this.name = name; - } - if (hasText(memo)) { - this.memo = memo; - } + public static Mission of(Stamp stamp, String name) { + return Mission.builder().stamp(stamp).name(name).completed(false).build(); } - public void updateMissionOrder(int missionOrder) { - this.missionOrder = missionOrder; + public void updateName(String name) { + if (hasText(name)) this.name = name; } public void updateDeletedAt() { diff --git a/src/main/java/com/ject/studytrip/mission/domain/policy/MissionPolicy.java b/src/main/java/com/ject/studytrip/mission/domain/policy/MissionPolicy.java index 8509f75..9cdbcc7 100644 --- a/src/main/java/com/ject/studytrip/mission/domain/policy/MissionPolicy.java +++ b/src/main/java/com/ject/studytrip/mission/domain/policy/MissionPolicy.java @@ -3,39 +3,12 @@ import com.ject.studytrip.global.exception.CustomException; import com.ject.studytrip.mission.domain.error.MissionErrorCode; import com.ject.studytrip.mission.domain.model.Mission; -import java.util.HashSet; import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; import lombok.AccessLevel; import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class MissionPolicy { - - public static void validateMissionOrders( - List orderedMissionIds, List savedMissions) { - // #1: 중복 미션 ID 검증 - Set uniqueIds = new HashSet<>(orderedMissionIds); - - if (uniqueIds.size() != orderedMissionIds.size()) { - throw new CustomException(MissionErrorCode.MISSION_ORDER_IDS_DUPLICATED); - } - - // #2: 미션 개수 검증 - if (orderedMissionIds.size() != savedMissions.size()) { - throw new CustomException(MissionErrorCode.MISSION_ORDER_SIZE_MISMATCHED); - } - - // #3: 요청 ID와 실제 저장된 미션 ID가 정확히 일치하는지 확인 - Set existingIds = - savedMissions.stream().map(Mission::getId).collect(Collectors.toSet()); - - if (!existingIds.equals(uniqueIds)) { - throw new CustomException(MissionErrorCode.MISSION_ORDER_IDS_NOT_MATCHED); - } - } - public static void validateMissionBelongsToStamp(Long stampId, Mission mission) { if (!mission.getStamp().getId().equals(stampId)) { throw new CustomException(MissionErrorCode.MISSION_NOT_BELONGS_TO_STAMP); @@ -48,12 +21,6 @@ public static void validateNotDeleted(Mission mission) { } } - public static void validateOrderNotDuplicated(boolean exists) { - if (exists) { - throw new CustomException(MissionErrorCode.MISSION_ORDER_ALREADY_EXISTS); - } - } - public static void validateCompleted(Mission mission) { if (mission.isCompleted()) throw new CustomException(MissionErrorCode.MISSION_ALREADY_COMPLETED); diff --git a/src/main/java/com/ject/studytrip/mission/domain/repository/MissionRepository.java b/src/main/java/com/ject/studytrip/mission/domain/repository/MissionRepository.java index f3f6d8d..72c20a3 100644 --- a/src/main/java/com/ject/studytrip/mission/domain/repository/MissionRepository.java +++ b/src/main/java/com/ject/studytrip/mission/domain/repository/MissionRepository.java @@ -5,15 +5,11 @@ import java.util.Optional; public interface MissionRepository { - List findAllByStampIdOrderByMissionOrder(Long stampId); - List findAllByIdIn(List ids); - List findAllByStampIdAndDeletedAtIsNullOrderByMissionOrder(Long stampId); + List findAllByStampIdAndDeletedAtIsNullOrderByCreatedAt(Long stampId); Optional findById(Long id); - boolean existsByStampIdAndMissionOrderAndDeletedAtIsNull(Long stampId, int missionOrder); - Mission save(Mission mission); } diff --git a/src/main/java/com/ject/studytrip/mission/infra/jpa/MissionJpaRepository.java b/src/main/java/com/ject/studytrip/mission/infra/jpa/MissionJpaRepository.java index eb23f28..038c7ab 100644 --- a/src/main/java/com/ject/studytrip/mission/infra/jpa/MissionJpaRepository.java +++ b/src/main/java/com/ject/studytrip/mission/infra/jpa/MissionJpaRepository.java @@ -5,11 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface MissionJpaRepository extends JpaRepository { - List findAllByStampIdOrderByMissionOrder(Long stampId); - List findAllByIdIn(List ids); - List findAllByStampIdAndDeletedAtIsNullOrderByMissionOrder(Long stampId); - - boolean existsByStampIdAndMissionOrderAndDeletedAtIsNull(Long stampId, int missionOrder); + List findAllByStampIdAndDeletedAtIsNullOrderByCreatedAt(Long stampId); } diff --git a/src/main/java/com/ject/studytrip/mission/infra/jpa/MissionRepositoryAdapter.java b/src/main/java/com/ject/studytrip/mission/infra/jpa/MissionRepositoryAdapter.java index b8ecaa4..283c563 100644 --- a/src/main/java/com/ject/studytrip/mission/infra/jpa/MissionRepositoryAdapter.java +++ b/src/main/java/com/ject/studytrip/mission/infra/jpa/MissionRepositoryAdapter.java @@ -12,19 +12,14 @@ public class MissionRepositoryAdapter implements MissionRepository { private final MissionJpaRepository missionJpaRepository; - @Override - public List findAllByStampIdOrderByMissionOrder(Long stampId) { - return missionJpaRepository.findAllByStampIdOrderByMissionOrder(stampId); - } - @Override public List findAllByIdIn(List ids) { return missionJpaRepository.findAllByIdIn(ids); } @Override - public List findAllByStampIdAndDeletedAtIsNullOrderByMissionOrder(Long stampId) { - return missionJpaRepository.findAllByStampIdAndDeletedAtIsNullOrderByMissionOrder(stampId); + public List findAllByStampIdAndDeletedAtIsNullOrderByCreatedAt(Long stampId) { + return missionJpaRepository.findAllByStampIdAndDeletedAtIsNullOrderByCreatedAt(stampId); } @Override @@ -32,13 +27,6 @@ public Optional findById(Long id) { return missionJpaRepository.findById(id); } - @Override - public boolean existsByStampIdAndMissionOrderAndDeletedAtIsNull( - Long stampId, int missionOrder) { - return missionJpaRepository.existsByStampIdAndMissionOrderAndDeletedAtIsNull( - stampId, missionOrder); - } - @Override public Mission save(Mission mission) { return missionJpaRepository.save(mission); diff --git a/src/main/java/com/ject/studytrip/mission/presentation/controller/MissionController.java b/src/main/java/com/ject/studytrip/mission/presentation/controller/MissionController.java index 5d716fa..c185f7c 100644 --- a/src/main/java/com/ject/studytrip/mission/presentation/controller/MissionController.java +++ b/src/main/java/com/ject/studytrip/mission/presentation/controller/MissionController.java @@ -4,7 +4,6 @@ import com.ject.studytrip.mission.application.dto.MissionInfo; import com.ject.studytrip.mission.application.facade.MissionFacade; import com.ject.studytrip.mission.presentation.dto.request.CreateMissionRequest; -import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionOrderRequest; import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionRequest; import com.ject.studytrip.mission.presentation.dto.response.CreateMissionResponse; import com.ject.studytrip.mission.presentation.dto.response.LoadMissionInfoResponse; @@ -44,7 +43,7 @@ public ResponseEntity createMission( HttpStatus.CREATED.value(), CreateMissionResponse.of(result))); } - @Operation(summary = "미션 수정", description = "특정 미션의 이름 또는 메모를 수정합니다.") + @Operation(summary = "미션 수정", description = "특정 미션의 이름을 수정합니다.") @PatchMapping("/trips/{tripId}/stamps/{stampId}/missions/{missionId}") public ResponseEntity updateMission( @AuthenticationPrincipal String memberId, @@ -52,28 +51,13 @@ public ResponseEntity updateMission( @PathVariable @NotNull(message = "스탬프 ID는 필수 요청 파라미터입니다.") Long stampId, @PathVariable @NotNull(message = "미션 ID는 필수 요청 파라미터입니다.") Long missionId, @RequestBody @Valid UpdateMissionRequest request) { - missionFacade.updateMissionNameAndMemoIfPresent( + missionFacade.updateMissionNameIfPresent( Long.valueOf(memberId), tripId, stampId, missionId, request); return ResponseEntity.status(HttpStatus.OK) .body(StandardResponse.success(HttpStatus.OK.value(), null)); } - @Operation( - summary = "미션 순서 변경", - description = "코스형과 탐험형 스탬프 모두 미션 순서를 가지며, 요청된 미션 ID 목록의 순서대로 미션 순서를 변경합니다.") - @PutMapping("/trips/{tripId}/stamps/{stampId}/missions/orders") - public ResponseEntity updateMissionOrders( - @AuthenticationPrincipal String memberId, - @PathVariable @NotNull(message = "여행 ID는 필수 요청 파라미터입니다.") Long tripId, - @PathVariable @NotNull(message = "스탬프 ID는 필수 요청 파라미터입니다.") Long stampId, - @RequestBody @Valid UpdateMissionOrderRequest request) { - missionFacade.updateMissionOrders(Long.valueOf(memberId), tripId, stampId, request); - - return ResponseEntity.status(HttpStatus.OK) - .body(StandardResponse.success(HttpStatus.OK.value(), null)); - } - @Operation(summary = "미션 삭제", description = "특정 미션을 삭제합니다.") @DeleteMapping("/trips/{tripId}/stamps/{stampId}/missions/{missionId}") public ResponseEntity deleteMission( diff --git a/src/main/java/com/ject/studytrip/mission/presentation/dto/request/CreateMissionRequest.java b/src/main/java/com/ject/studytrip/mission/presentation/dto/request/CreateMissionRequest.java index f010863..cc78053 100644 --- a/src/main/java/com/ject/studytrip/mission/presentation/dto/request/CreateMissionRequest.java +++ b/src/main/java/com/ject/studytrip/mission/presentation/dto/request/CreateMissionRequest.java @@ -1,11 +1,8 @@ package com.ject.studytrip.mission.presentation.dto.request; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; public record CreateMissionRequest( - @Schema(description = "미션 이름") @NotBlank(message = "미션 이름은 필수 요청 값입니다.") String name, - @Schema(description = "미션 메모") String memo, - @Schema(description = "미션 순서") @Min(value = 1, message = "모든 미션 순서는 최소 1 이상이어야 합니다.") - int order) {} + @Schema(description = "미션 이름") @NotBlank(message = "미션 이름은 필수 요청 값입니다.") + String missionName) {} diff --git a/src/main/java/com/ject/studytrip/mission/presentation/dto/request/UpdateMissionOrderRequest.java b/src/main/java/com/ject/studytrip/mission/presentation/dto/request/UpdateMissionOrderRequest.java deleted file mode 100644 index 8b2c2a5..0000000 --- a/src/main/java/com/ject/studytrip/mission/presentation/dto/request/UpdateMissionOrderRequest.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.ject.studytrip.mission.presentation.dto.request; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import java.util.List; - -public record UpdateMissionOrderRequest( - @Schema(description = "변경된 순서를 반영한 미션 ID 목록 (앞에서부터 순서대로 정렬)") - @NotEmpty(message = "미션 ID 목록은 필수 요청 값입니다.") - List<@NotNull(message = "미션 ID는 null일 수 없습니다.") Long> orderedMissionIds) {} diff --git a/src/main/java/com/ject/studytrip/mission/presentation/dto/request/UpdateMissionRequest.java b/src/main/java/com/ject/studytrip/mission/presentation/dto/request/UpdateMissionRequest.java index 91a94ec..ebd9769 100644 --- a/src/main/java/com/ject/studytrip/mission/presentation/dto/request/UpdateMissionRequest.java +++ b/src/main/java/com/ject/studytrip/mission/presentation/dto/request/UpdateMissionRequest.java @@ -5,5 +5,4 @@ public record UpdateMissionRequest( @Schema(description = "수정할 미션 이름") @NotBlank(message = "새로운 미션 이름은 필수 요청 값입니다.") - String name, - @Schema(description = "수정할 미션 메모") String memo) {} + String missionName) {} diff --git a/src/main/java/com/ject/studytrip/mission/presentation/dto/response/LoadMissionInfoResponse.java b/src/main/java/com/ject/studytrip/mission/presentation/dto/response/LoadMissionInfoResponse.java index 6cf1285..d0035f6 100644 --- a/src/main/java/com/ject/studytrip/mission/presentation/dto/response/LoadMissionInfoResponse.java +++ b/src/main/java/com/ject/studytrip/mission/presentation/dto/response/LoadMissionInfoResponse.java @@ -6,10 +6,8 @@ public record LoadMissionInfoResponse( @Schema(description = "미션 ID") Long missionId, @Schema(description = "미션 이름") String missionName, - @Schema(description = "미션 순서") int missionOrder, @Schema(description = "미션 완료여부") boolean completed) { public static LoadMissionInfoResponse of(MissionInfo info) { - return new LoadMissionInfoResponse( - info.missionId(), info.missionName(), info.missionOrder(), info.completed()); + return new LoadMissionInfoResponse(info.missionId(), info.missionName(), info.completed()); } } diff --git a/src/main/java/com/ject/studytrip/stamp/application/facade/StampFacade.java b/src/main/java/com/ject/studytrip/stamp/application/facade/StampFacade.java index 869aa95..bbaeaf0 100644 --- a/src/main/java/com/ject/studytrip/stamp/application/facade/StampFacade.java +++ b/src/main/java/com/ject/studytrip/stamp/application/facade/StampFacade.java @@ -2,6 +2,7 @@ import com.ject.studytrip.mission.application.dto.MissionInfo; import com.ject.studytrip.mission.application.service.MissionService; +import com.ject.studytrip.mission.domain.model.Mission; import com.ject.studytrip.stamp.application.dto.StampDetail; import com.ject.studytrip.stamp.application.dto.StampInfo; import com.ject.studytrip.stamp.application.service.StampService; @@ -69,9 +70,10 @@ public List getStampsByTrip(Long memberId, Long tripId) { public StampDetail getStamp(Long memberId, Long tripId, Long stampId) { Trip trip = tripService.getValidTrip(memberId, tripId); Stamp stamp = stampService.getValidStamp(trip.getId(), stampId); - List missionInfos = missionService.getMissionsByStamp(stamp.getId()); + List missions = missionService.getMissionsByStampId(stamp.getId()); - return StampDetail.from(StampInfo.from(stamp), missionInfos); + return StampDetail.from( + StampInfo.from(stamp), missions.stream().map(MissionInfo::from).toList()); } public void completeStamp(Long memberId, Long tripId, Long stampId) { diff --git a/src/main/java/com/ject/studytrip/trip/presentation/dto/response/LoadDailyGoalDetailResponse.java b/src/main/java/com/ject/studytrip/trip/presentation/dto/response/LoadDailyGoalDetailResponse.java index cc46f7b..5aafa03 100644 --- a/src/main/java/com/ject/studytrip/trip/presentation/dto/response/LoadDailyGoalDetailResponse.java +++ b/src/main/java/com/ject/studytrip/trip/presentation/dto/response/LoadDailyGoalDetailResponse.java @@ -37,13 +37,10 @@ public static DailyGoalPomodoroResponse of(PomodoroInfo info) { public record DailyGoalMissionResponse( @Schema(name = "데일리 미션 ID") Long dailyMissionId, - @Schema(name = "미션 이름") String missionName, - @Schema(name = "미션 메모") String missionMemo) { + @Schema(name = "미션 이름") String missionName) { public static DailyGoalMissionResponse of(DailyMissionInfo info) { return new DailyGoalMissionResponse( - info.dailyMissionId(), - info.missionInfo().missionName(), - info.missionInfo().missionMemo()); + info.dailyMissionId(), info.missionInfo().missionName()); } } } diff --git a/src/test/java/com/ject/studytrip/mission/application/service/DailyMissionServiceTest.java b/src/test/java/com/ject/studytrip/mission/application/service/DailyMissionServiceTest.java index bf9be62..586c089 100644 --- a/src/test/java/com/ject/studytrip/mission/application/service/DailyMissionServiceTest.java +++ b/src/test/java/com/ject/studytrip/mission/application/service/DailyMissionServiceTest.java @@ -49,7 +49,7 @@ void setUp() { Member member = MemberFixture.createMemberFromKakaoWithId(1L); courseTrip = TripFixture.createTripWithId(1L, member, TripCategory.COURSE); Stamp stamp = StampFixture.createStampWithId(1L, courseTrip, 1); - mission = MissionFixture.createMissionWithId(1L, stamp, 1); + mission = MissionFixture.createMissionWithId(1L, stamp); dailyGoal = DailyGoalFixture.createDailyGoalWithId(1L, courseTrip); dailyMission = DailyMissionFixture.createDailyMissionWithId(1L, mission, dailyGoal); } diff --git a/src/test/java/com/ject/studytrip/mission/application/service/MissionServiceTest.java b/src/test/java/com/ject/studytrip/mission/application/service/MissionServiceTest.java index 77e330e..87100e3 100644 --- a/src/test/java/com/ject/studytrip/mission/application/service/MissionServiceTest.java +++ b/src/test/java/com/ject/studytrip/mission/application/service/MissionServiceTest.java @@ -16,10 +16,8 @@ import com.ject.studytrip.mission.domain.repository.MissionRepository; import com.ject.studytrip.mission.fixture.CreateMissionRequestFixture; import com.ject.studytrip.mission.fixture.MissionFixture; -import com.ject.studytrip.mission.fixture.UpdateMissionOrderRequestFixture; import com.ject.studytrip.mission.fixture.UpdateMissionRequestFixture; import com.ject.studytrip.mission.presentation.dto.request.CreateMissionRequest; -import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionOrderRequest; import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionRequest; import com.ject.studytrip.stamp.domain.model.Stamp; import com.ject.studytrip.stamp.fixture.StampFixture; @@ -61,9 +59,9 @@ void setUp() { exploreTrip = TripFixture.createTripWithId(2L, member, TripCategory.EXPLORE); courseStamp = StampFixture.createStampWithId(1L, courseTrip, 1); exploreStamp = StampFixture.createStampWithId(2L, exploreTrip, 0); - courseMission = MissionFixture.createMissionWithId(1L, courseStamp, 1); - exploreMission1 = MissionFixture.createMissionWithId(2L, exploreStamp, 1); - exploreMission2 = MissionFixture.createMissionWithId(3L, exploreStamp, 2); + courseMission = MissionFixture.createMissionWithId(1L, courseStamp); + exploreMission1 = MissionFixture.createMissionWithId(2L, exploreStamp); + exploreMission2 = MissionFixture.createMissionWithId(3L, exploreStamp); } @Nested @@ -71,22 +69,6 @@ void setUp() { class CreateMission { private final CreateMissionRequestFixture fixture = new CreateMissionRequestFixture(); - @Test - @DisplayName("미션 순서가 이미 존재할 경우 예외가 발생한다.") - void shouldThrowExceptionWhenMissionOrderAlreadyExists() { - // given - CreateMissionRequest request = fixture.build(); - given( - missionRepository.existsByStampIdAndMissionOrderAndDeletedAtIsNull( - courseStamp.getId(), request.order())) - .willReturn(true); - - // when & then - assertThatThrownBy(() -> missionService.createMission(courseStamp, request)) - .isInstanceOf(CustomException.class) - .hasMessage(MissionErrorCode.MISSION_ORDER_ALREADY_EXISTS.getMessage()); - } - @Test @DisplayName("코스형 여행 스탬프를 위한 미션을 생성하고 반환한다.") void shouldReturnMissionForCourseStamp() { @@ -100,7 +82,6 @@ void shouldReturnMissionForCourseStamp() { // then assertThat(result).isEqualTo(courseMission); assertThat(result.getStamp()).isEqualTo(courseStamp); - assertThat(result.getMissionOrder()).isEqualTo(request.order()); } @Test @@ -116,23 +97,6 @@ void shouldReturnMissionForExploreStamp() { // then assertThat(result).isEqualTo(exploreMission1); assertThat(result.getStamp()).isEqualTo(exploreStamp); - assertThat(result.getMissionOrder()).isEqualTo(request.order()); - } - - @Test - @DisplayName("메모가 없어도 탐험형 여행 스탬프를 위한 미션을 생성하고 반환한다.") - void shouldReturnMissionForExploreStampWithoutMemo() { - // given - CreateMissionRequest request = fixture.withMemo(null).build(); - given(missionRepository.save(any(Mission.class))).willReturn(exploreMission1); - - // when - Mission result = missionService.createMission(exploreStamp, request); - - // then - assertThat(result).isEqualTo(exploreMission1); - assertThat(result.getStamp()).isEqualTo(exploreStamp); - assertThat(result.getMissionOrder()).isEqualTo(request.order()); } } @@ -151,7 +115,7 @@ void shouldThrowExceptionWhenMissionNotBelongToStamp() { // when & then assertThatThrownBy( () -> - missionService.updateMissionNameAndMemoIfPresent( + missionService.updateMissionNameIfPresent( invalidStampId, courseMission, request)) .isInstanceOf(CustomException.class) .hasMessage(MissionErrorCode.MISSION_NOT_BELONGS_TO_STAMP.getMessage()); @@ -169,14 +133,14 @@ void shouldThrowExceptionWhenMissionIsDeleted() { // when & then assertThatThrownBy( () -> - missionService.updateMissionNameAndMemoIfPresent( + missionService.updateMissionNameIfPresent( stampId, courseMission, request)) .isInstanceOf(CustomException.class) .hasMessage(MissionErrorCode.MISSION_ALREADY_DELETED.getMessage()); } @Test - @DisplayName("특정 미션의 이름만 수정하고 DB에 반영한다.") + @DisplayName("특정 미션의 이름을 수정하고 DB에 반영한다.") void shouldUpdateMissionName() { // given Long stampId = courseStamp.getId(); @@ -184,149 +148,10 @@ void shouldUpdateMissionName() { new UpdateMissionRequestFixture().withName(NEW_MISSION_NAME).build(); // when - missionService.updateMissionNameAndMemoIfPresent(stampId, courseMission, request); - - // then - assertThat(courseMission.getName()).isEqualTo(NEW_MISSION_NAME); - } - - @Test - @DisplayName("특정 미션의 메모만 수정하고 DB에 반영한다.") - void shouldUpdateMissionMemo() { - // given - Long stampId = courseStamp.getId(); - UpdateMissionRequest request = - new UpdateMissionRequestFixture().withMemo(NEW_MISSION_MEMO).build(); - - // when - missionService.updateMissionNameAndMemoIfPresent(stampId, courseMission, request); - - // then - assertThat(courseMission.getMemo()).isEqualTo(NEW_MISSION_MEMO); - } - - @Test - @DisplayName("특정 미션의 이름과 메모를 수정하고 DB에 반영한다.") - void shouldUpdateMissionNameAndMemo() { - // given - Long stampId = courseStamp.getId(); - UpdateMissionRequest request = - new UpdateMissionRequestFixture() - .withName(NEW_MISSION_NAME) - .withMemo(NEW_MISSION_MEMO) - .build(); - - // when - missionService.updateMissionNameAndMemoIfPresent(stampId, courseMission, request); + missionService.updateMissionNameIfPresent(stampId, courseMission, request); // then assertThat(courseMission.getName()).isEqualTo(NEW_MISSION_NAME); - assertThat(courseMission.getMemo()).isEqualTo(NEW_MISSION_MEMO); - } - } - - @Nested - @DisplayName("updateMissionOrders 메서드는") - class UpdateMissionOrders { - private final UpdateMissionOrderRequestFixture fixture = - new UpdateMissionOrderRequestFixture(); - - @Test - @DisplayName("미션이 다른 스탬프에 속하면 예외가 발생한다.") - void shouldThrowExceptionWhenMissionNotBelongToStamp() { - // given - Long invalidStampId = courseStamp.getId(); - List ids = List.of(2L, 3L); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - given(missionRepository.findAllByIdIn(ids)) - .willReturn(List.of(exploreMission1, exploreMission2)); - - // when & then - assertThatThrownBy(() -> missionService.updateMissionOrders(invalidStampId, request)) - .isInstanceOf(CustomException.class) - .hasMessage(MissionErrorCode.MISSION_NOT_BELONGS_TO_STAMP.getMessage()); - } - - @Test - @DisplayName("미션이 이미 삭제된 경우 예외가 발생한다.") - void shouldThrowExceptionWhenMissionIsDeleted() { - // given - Long stampId = exploreStamp.getId(); - ReflectionTestUtils.setField(exploreMission1, "deletedAt", LocalDateTime.now()); - List ids = List.of(2L, 3L); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - given(missionRepository.findAllByIdIn(ids)) - .willReturn(List.of(exploreMission1, exploreMission2)); - - // when & then - assertThatThrownBy(() -> missionService.updateMissionOrders(stampId, request)) - .isInstanceOf(CustomException.class) - .hasMessage(MissionErrorCode.MISSION_ALREADY_DELETED.getMessage()); - } - - @Test - @DisplayName("중복된 미션 ID가 존재하면 예외가 발생한다.") - void shouldThrowExceptionWhenIdsDuplicated() { - // given - Long stampId = exploreStamp.getId(); - List ids = List.of(1L, 1L); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - given(missionRepository.findAllByIdIn(ids)).willReturn(List.of(exploreMission1)); - - // when & then - assertThatThrownBy(() -> missionService.updateMissionOrders(stampId, request)) - .isInstanceOf(CustomException.class) - .hasMessage(MissionErrorCode.MISSION_ORDER_IDS_DUPLICATED.getMessage()); - } - - @Test - @DisplayName("요청된 미션 수가 실제 미션 수와 다르면 예외가 발생한다.") - void shouldThrowExceptionWhenSizeMismatch() { - // given - Long stampId = exploreStamp.getId(); - List ids = List.of(1L, 2L, 3L); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - given(missionRepository.findAllByIdIn(ids)) - .willReturn(List.of(exploreMission1, exploreMission2)); - - // when & then - assertThatThrownBy(() -> missionService.updateMissionOrders(stampId, request)) - .isInstanceOf(CustomException.class) - .hasMessage(MissionErrorCode.MISSION_ORDER_SIZE_MISMATCHED.getMessage()); - } - - @Test - @DisplayName("요청된 ID와 실제 미션 ID가 일치하지 않으면 예외가 발생한다.") - void shouldThrowExceptionWhenIdsNotMatched() { - // given - Long stampId = exploreStamp.getId(); - List ids = List.of(1L, 3L); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - given(missionRepository.findAllByIdIn(ids)) - .willReturn(List.of(exploreMission1, exploreMission2)); - - // when & then - assertThatThrownBy(() -> missionService.updateMissionOrders(stampId, request)) - .isInstanceOf(CustomException.class) - .hasMessage(MissionErrorCode.MISSION_ORDER_IDS_NOT_MATCHED.getMessage()); - } - - @Test - @DisplayName("정상적인 요청이 들어오면 미션들의 순서를 갱신한다.") - void shouldUpdateMissionOrders() { - // given - Long stampId = exploreStamp.getId(); - List ids = List.of(2L, 3L); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - given(missionRepository.findAllByIdIn(ids)) - .willReturn(List.of(exploreMission1, exploreMission2)); - - // when - missionService.updateMissionOrders(stampId, request); - - // then - assertThat(exploreMission1.getMissionOrder()).isEqualTo(1); - assertThat(exploreMission2.getMissionOrder()).isEqualTo(2); } } @@ -381,11 +206,11 @@ void shouldDeleteMission() { class GetMissionsByStampId { @Test - @DisplayName("특정 스탬프에 대한 삭제되지 않은 모든 미션을 순서대로 반환한다.") + @DisplayName("특정 스탬프에 대한 삭제되지 않은 모든 미션을 생성일 순으로 반환한다.") void shouldReturnMissionsInOrderWhenStampIdExists() { // given Long stampId = exploreStamp.getId(); - given(missionRepository.findAllByStampIdAndDeletedAtIsNullOrderByMissionOrder(stampId)) + given(missionRepository.findAllByStampIdAndDeletedAtIsNullOrderByCreatedAt(stampId)) .willReturn(List.of(exploreMission1, exploreMission2)); // when @@ -394,8 +219,6 @@ void shouldReturnMissionsInOrderWhenStampIdExists() { // then assertThat(result).hasSize(2); assertThat(result).containsExactly(exploreMission1, exploreMission2); - assertThat(result.get(0).getMissionOrder()).isEqualTo(1); - assertThat(result.get(1).getMissionOrder()).isEqualTo(2); } } diff --git a/src/test/java/com/ject/studytrip/mission/fixture/CreateMissionRequestFixture.java b/src/test/java/com/ject/studytrip/mission/fixture/CreateMissionRequestFixture.java index 018b599..b992d3f 100644 --- a/src/test/java/com/ject/studytrip/mission/fixture/CreateMissionRequestFixture.java +++ b/src/test/java/com/ject/studytrip/mission/fixture/CreateMissionRequestFixture.java @@ -4,25 +4,13 @@ public class CreateMissionRequestFixture { private String name = "TEST MISSION NAME"; - private String memo = "TEST MISSION MEMO"; - private int missionOrder = 1; public CreateMissionRequestFixture withName(String name) { this.name = name; return this; } - public CreateMissionRequestFixture withMemo(String memo) { - this.memo = memo; - return this; - } - - public CreateMissionRequestFixture withMissionOrder(int missionOrder) { - this.missionOrder = missionOrder; - return this; - } - public CreateMissionRequest build() { - return new CreateMissionRequest(name, memo, missionOrder); + return new CreateMissionRequest(name); } } diff --git a/src/test/java/com/ject/studytrip/mission/fixture/MissionFixture.java b/src/test/java/com/ject/studytrip/mission/fixture/MissionFixture.java index 1562ac9..fa5b12a 100644 --- a/src/test/java/com/ject/studytrip/mission/fixture/MissionFixture.java +++ b/src/test/java/com/ject/studytrip/mission/fixture/MissionFixture.java @@ -7,14 +7,13 @@ public class MissionFixture { private static final String MISSION_NAME = "TEST MISSION NAME"; - private static final String MISSION_MEMO = "TEST MISSION MEMO"; - public static Mission createMission(Stamp stamp, int order) { - return MissionFactory.create(stamp, MISSION_NAME, MISSION_MEMO, order); + public static Mission createMission(Stamp stamp) { + return MissionFactory.create(stamp, MISSION_NAME); } - public static Mission createMissionWithId(Long id, Stamp stamp, int order) { - Mission mission = MissionFactory.create(stamp, MISSION_NAME, MISSION_MEMO, order); + public static Mission createMissionWithId(Long id, Stamp stamp) { + Mission mission = MissionFactory.create(stamp, MISSION_NAME); ReflectionTestUtils.setField(mission, "id", id); return mission; diff --git a/src/test/java/com/ject/studytrip/mission/fixture/UpdateMissionOrderRequestFixture.java b/src/test/java/com/ject/studytrip/mission/fixture/UpdateMissionOrderRequestFixture.java deleted file mode 100644 index 15e96eb..0000000 --- a/src/test/java/com/ject/studytrip/mission/fixture/UpdateMissionOrderRequestFixture.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.ject.studytrip.mission.fixture; - -import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionOrderRequest; -import java.util.List; - -public class UpdateMissionOrderRequestFixture { - private List orderedIds; - - public UpdateMissionOrderRequestFixture withOrderedIds(List orderedIds) { - this.orderedIds = orderedIds; - return this; - } - - public UpdateMissionOrderRequest build() { - return new UpdateMissionOrderRequest(orderedIds); - } -} diff --git a/src/test/java/com/ject/studytrip/mission/fixture/UpdateMissionRequestFixture.java b/src/test/java/com/ject/studytrip/mission/fixture/UpdateMissionRequestFixture.java index 58330fa..e009bce 100644 --- a/src/test/java/com/ject/studytrip/mission/fixture/UpdateMissionRequestFixture.java +++ b/src/test/java/com/ject/studytrip/mission/fixture/UpdateMissionRequestFixture.java @@ -4,19 +4,13 @@ public class UpdateMissionRequestFixture { private String name = null; - private String memo = null; public UpdateMissionRequestFixture withName(String name) { this.name = name; return this; } - public UpdateMissionRequestFixture withMemo(String memo) { - this.memo = memo; - return this; - } - public UpdateMissionRequest build() { - return new UpdateMissionRequest(name, memo); + return new UpdateMissionRequest(name); } } diff --git a/src/test/java/com/ject/studytrip/mission/helper/MissionTestHelper.java b/src/test/java/com/ject/studytrip/mission/helper/MissionTestHelper.java index e8a466d..88dd3df 100644 --- a/src/test/java/com/ject/studytrip/mission/helper/MissionTestHelper.java +++ b/src/test/java/com/ject/studytrip/mission/helper/MissionTestHelper.java @@ -11,21 +11,21 @@ public class MissionTestHelper { @Autowired private MissionRepository missionRepository; - public Mission saveMission(Stamp stamp, int order) { - Mission mission = MissionFixture.createMission(stamp, order); + public Mission saveMission(Stamp stamp) { + Mission mission = MissionFixture.createMission(stamp); return missionRepository.save(mission); } - public Mission saveDeletedMission(Stamp stamp, int order) { - Mission mission = MissionFixture.createMission(stamp, order); + public Mission saveDeletedMission(Stamp stamp) { + Mission mission = MissionFixture.createMission(stamp); mission.updateDeletedAt(); return missionRepository.save(mission); } - public Mission saveCompletedMission(Stamp stamp, int order) { - Mission mission = MissionFixture.createMission(stamp, order); + public Mission saveCompletedMission(Stamp stamp) { + Mission mission = MissionFixture.createMission(stamp); mission.updateCompleted(); return missionRepository.save(mission); diff --git a/src/test/java/com/ject/studytrip/mission/presentation/controller/MissionControllerIntegrationTest.java b/src/test/java/com/ject/studytrip/mission/presentation/controller/MissionControllerIntegrationTest.java index 54d30dd..4fbf33d 100644 --- a/src/test/java/com/ject/studytrip/mission/presentation/controller/MissionControllerIntegrationTest.java +++ b/src/test/java/com/ject/studytrip/mission/presentation/controller/MissionControllerIntegrationTest.java @@ -14,11 +14,9 @@ import com.ject.studytrip.mission.domain.error.MissionErrorCode; import com.ject.studytrip.mission.domain.model.Mission; import com.ject.studytrip.mission.fixture.CreateMissionRequestFixture; -import com.ject.studytrip.mission.fixture.UpdateMissionOrderRequestFixture; import com.ject.studytrip.mission.fixture.UpdateMissionRequestFixture; import com.ject.studytrip.mission.helper.MissionTestHelper; import com.ject.studytrip.mission.presentation.dto.request.CreateMissionRequest; -import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionOrderRequest; import com.ject.studytrip.mission.presentation.dto.request.UpdateMissionRequest; import com.ject.studytrip.stamp.domain.error.StampErrorCode; import com.ject.studytrip.stamp.domain.model.Stamp; @@ -27,7 +25,6 @@ import com.ject.studytrip.trip.domain.model.Trip; import com.ject.studytrip.trip.domain.model.TripCategory; import com.ject.studytrip.trip.helper.TripTestHelper; -import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -72,10 +69,10 @@ void setUp() { exploreTrip = tripTestHelper.saveTrip(member, TripCategory.EXPLORE); courseStamp = stampTestHelper.saveStamp(courseTrip, 3); exploreStamp = stampTestHelper.saveStamp(exploreTrip, 0); - courseMission1 = missionTestHelper.saveMission(courseStamp, 1); - courseMission2 = missionTestHelper.saveMission(courseStamp, 2); - exploreMission1 = missionTestHelper.saveMission(exploreStamp, 1); - exploreMission2 = missionTestHelper.saveMission(exploreStamp, 2); + courseMission1 = missionTestHelper.saveMission(courseStamp); + courseMission2 = missionTestHelper.saveMission(courseStamp); + exploreMission1 = missionTestHelper.saveMission(exploreStamp); + exploreMission2 = missionTestHelper.saveMission(exploreStamp); Member newMember = memberTestHelper.saveMember("test@kakao.com", "TEST NICKNAME"); newAccessToken = @@ -83,7 +80,7 @@ void setUp() { newMember.getId().toString(), newMember.getRole().name()); Trip newTrip = tripTestHelper.saveTrip(newMember, TripCategory.EXPLORE); newStamp = stampTestHelper.saveStamp(newTrip, 0); - newMission = missionTestHelper.saveMission(newStamp, 4); + newMission = missionTestHelper.saveMission(newStamp); } @Nested @@ -190,28 +187,6 @@ void shouldReturnBadRequestWhenNameIsNull() throws Exception { .value())); } - @Test - @DisplayName("미션 메모가 null 이면 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenMemoIsNull() throws Exception { - // given - CreateMissionRequest request = fixture.withMemo(null).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - CommonErrorCode.METHOD_ARGUMENT_NOT_VALID - .getStatus() - .value())); - } - @Test @DisplayName("미션 이름이 비어있으면 400 Bad Request를 반환한다.") void shouldReturnBadRequestWhenNameIsBlank() throws Exception { @@ -234,56 +209,12 @@ void shouldReturnBadRequestWhenNameIsBlank() throws Exception { .value())); } - @Test - @DisplayName("미션 메모가 비어있으면 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenMemoIsBlank() throws Exception { - // given - CreateMissionRequest request = fixture.withMemo(" ").build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - CommonErrorCode.METHOD_ARGUMENT_NOT_VALID - .getStatus() - .value())); - } - - @Test - @DisplayName("미션 순서가 1 미만이면 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenOrderIsLessThanOne() throws Exception { - // given - CreateMissionRequest request = fixture.withMissionOrder(0).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - CommonErrorCode.METHOD_ARGUMENT_NOT_VALID - .getStatus() - .value())); - } - @Test @DisplayName("삭제된 여행일 경우 400 Bad Request를 반환한다.") void shouldReturnBadRequestWhenTripAlreadyDeleted() throws Exception { // given courseTrip.updateDeletedAt(); - CreateMissionRequest request = fixture.withMissionOrder(0).build(); + CreateMissionRequest request = fixture.build(); // when ResultActions resultActions = @@ -303,7 +234,7 @@ void shouldReturnBadRequestWhenTripAlreadyDeleted() throws Exception { void shouldReturnBadRequestWhenStampAlreadyDeleted() throws Exception { // given courseStamp.updateDeletedAt(); - CreateMissionRequest request = fixture.withMissionOrder(0).build(); + CreateMissionRequest request = fixture.build(); // when ResultActions resultActions = @@ -321,30 +252,6 @@ void shouldReturnBadRequestWhenStampAlreadyDeleted() throws Exception { .value())); } - @Test - @DisplayName("이미 존재하는 미션 순서일 경우 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenMissionOrderAlreadyExists() throws Exception { - // given - CreateMissionRequest request = fixture.withMissionOrder(2).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - System.out.println(resultActions.andReturn().getResponse().getContentAsString()); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - MissionErrorCode.MISSION_ORDER_ALREADY_EXISTS - .getStatus() - .value())); - } - @Test @DisplayName("여행의 소유자가 아니라면 403 Forbidden을 반환한다.") void shouldReturnForbiddenWhenNotTripOwner() throws Exception { @@ -431,7 +338,7 @@ void shouldReturnNotFoundWhenStampIdIsInvalid() throws Exception { @DisplayName("유효한 요청이 들어오면 미션을 생성한다.") void shouldCreateMissionWhenRequestIsValid() throws Exception { // given - CreateMissionRequest request = fixture.withMissionOrder(3).build(); + CreateMissionRequest request = fixture.build(); // when ResultActions resultActions = @@ -830,408 +737,6 @@ void shouldUpdateMissionNameWhenRequestIsValid() throws Exception { .andExpect(jsonPath("$.success").value(true)) .andExpect(jsonPath("$.status").value(HttpStatus.OK.value())); } - - @Test - @DisplayName("유효한 요청이 들어오면 미션 메모를 수정한다.") - void shouldUpdateMissionMemoWhenRequestIsValid() throws Exception { - // given - UpdateMissionRequest request = fixture.withName("새로운 미션 메모").build(); - - // when - ResultActions resultActions = - getResultActions( - accessToken, - courseTrip.getId(), - courseStamp.getId(), - courseMission1.getId(), - request); - - // then - resultActions - .andExpect(status().isOk()) - .andExpect(jsonPath("$.success").value(true)) - .andExpect(jsonPath("$.status").value(HttpStatus.OK.value())); - } - - @Test - @DisplayName("유효한 요청이 들어오면 미션 이름과 메모를 모두 수정한다.") - void shouldUpdateMissionNameAndMemoWhenRequestIsValid() throws Exception { - // given - UpdateMissionRequest request = - fixture.withName("새로운 미션 메모").withMemo("새로운 미션 메모").build(); - - // when - ResultActions resultActions = - getResultActions( - accessToken, - courseTrip.getId(), - courseStamp.getId(), - courseMission1.getId(), - request); - - // then - resultActions - .andExpect(status().isOk()) - .andExpect(jsonPath("$.success").value(true)) - .andExpect(jsonPath("$.status").value(HttpStatus.OK.value())); - } - } - - @Nested - @DisplayName("미션 순서 변경 API") - class UpdateMissionOrders { - private final UpdateMissionOrderRequestFixture fixture = - new UpdateMissionOrderRequestFixture(); - - private ResultActions getResultActions( - String accessToken, - Object tripId, - Object stampId, - UpdateMissionOrderRequest request) - throws Exception { - return mockMvc.perform( - put(BASE_MISSION_URL + "/orders", tripId, stampId) - .header( - HttpHeaders.AUTHORIZATION, - TokenFixture.TOKEN_PREFIX + accessToken) - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(request))); - } - - @Test - @DisplayName("Access Token이 없으면 401 Unauthorized를 반환한다.") - void shouldReturnUnauthorizedWhenAccessTokenIsMissing() throws Exception { - // given - List ids = List.of(courseMission2.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions("", courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isUnauthorized()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value(AuthErrorCode.UNAUTHENTICATED.getStatus().value())); - } - - @Test - @DisplayName("PathVariable 여행 ID 타입이 올바르지 않으면 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenTripIdTypeMismatch() throws Exception { - // given - String invalidTripId = "abc"; - List ids = List.of(courseMission2.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, invalidTripId, courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - CommonErrorCode.METHOD_ARGUMENT_TYPE_MISMATCH - .getStatus() - .value())); - } - - @Test - @DisplayName("PathVariable 스탬프 ID 타입이 올바르지 않으면 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenStampIdTypeMismatch() throws Exception { - // given - String invalidStampId = "def"; - List ids = List.of(courseMission2.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), invalidStampId, request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - CommonErrorCode.METHOD_ARGUMENT_TYPE_MISMATCH - .getStatus() - .value())); - } - - @Test - @DisplayName("삭제된 여행일 경우 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenTripAlreadyDeleted() throws Exception { - // given - courseTrip.updateDeletedAt(); - List ids = List.of(courseMission2.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value(TripErrorCode.TRIP_ALREADY_DELETED.getStatus().value())); - } - - @Test - @DisplayName("삭제된 스탬프일 경우 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenStampAlreadyDeleted() throws Exception { - // given - courseStamp.updateDeletedAt(); - List ids = List.of(courseMission2.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - StampErrorCode.STAMP_ALREADY_DELETED - .getStatus() - .value())); - } - - @Test - @DisplayName("삭제된 미션이 포함되어 있다면 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenMissionAlreadyDeleted() throws Exception { - // given - courseMission1.updateDeletedAt(); - List ids = List.of(courseMission2.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - MissionErrorCode.MISSION_ALREADY_DELETED - .getStatus() - .value())); - } - - @Test - @DisplayName("여행의 소유자가 아니라면 403 Forbidden을 반환한다.") - void shouldReturnForbiddenWhenNotTripOwner() throws Exception { - // given - List ids = List.of(exploreMission2.getId(), exploreMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(newAccessToken, courseTrip.getId(), newStamp.getId(), request); - - // then - resultActions - .andExpect(status().isForbidden()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value(TripErrorCode.NOT_TRIP_OWNER.getStatus().value())); - } - - @Test - @DisplayName("스탬프가 요청한 여행에 속하지 않으면 403 Forbidden을 반환한다.") - void shouldReturnForbiddenWhenStampNotBelongToTrip() throws Exception { - // given - List ids = List.of(courseMission2.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions( - accessToken, courseTrip.getId(), exploreStamp.getId(), request); - - // then - resultActions - .andExpect(status().isForbidden()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - StampErrorCode.STAMP_NOT_BELONG_TO_TRIP - .getStatus() - .value())); - } - - @Test - @DisplayName("미션이 요청한 스탬프에 속하지 않으면 403 Forbidden을 반환한다.") - void shouldReturnForbiddenWhenMissionNotBelongToStamp() throws Exception { - // given - List ids = List.of(exploreMission2.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isForbidden()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - MissionErrorCode.MISSION_NOT_BELONGS_TO_STAMP - .getStatus() - .value())); - } - - @Test - @DisplayName("유효하지 않은 여행 ID가 들어오면 404 Not Found를 반환한다.") - void shouldReturnNotFoundWhenTripIdIsInvalid() throws Exception { - // given - Long invalidTripId = 10000L; - List ids = List.of(courseMission2.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, invalidTripId, courseStamp.getId(), request); - - // when & then - resultActions - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value(TripErrorCode.TRIP_NOT_FOUND.getStatus().value())); - } - - @Test - @DisplayName("유효하지 않은 스탬프 ID가 들어오면 404 Not Found를 반환한다.") - void shouldReturnNotFoundWhenStampIdIsInvalid() throws Exception { - // given - Long invalidStampId = 10000L; - List ids = List.of(courseMission2.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), invalidStampId, request); - - // when & then - resultActions - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value(StampErrorCode.STAMP_NOT_FOUND.getStatus().value())); - } - - @Test - @DisplayName("중복된 미션 ID가 들어오면 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenIdsDuplicated() throws Exception { - // given - List duplicatedIds = List.of(courseMission1.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(duplicatedIds).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - MissionErrorCode.MISSION_ORDER_IDS_DUPLICATED - .getStatus() - .value())); - } - - @Test - @DisplayName("요청된 미션 ID 개수가 실제 미션 개수와 다르면 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenSizeMismatch() throws Exception { - // given - Long invalidMissionId = 10000L; - List ids = List.of(courseMission1.getId(), invalidMissionId); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - MissionErrorCode.MISSION_ORDER_SIZE_MISMATCHED - .getStatus() - .value())); - } - - @Test - @DisplayName("요청된 미션 ID 목록에 유효하지 않은 미션 ID가 포함되어 있으면 400 Bad Request를 반환한다.") - void shouldReturnBadRequestWhenIdsContainInvalidMissionId() throws Exception { - // given - Long invalidMissionId = 10000L; - List ids = List.of(courseMission1.getId(), invalidMissionId); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - MissionErrorCode.MISSION_ORDER_IDS_NOT_MATCHED - .getStatus() - .value())); - } - - @Test - @DisplayName("유효한 요청이 들어오면 미션 순서를 변경한다.") - void shouldUpdateMissionOrdersWhenRequestIsValid() throws Exception { - // given - List ids = List.of(courseMission2.getId(), courseMission1.getId()); - UpdateMissionOrderRequest request = fixture.withOrderedIds(ids).build(); - - // when - ResultActions resultActions = - getResultActions(accessToken, courseTrip.getId(), courseStamp.getId(), request); - - // then - resultActions - .andExpect(status().isOk()) - .andExpect(jsonPath("$.success").value(true)) - .andExpect(jsonPath("$.status").value(HttpStatus.OK.value())); - } } @Nested diff --git a/src/test/java/com/ject/studytrip/stamp/presentation/controller/StampControllerIntegrationTest.java b/src/test/java/com/ject/studytrip/stamp/presentation/controller/StampControllerIntegrationTest.java index a3aa660..5cde9c2 100644 --- a/src/test/java/com/ject/studytrip/stamp/presentation/controller/StampControllerIntegrationTest.java +++ b/src/test/java/com/ject/studytrip/stamp/presentation/controller/StampControllerIntegrationTest.java @@ -68,8 +68,8 @@ void setup() { exploreTrip = tripTestHelper.saveTrip(member, TripCategory.EXPLORE); courseStamp1 = stampTestHelper.saveStamp(courseTrip, 1); courseStamp2 = stampTestHelper.saveStamp(courseTrip, 2); - courseMission1 = missionTestHelper.saveMission(courseStamp1, 1); - courseMission2 = missionTestHelper.saveMission(courseStamp1, 2); + courseMission1 = missionTestHelper.saveMission(courseStamp1); + courseMission2 = missionTestHelper.saveMission(courseStamp1); Member newMember = memberTestHelper.saveMember("test@kakao.com", "TEST NICKNAME"); newToken = diff --git a/src/test/java/com/ject/studytrip/studylog/application/service/StudyLogDailyMissionServiceTest.java b/src/test/java/com/ject/studytrip/studylog/application/service/StudyLogDailyMissionServiceTest.java index 1739cb9..34143f8 100644 --- a/src/test/java/com/ject/studytrip/studylog/application/service/StudyLogDailyMissionServiceTest.java +++ b/src/test/java/com/ject/studytrip/studylog/application/service/StudyLogDailyMissionServiceTest.java @@ -49,8 +49,8 @@ void setUp() { member = MemberFixture.createMemberFromKakaoWithId(1L); Trip trip = TripFixture.createTripWithId(1L, member, TripCategory.COURSE); Stamp stamp = StampFixture.createStampWithId(1L, trip, 1); - mission1 = MissionFixture.createMissionWithId(1L, stamp, 1); - mission2 = MissionFixture.createMissionWithId(2L, stamp, 2); + mission1 = MissionFixture.createMissionWithId(1L, stamp); + mission2 = MissionFixture.createMissionWithId(2L, stamp); dailyGoal = DailyGoalFixture.createDailyGoalWithId(1L, trip); } diff --git a/src/test/java/com/ject/studytrip/studylog/presentation/controller/StudyLogControllerIntegrationTest.java b/src/test/java/com/ject/studytrip/studylog/presentation/controller/StudyLogControllerIntegrationTest.java index 22623a9..4044593 100644 --- a/src/test/java/com/ject/studytrip/studylog/presentation/controller/StudyLogControllerIntegrationTest.java +++ b/src/test/java/com/ject/studytrip/studylog/presentation/controller/StudyLogControllerIntegrationTest.java @@ -78,7 +78,7 @@ void setUp() { member.getId().toString(), MemberRole.ROLE_USER.name()); courseTrip = tripTestHelper.saveTrip(member, TripCategory.COURSE); stamp = stampTestHelper.saveStamp(courseTrip, 1); - mission = missionTestHelper.saveMission(stamp, 1); + mission = missionTestHelper.saveMission(stamp); dailyGoal = dailyGoalTestHelper.saveDailyGoal(courseTrip); dailyMission = dailyMissionTestHelper.saveDailyMission(mission, dailyGoal); pomodoro = pomodoroTestHelper.savePomodoro(dailyGoal); @@ -470,7 +470,7 @@ void shouldReturnBadRequestWhenPomodoroIsDeleted() throws Exception { @DisplayName("선택된 미션들을 완료 처리할 때, 이미 삭제된 미션일 경우 400 Bad Request를 반환한다") void shouldReturnBadRequestWhenSelectedMissionIsAlreadyDeleted() throws Exception { // given - Mission deletedMission = missionTestHelper.saveDeletedMission(stamp, 2); + Mission deletedMission = missionTestHelper.saveDeletedMission(stamp); DailyMission newDailyMission = dailyMissionTestHelper.saveDailyMission(deletedMission, dailyGoal); CreateStudyLogRequest request = @@ -496,7 +496,7 @@ void shouldReturnBadRequestWhenSelectedMissionIsAlreadyDeleted() throws Exceptio @DisplayName("선택된 미션들을 완료 처리할 때, 이미 완료된 미션일 경우 400 Bad Request를 반환한다") void shouldReturnBadRequestWhenSelectedMissionIsAlreadyCompleted() throws Exception { // given - Mission deletedMission = missionTestHelper.saveCompletedMission(stamp, 2); + Mission deletedMission = missionTestHelper.saveCompletedMission(stamp); DailyMission newDailyMission = dailyMissionTestHelper.saveDailyMission(deletedMission, dailyGoal); CreateStudyLogRequest request = diff --git a/src/test/java/com/ject/studytrip/trip/presentation/controller/DailyGoalControllerIntegrationTest.java b/src/test/java/com/ject/studytrip/trip/presentation/controller/DailyGoalControllerIntegrationTest.java index 41b57f4..f2a6c68 100644 --- a/src/test/java/com/ject/studytrip/trip/presentation/controller/DailyGoalControllerIntegrationTest.java +++ b/src/test/java/com/ject/studytrip/trip/presentation/controller/DailyGoalControllerIntegrationTest.java @@ -48,8 +48,6 @@ @DisplayName("DailyGoalController 통합 테스트") public class DailyGoalControllerIntegrationTest extends BaseIntegrationTest { - private static final int DEFAULT_ORDER = 1; - @Autowired private MemberTestHelper memberTestHelper; @Autowired private TripTestHelper tripTestHelper; @Autowired private StampTestHelper stampTestHelper; @@ -73,8 +71,8 @@ void setUp() { member = memberTestHelper.saveMember(); trip = tripTestHelper.saveTrip(member, TripCategory.COURSE); stamp = stampTestHelper.saveStamp(trip, 1); - firstMission = missionTestHelper.saveMission(stamp, DEFAULT_ORDER); - secondMission = missionTestHelper.saveMission(stamp, DEFAULT_ORDER + 1); + firstMission = missionTestHelper.saveMission(stamp); + secondMission = missionTestHelper.saveMission(stamp); dailyGoal = dailyGoalTestHelper.saveDailyGoal(trip); dailyMission = dailyMissionTestHelper.saveDailyMission(firstMission, dailyGoal); token = @@ -343,7 +341,7 @@ void shouldReturnForbiddenWhenMissionsStampsDoesNotBelongToTrip() throws Excepti @DisplayName("조회된 미션들 중 삭제된 미션이 존재하면 400 Bad Request를 반환한다") void shouldReturnBadRequestWhenMissionIsDeleted() throws Exception { // given - Mission deleted = missionTestHelper.saveDeletedMission(stamp, DEFAULT_ORDER); + Mission deleted = missionTestHelper.saveDeletedMission(stamp); CreateDailyGoalRequest request = fixture.withMissionIds(List.of(deleted.getId())).build(); @@ -366,7 +364,7 @@ void shouldReturnBadRequestWhenMissionIsDeleted() throws Exception { @DisplayName("조회된 미션들 중 완료된 미션이 존재하면 400 Bad Request를 반환한다") void shouldReturnBadRequestWhenMissionIsAlreadyCompleted() throws Exception { // given - Mission completed = missionTestHelper.saveCompletedMission(stamp, DEFAULT_ORDER); + Mission completed = missionTestHelper.saveCompletedMission(stamp); CreateDailyGoalRequest request = fixture.withMissionIds(List.of(completed.getId())).build(); @@ -390,7 +388,7 @@ void shouldReturnBadRequestWhenMissionIsAlreadyCompleted() throws Exception { void shouldReturnBadRequestWhenMissionNotBelongToCurrentStamp() throws Exception { // given Stamp newStamp = stampTestHelper.saveStamp(trip, 2); - Mission newMission = missionTestHelper.saveMission(newStamp, DEFAULT_ORDER); + Mission newMission = missionTestHelper.saveMission(newStamp); CreateDailyGoalRequest request = fixture.withMissionIds(List.of(newMission.getId())).build(); @@ -429,7 +427,7 @@ private ResultActions getResultActions( @DisplayName("유효한 요청으로 특정 데일리 목표에 속한 데일리 미션을 수정한다") void shouldUpdateDailyGoal() throws Exception { // given - Mission addMission = missionTestHelper.saveMission(stamp, DEFAULT_ORDER); + Mission addMission = missionTestHelper.saveMission(stamp); UpdateDailyGoalRequest request = fixture.withDeleteDailyMissionIds(List.of(dailyMission.getId())) .withAddMissionIds(List.of(addMission.getId())) @@ -762,7 +760,7 @@ void shouldReturnForbiddenWhenAddMissionsStampsDoesNotBelongToTrip() throws Exce // given Trip newTrip = tripTestHelper.saveTrip(member, TripCategory.COURSE); Stamp newStamp = stampTestHelper.saveStamp(newTrip, 1); - Mission newMission = missionTestHelper.saveMission(newStamp, DEFAULT_ORDER); + Mission newMission = missionTestHelper.saveMission(newStamp); UpdateDailyGoalRequest request = fixture.withAddMissionIds(List.of(newMission.getId())).build(); @@ -786,7 +784,7 @@ void shouldReturnForbiddenWhenAddMissionsStampsDoesNotBelongToTrip() throws Exce @DisplayName("새로 추가할 미션들 중 삭제된 미션이 존재하면 400 Bad Request를 반환한다") void shouldReturnBadRequestWhenAnyAddMissionIsDeleted() throws Exception { // given - Mission deleted = missionTestHelper.saveDeletedMission(stamp, DEFAULT_ORDER); + Mission deleted = missionTestHelper.saveDeletedMission(stamp); UpdateDailyGoalRequest request = fixture.withAddMissionIds(List.of(deleted.getId())).build(); @@ -810,7 +808,7 @@ void shouldReturnBadRequestWhenAnyAddMissionIsDeleted() throws Exception { @DisplayName("새로 추가할 미션들 중 완료된 미션이 존재하면 400 Bad Request를 반환한다") void shouldReturnBadRequestWhenAnyAddMissionIsAlreadyCompleted() throws Exception { // given - Mission completed = missionTestHelper.saveCompletedMission(stamp, DEFAULT_ORDER); + Mission completed = missionTestHelper.saveCompletedMission(stamp); UpdateDailyGoalRequest request = fixture.withAddMissionIds(List.of(completed.getId())).build(); @@ -835,7 +833,7 @@ void shouldReturnBadRequestWhenAnyAddMissionIsAlreadyCompleted() throws Exceptio void shouldReturnBadRequestWhenAddMissionsDoNotBelongToCurrentStamp() throws Exception { // given Stamp newStamp = stampTestHelper.saveStamp(trip, 2); - Mission newMission = missionTestHelper.saveMission(newStamp, DEFAULT_ORDER); + Mission newMission = missionTestHelper.saveMission(newStamp); UpdateDailyGoalRequest request = fixture.withAddMissionIds(List.of(newMission.getId())).build();