diff --git a/src/main/java/com/tasksprints/auction/api/auction/AuctionController.java b/src/main/java/com/tasksprints/auction/api/auction/AuctionController.java index 1f9de796..04db8c8d 100644 --- a/src/main/java/com/tasksprints/auction/api/auction/AuctionController.java +++ b/src/main/java/com/tasksprints/auction/api/auction/AuctionController.java @@ -80,8 +80,8 @@ public ResponseEntity> getAuctionStatus(@PathVariable Long auc @GetMapping @Operation(summary = "Get all auctions", description = "Retrieves all auctions.") @ApiResponse(responseCode = "200", description = "All auctions retrieved successfully") - public ResponseEntity>> getAllAuctions(@RequestParam(required = false) AuctionRequest.AuctionCategoryParam auctionCategory, @RequestParam(required = false) AuctionRequest.ProductCategoryParam productCategory) { - List auctions = auctionService.getAuctionsByFilter(productCategory, auctionCategory); + public ResponseEntity>> getAllAuctions(@RequestBody AuctionRequest.SearchCondition searchCondition) { + List auctions = auctionService.getAuctionsByFilter(searchCondition); return ResponseEntity.ok(ApiResult.success(ApiResponseMessages.ALL_AUCTIONS_RETRIEVED, auctions)); } diff --git a/src/main/java/com/tasksprints/auction/domain/auction/dto/request/AuctionRequest.java b/src/main/java/com/tasksprints/auction/domain/auction/dto/request/AuctionRequest.java index 4b262095..a2020db4 100644 --- a/src/main/java/com/tasksprints/auction/domain/auction/dto/request/AuctionRequest.java +++ b/src/main/java/com/tasksprints/auction/domain/auction/dto/request/AuctionRequest.java @@ -43,4 +43,24 @@ public ProductCategoryParam(String productCategory) { this.productCategory = ProductCategory.fromDisplayName(productCategory); } } + + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class AuctionStatusParam { + AuctionStatus auctionStatus; + + public AuctionStatusParam(String auctionStatus) { + this.auctionStatus = AuctionStatus.fromDisplayName(auctionStatus); + } + + } + @Getter + @AllArgsConstructor + public static class SearchCondition{ + String auctionCategory; + String productCategory; + LocalDateTime endTime; + String auctionStatus; + } } diff --git a/src/main/java/com/tasksprints/auction/domain/auction/model/AuctionStatus.java b/src/main/java/com/tasksprints/auction/domain/auction/model/AuctionStatus.java index 8401f93b..7b9cda2d 100644 --- a/src/main/java/com/tasksprints/auction/domain/auction/model/AuctionStatus.java +++ b/src/main/java/com/tasksprints/auction/domain/auction/model/AuctionStatus.java @@ -4,5 +4,13 @@ public enum AuctionStatus { PENDING, ACTIVE, CLOSED, - CANCELED + CANCELED; + + public static AuctionStatus fromDisplayName(String auctionStatus) { + try { + return AuctionStatus.valueOf(auctionStatus.toUpperCase()); // 대문자로 변환하여 비교 + } catch (IllegalArgumentException e) { + return AuctionStatus.ACTIVE; // 유효하지 않은 값일 경우 기본값으로 ACTIVE 반환 + } + } } diff --git a/src/main/java/com/tasksprints/auction/domain/auction/repository/AuctionRepository.java b/src/main/java/com/tasksprints/auction/domain/auction/repository/AuctionRepository.java index 450d5928..a848286b 100644 --- a/src/main/java/com/tasksprints/auction/domain/auction/repository/AuctionRepository.java +++ b/src/main/java/com/tasksprints/auction/domain/auction/repository/AuctionRepository.java @@ -5,10 +5,12 @@ import com.tasksprints.auction.domain.auction.model.AuctionCategory; import com.tasksprints.auction.domain.auction.repository.support.AuctionCriteriaRepository; import com.tasksprints.auction.domain.product.model.ProductCategory; +import com.tasksprints.auction.domain.auction.model.AuctionStatus; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -24,5 +26,6 @@ public interface AuctionRepository extends JpaRepository, Auction List findAuctionsByAuctionCategory(AuctionCategory auctionCategory); List findAuctionByProduct_Category(ProductCategory productCategory); + List findAuctionsByEndTimeBetweenAndAuctionStatusOrderByEndTimeAsc(LocalDateTime now, LocalDateTime next24Hours, AuctionStatus auctionStatus); } diff --git a/src/main/java/com/tasksprints/auction/domain/auction/repository/support/AuctionCriteriaRepository.java b/src/main/java/com/tasksprints/auction/domain/auction/repository/support/AuctionCriteriaRepository.java index cc6eea8d..2458d84f 100644 --- a/src/main/java/com/tasksprints/auction/domain/auction/repository/support/AuctionCriteriaRepository.java +++ b/src/main/java/com/tasksprints/auction/domain/auction/repository/support/AuctionCriteriaRepository.java @@ -2,11 +2,20 @@ import com.tasksprints.auction.domain.auction.model.Auction; import com.tasksprints.auction.domain.auction.model.AuctionCategory; +import com.tasksprints.auction.domain.auction.model.AuctionStatus; import com.tasksprints.auction.domain.product.model.ProductCategory; + +import java.time.Duration; +import java.time.LocalDateTime; import java.util.List; public interface AuctionCriteriaRepository { public List getAuctionsByFilters(ProductCategory productCategory, - AuctionCategory category); + AuctionCategory category, + LocalDateTime now, + LocalDateTime endTime, + AuctionStatus status); + //삭제해야 함 + public List getAuctionsEndWith24Hours(LocalDateTime now, LocalDateTime next24Hours, AuctionStatus auctionStatus); } diff --git a/src/main/java/com/tasksprints/auction/domain/auction/repository/support/AuctionCriteriaRepositoryImpl.java b/src/main/java/com/tasksprints/auction/domain/auction/repository/support/AuctionCriteriaRepositoryImpl.java index 0ed51694..75ecd309 100644 --- a/src/main/java/com/tasksprints/auction/domain/auction/repository/support/AuctionCriteriaRepositoryImpl.java +++ b/src/main/java/com/tasksprints/auction/domain/auction/repository/support/AuctionCriteriaRepositoryImpl.java @@ -1,14 +1,17 @@ package com.tasksprints.auction.domain.auction.repository.support; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import com.tasksprints.auction.domain.auction.model.Auction; import com.tasksprints.auction.domain.auction.model.AuctionCategory; +import com.tasksprints.auction.domain.auction.model.AuctionStatus; import com.tasksprints.auction.domain.auction.model.QAuction; import com.tasksprints.auction.domain.product.model.ProductCategory; import com.tasksprints.auction.domain.product.model.QProduct; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; +import java.time.LocalDateTime; import java.util.List; @RequiredArgsConstructor @@ -17,7 +20,10 @@ public class AuctionCriteriaRepositoryImpl implements AuctionCriteriaRepository private final JPAQueryFactory queryFactory; public List getAuctionsByFilters(ProductCategory productCategory, - AuctionCategory category + AuctionCategory category, + LocalDateTime now, + LocalDateTime endTime, + AuctionStatus status ) { QAuction auction = QAuction.auction; QProduct product = QProduct.product; @@ -25,8 +31,28 @@ public List getAuctionsByFilters(ProductCategory productCategory, .leftJoin(auction.product, product) // Auction과 Product 조인 .where(category != null ? auction.auctionCategory.eq(category) : null) .where(productCategory != null ? product.category.eq(productCategory) : null) // ProductCategory 필터 + .where((now != null && endTime != null) ? auction.endTime.between(now, endTime) : null) + .where(status != null ? auction.auctionStatus.eq(status) : null) + // orderBy는 성능 이슈로 일단 보류 +// .orderBy(auction.endTime.asc()) .fetch(); } + @Deprecated + @Override + public List getAuctionsEndWith24Hours(LocalDateTime now, LocalDateTime next24Hours, AuctionStatus auctionStatus) { + QAuction auction = QAuction.auction; + + BooleanExpression endTimeBetween = auction.endTime.between(now, next24Hours); + BooleanExpression statusEquals = auction.auctionStatus.eq(auctionStatus); + + return queryFactory + .selectFrom(auction) + .where(endTimeBetween.and(statusEquals)) + .orderBy(auction.endTime.asc()) + .fetch(); + } + + } diff --git a/src/main/java/com/tasksprints/auction/domain/auction/service/AuctionService.java b/src/main/java/com/tasksprints/auction/domain/auction/service/AuctionService.java index f901fada..35d63fd5 100644 --- a/src/main/java/com/tasksprints/auction/domain/auction/service/AuctionService.java +++ b/src/main/java/com/tasksprints/auction/domain/auction/service/AuctionService.java @@ -3,6 +3,7 @@ import com.tasksprints.auction.domain.auction.dto.request.AuctionRequest; import com.tasksprints.auction.domain.auction.dto.response.AuctionResponse; +import java.time.LocalDateTime; import java.util.List; /** @@ -25,5 +26,10 @@ public interface AuctionService { List getAuctionsByAuctionCategory(AuctionRequest.AuctionCategoryParam param); - List getAuctionsByFilter(AuctionRequest.ProductCategoryParam productCategoryParam, AuctionRequest.AuctionCategoryParam auctionCategoryParam); + List getAuctionsByFilter(AuctionRequest.SearchCondition searchCondition); + + @Deprecated + List getAuctionsByEndTimeBetweenOrderByEndTimeAsc(LocalDateTime now, LocalDateTime next24Hours); + @Deprecated + List getAuctionsEndWith24Hours(LocalDateTime now, LocalDateTime next24Hours); } diff --git a/src/main/java/com/tasksprints/auction/domain/auction/service/AuctionServiceImpl.java b/src/main/java/com/tasksprints/auction/domain/auction/service/AuctionServiceImpl.java index 766a1372..64187cff 100644 --- a/src/main/java/com/tasksprints/auction/domain/auction/service/AuctionServiceImpl.java +++ b/src/main/java/com/tasksprints/auction/domain/auction/service/AuctionServiceImpl.java @@ -6,6 +6,7 @@ import com.tasksprints.auction.domain.auction.exception.AuctionNotFoundException; import com.tasksprints.auction.domain.auction.exception.InvalidAuctionTimeException; import com.tasksprints.auction.domain.auction.model.Auction; +import com.tasksprints.auction.domain.auction.model.AuctionCategory; import com.tasksprints.auction.domain.auction.model.AuctionStatus; import com.tasksprints.auction.domain.auction.repository.AuctionRepository; import com.tasksprints.auction.domain.user.exception.UserNotFoundException; @@ -15,6 +16,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.List; @Service @@ -127,10 +129,52 @@ public List getAuctionsByAuctionCategory(AuctionRequest.Auction * NULL 안정성 보장을 해줬음 **/ @Override - public List getAuctionsByFilter(AuctionRequest.ProductCategoryParam productCategoryParam, AuctionRequest.AuctionCategoryParam auctionCategoryParam) { + public List getAuctionsByFilter(AuctionRequest.SearchCondition searchCondition) { + LocalDateTime now = null; + //now는 endTime이 SeachCondition에 들어왔을 때만 값이 있어야 한다. (현재 시각 ~ User가 정한 시각까지 경매 목록 조회) + if (searchCondition.getEndTime() != null) { + now = LocalDateTime.now(); + } + List foundAuctions = auctionRepository.getAuctionsByFilters( - productCategoryParam != null ? productCategoryParam.getProductCategory() : null, - auctionCategoryParam != null ? auctionCategoryParam.getAuctionCategory() : null); +// productCategoryParam != null ? productCategoryParam.getProductCategory() : null, +// auctionCategoryParam != null ? auctionCategoryParam.getAuctionCategory() : null, + searchCondition.getProductCategory() !=null ? new AuctionRequest.ProductCategoryParam(searchCondition.getProductCategory()).getProductCategory() : null, + searchCondition.getAuctionCategory() != null ? new AuctionRequest.AuctionCategoryParam(searchCondition.getAuctionCategory()).getAuctionCategory() : null, + now, + searchCondition.getEndTime() != null ? searchCondition.getEndTime(): null, + searchCondition.getAuctionStatus() != null ? new AuctionRequest.AuctionStatusParam(searchCondition.getAuctionStatus()).getAuctionStatus() : null + ); + + return foundAuctions.stream() + .map(AuctionResponse::of) + .toList(); + } + + @Deprecated + @Override + public List getAuctionsByEndTimeBetweenOrderByEndTimeAsc(LocalDateTime now, LocalDateTime next24Hours) { + // auction의 endTime까지 24시간 이하로 남은 진행중인 경매 목록 조회 + //LocalDateTime now = LocalDateTime.now(); + //LocalDateTime next24Hours = now.plusHours(24); + + //endTime이 now ~ now + 24hour에 포함되는 진행 상태인 경매 목록 조회 + List foundAuctions = auctionRepository.findAuctionsByEndTimeBetweenAndAuctionStatusOrderByEndTimeAsc(now, next24Hours, AuctionStatus.ACTIVE); + + return foundAuctions.stream() + .map(AuctionResponse::of) + .toList(); + } + + @Deprecated + @Override + public List getAuctionsEndWith24Hours(LocalDateTime now, LocalDateTime next24Hours) { + // auction의 endTime까지 24시간 이하로 남은 진행중인 경매 목록 조회 + // LocalDateTime now = LocalDateTime.now(); + // LocalDateTime next24Hours = now.plusHours(24); + + //endTime이 now ~ now + 24hour에 포함되는 진행 상태인 경매 목록 조회 + List foundAuctions = auctionRepository.getAuctionsEndWith24Hours(now, next24Hours, AuctionStatus.ACTIVE); return foundAuctions.stream() .map(AuctionResponse::of) diff --git a/src/test/java/com/tasksprints/auction/api/AuctionControllerTest.java b/src/test/java/com/tasksprints/auction/api/AuctionControllerTest.java index f2700ef7..1a26de33 100644 --- a/src/test/java/com/tasksprints/auction/api/AuctionControllerTest.java +++ b/src/test/java/com/tasksprints/auction/api/AuctionControllerTest.java @@ -135,6 +135,16 @@ public void testFindAuctionByUsingWrongAuctionCategory_Success() throws Exceptio .andExpect(jsonPath("$.message").value(ApiResponseMessages.ALL_AUCTIONS_RETRIEVED)); } + @Test + @DisplayName("마감 기한이 24시간 이하로 남은 경매 목록 조회") + public void testFindAuctionsEndWithin24Hours_Success() throws Exception { + + /* + 테스트 코드 추가 + * */ + + } + @Test @DisplayName("입찰 제출 성공") public void testSubmitBid_Success() throws Exception { diff --git a/src/test/java/com/tasksprints/auction/domain/auction/repository/AuctionRepositoryTest.java b/src/test/java/com/tasksprints/auction/domain/auction/repository/AuctionRepositoryTest.java index d9b82b59..7f59b917 100644 --- a/src/test/java/com/tasksprints/auction/domain/auction/repository/AuctionRepositoryTest.java +++ b/src/test/java/com/tasksprints/auction/domain/auction/repository/AuctionRepositoryTest.java @@ -20,6 +20,7 @@ import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertTrue; @DataJpaTest @@ -46,6 +47,28 @@ public void setUp() { userRepository.save(seller); } + private Auction createAuction(User seller, AuctionCategory category, AuctionStatus status) { + return Auction.create( + LocalDateTime.of(2024, 8, 1, 10, 0), + LocalDateTime.of(2024, 9, 1, 10, 0), + BigDecimal.valueOf(100.00), + category, + status, + seller + ); + } + +// private Auction createAuction(LocalDateTime endTime, AuctionStatus status) { +// return Auction.create( +// LocalDateTime.of(2024, 8, 1, 10, 0), +// endTime, +// BigDecimal.valueOf(100.00), +// AuctionCategory.PUBLIC_PAID, +// status, +// seller +// ); +// } + @Test @DisplayName("사용자 ID로 경매 목록 조회") public void testFindAuctionsByUserId() { @@ -86,25 +109,25 @@ public void testFindAll() { } - @Test - @DisplayName("경매 유형이 []인 경매 목록 조회") - public void testFindAuctionsByAuctionCategory() { - //given - Auction auction1 = createAuction(seller, AuctionCategory.PUBLIC_FREE, AuctionStatus.ACTIVE); - Auction auction2 = createAuction(seller, AuctionCategory.PUBLIC_PAID, AuctionStatus.PENDING); - Auction auction3 = createAuction(seller, AuctionCategory.PUBLIC_PAID, AuctionStatus.PENDING); - - auctionRepository.save(auction1); - auctionRepository.save(auction2); - auctionRepository.save(auction3); - - //when - List auctions = auctionRepository.findAuctionsByAuctionCategory(AuctionCategory.PUBLIC_PAID); - - //then - assertThat(auctions).hasSize(2); - assertThat(auctions).allMatch(auction -> auction.getAuctionCategory() == AuctionCategory.PUBLIC_PAID); - } +// @Test +// @DisplayName("경매 유형이 []인 경매 목록 조회") +// public void testFindAuctionsByAuctionCategory() { +// //given +// Auction auction1 = createAuction(seller, AuctionCategory.PUBLIC_FREE, AuctionStatus.ACTIVE); +// Auction auction2 = createAuction(seller, AuctionCategory.PUBLIC_PAID, AuctionStatus.PENDING); +// Auction auction3 = createAuction(seller, AuctionCategory.PUBLIC_PAID, AuctionStatus.PENDING); +// +// auctionRepository.save(auction1); +// auctionRepository.save(auction2); +// auctionRepository.save(auction3); +// +// //when +// List auctions = auctionRepository.findAuctionsByAuctionCategory(AuctionCategory.PUBLIC_PAID); +// +// //then +// assertThat(auctions).hasSize(2); +// assertThat(auctions).allMatch(auction -> auction.getAuctionCategory() == AuctionCategory.PUBLIC_PAID); +// } @Test @DisplayName("QueryDSL 필터를 통해서 경매 목록 조회") @@ -115,7 +138,7 @@ public void testFindAllUsingFilter() { auctionRepository.save(auction1); auctionRepository.save(auction2); - List auctions = auctionRepository.getAuctionsByFilters(null, AuctionCategory.PUBLIC_FREE); + List auctions = auctionRepository.getAuctionsByFilters(null, AuctionCategory.PUBLIC_FREE, null, null, null); log.info(auctions.toString()); assertThat(auctions).hasSize(1); @@ -125,14 +148,40 @@ public void testFindAllUsingFilter() { } - private Auction createAuction(User seller, AuctionCategory category, AuctionStatus status) { - return Auction.create( - LocalDateTime.now(), - LocalDateTime.now().plusDays(7), - BigDecimal.valueOf(100.00), - category, - status, - seller - ); - } +// @Test +// @DisplayName("경매 마감 시간까지 24시간 이하로 남은 경매 목록 조회") +// public void testFindAuctionsByEndTimeBetweenOrderByEndTimeAsc() { +// //given +// LocalDateTime fixedNow = LocalDateTime.of(2024, 9, 1, 10, 0); +// LocalDateTime next24Hours = fixedNow.plusHours(24); +// +// List auctions = List.of( +// createAuction(fixedNow.plusHours(23), AuctionStatus.ACTIVE), +// createAuction(fixedNow.plusHours(22), AuctionStatus.ACTIVE), +// createAuction(fixedNow.plusHours(21), AuctionStatus.ACTIVE), +// createAuction(fixedNow.plusHours(48), AuctionStatus.ACTIVE), +// createAuction(fixedNow.plusHours(20), AuctionStatus.PENDING) +// ); +// +// auctionRepository.saveAll(auctions); +// +// // when +// List result = auctionRepository.getAuctionsEndWith24Hours(fixedNow, next24Hours, AuctionStatus.ACTIVE); +// +// //then +// assertThat(result).hasSize(3); +// +// assertAll("endTime을 기준으로 오름차순 정렬이 되었는지 확인", +// () -> { +// LocalDateTime previousEndTime = null; +// for (Auction auction : result) { +// if (previousEndTime != null) { +// assertThat(auction.getEndTime()).isAfterOrEqualTo(previousEndTime); +// } +// previousEndTime = auction.getEndTime(); +// } +// } +// ); +// } + } diff --git a/src/test/java/com/tasksprints/auction/domain/auction/service/AuctionServiceImplTest.java b/src/test/java/com/tasksprints/auction/domain/auction/service/AuctionServiceImplTest.java index 85c6c77a..3f828c89 100644 --- a/src/test/java/com/tasksprints/auction/domain/auction/service/AuctionServiceImplTest.java +++ b/src/test/java/com/tasksprints/auction/domain/auction/service/AuctionServiceImplTest.java @@ -23,6 +23,7 @@ import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.Comparator; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -62,8 +63,20 @@ private Auction createAuction(Long auctionId, User seller, AuctionStatus status) .id(auctionId) .auctionCategory(AuctionCategory.PUBLIC_PAID) .auctionStatus(status) - .startTime(LocalDateTime.now()) - .endTime(LocalDateTime.now().plusDays(7)) + .startTime(LocalDateTime.of(2024, 8, 1, 10, 0)) + .endTime(LocalDateTime.of(2024, 9, 1, 10, 0)) + .startingBid(BigDecimal.valueOf(100.00)) + .seller(seller) + .build(); + } + + private Auction createAuction(Long auctionId, LocalDateTime endTime, AuctionStatus status) { + return Auction.builder() + .id(auctionId) + .auctionCategory(AuctionCategory.PUBLIC_PAID) + .auctionStatus(status) + .startTime(LocalDateTime.of(2024, 8, 1, 10, 0)) + .endTime(endTime) .startingBid(BigDecimal.valueOf(100.00)) .seller(seller) .build(); @@ -304,22 +317,22 @@ void testGetAuctionById_AuctionNotFound() { @Nested @DisplayName("경매 유형이 []인 경매 목록 조회") class GetAuctionsByAuctionCategoryTests { - @Test - @DisplayName("경매 유형 조회 : [성공]") - public void testGetAuctionsByAuctionCategory_Success() { - Auction auction1 = createAuction(1L, seller, AuctionStatus.PENDING); - Auction auction2 = createAuction(2L, seller, AuctionStatus.PENDING); - AuctionRequest.AuctionCategoryParam param = new AuctionRequest.AuctionCategoryParam(AuctionCategory.PUBLIC_PAID); - List expectedAuctions = List.of(auction1, auction2); - - when(auctionRepository.findAuctionsByAuctionCategory(AuctionCategory.PUBLIC_PAID)).thenReturn(expectedAuctions); - List expectedResponses = expectedAuctions.stream() - .map(AuctionResponse::of) - .collect(Collectors.toList()); - - List actualAuctions = auctionService.getAuctionsByAuctionCategory(param); - assertThat(actualAuctions).isEqualTo(expectedResponses); - } +// @Test +// @DisplayName("경매 유형 조회 : [성공]") +// public void testGetAuctionsByAuctionCategory_Success() { +// Auction auction1 = createAuction(1L, seller, AuctionStatus.PENDING); +// Auction auction2 = createAuction(2L, seller, AuctionStatus.PENDING); +// AuctionRequest.AuctionCategoryParam param = new AuctionRequest.AuctionCategoryParam(AuctionCategory.PUBLIC_PAID); +// List expectedAuctions = List.of(auction1, auction2); +// +// when(auctionRepository.findAuctionsByAuctionCategory(AuctionCategory.PUBLIC_PAID)).thenReturn(expectedAuctions); +// List expectedResponses = expectedAuctions.stream() +// .map(AuctionResponse::of) +// .collect(Collectors.toList()); +// +// List actualAuctions = auctionService.getAuctionsByAuctionCategory(param); +// assertThat(actualAuctions).isEqualTo(expectedResponses); +// } @Test @DisplayName("경매 유형 조회 : [성공] -Criteria 사용") @@ -329,7 +342,7 @@ public void testGetAuctionsByAuctionCategory_Success_Criteria() { AuctionRequest.AuctionCategoryParam param = new AuctionRequest.AuctionCategoryParam(AuctionCategory.PUBLIC_PAID); List expectedAuctions = List.of(auction1, auction2); - when(auctionRepository.getAuctionsByFilters(null, AuctionCategory.PUBLIC_PAID)).thenReturn(expectedAuctions); + when(auctionRepository.getAuctionsByFilters(null, AuctionCategory.PUBLIC_PAID, null, null, null)).thenReturn(expectedAuctions); List expectedResponses = expectedAuctions.stream() .map(AuctionResponse::of) .toList(); @@ -366,4 +379,35 @@ public void testGetAuctionsByAuctionCategory_AuctionNotFound_Criteria() { assertThat(actualAuctions).isEmpty(); } } + +// @Nested +// @DisplayName("경매 마감 시간이 24시간 이하인 경매 목록 조회") +// class GetAuctionsByEndTimeBetweenAndAuctionStatusOrderByEndTimeAscTests { +// @Test +// @DisplayName("경매 마감 임박 목록 조회 : 성공") +// public void testGetAuctionsByEndTimeBetweenAndAuctionStatusOrderByEndTimeAsc_Success() { +// //given +// LocalDateTime fixedNow = LocalDateTime.of(2024, 9, 1, 10, 0); +// LocalDateTime next24Hours = fixedNow.plusHours(24); +// +// List expectedAuctions = List.of(createAuction(1L, fixedNow.plusHours(21), AuctionStatus.ACTIVE), +// createAuction(2L, fixedNow.plusHours(22), AuctionStatus.ACTIVE), +// createAuction(3L, fixedNow.plusHours(23), AuctionStatus.ACTIVE) +// ); +// +// List expectedResponses = expectedAuctions.stream() +// .map(AuctionResponse::of) +// .toList(); +// +// when(auctionRepository.getAuctionsEndWith24Hours(fixedNow, next24Hours, AuctionStatus.ACTIVE)).thenReturn(expectedAuctions); +// List actualResponses = auctionService.getAuctionsEndWith24Hours(fixedNow, next24Hours); +// +// //then +// assertThat(actualResponses).isEqualTo(expectedResponses); +// +// +// } +// } + + }