From 5c2d9d4ceca575e8659bf1c64bdb8c83a4eaff0c Mon Sep 17 00:00:00 2001 From: ParkJuHan94 <1004sunye@naver.com> Date: Fri, 23 Feb 2024 04:05:39 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20:=20BiddingService=20=EC=99=80=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bidding/service/BiddingService.java | 13 +++++++++-- .../bidding/service/BiddingServiceTest.java | 22 +++++++++++++------ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/dev/handsup/bidding/service/BiddingService.java b/core/src/main/java/dev/handsup/bidding/service/BiddingService.java index 02d2ddf4..719bbf75 100644 --- a/core/src/main/java/dev/handsup/bidding/service/BiddingService.java +++ b/core/src/main/java/dev/handsup/bidding/service/BiddingService.java @@ -5,6 +5,7 @@ import org.springframework.stereotype.Service; import dev.handsup.auction.domain.Auction; +import dev.handsup.auction.service.AuctionService; import dev.handsup.bidding.domain.Bidding; import dev.handsup.bidding.dto.BiddingMapper; import dev.handsup.bidding.dto.request.RegisterBiddingRequest; @@ -18,6 +19,7 @@ public class BiddingService { private final BiddingRepository biddingRepository; + private final AuctionService auctionService; private void validateBiddingPrice(int biddingPrice, Auction auction) { Integer maxBiddingPrice = biddingRepository.findMaxBiddingPriceByAuctionId(auction.getId()); @@ -36,8 +38,15 @@ private void validateBiddingPrice(int biddingPrice, Auction auction) { } public RegisterBiddingResponse registerBidding(RegisterBiddingRequest request) { - validateBiddingPrice(request.biddingPrice(), request.auction()); - Bidding savedBidding = biddingRepository.save(BiddingMapper.toBidding(request)); + Auction auction = auctionService.getAuction(request.auctionId()); + validateBiddingPrice(request.biddingPrice(), auction); + + Bidding savedBidding = biddingRepository.save(Bidding.of( + request.biddingPrice(), + auction, + request.bidder() + ) + ); return BiddingMapper.toRegisterBiddingResponse(savedBidding); } } diff --git a/core/src/test/java/dev/handsup/bidding/service/BiddingServiceTest.java b/core/src/test/java/dev/handsup/bidding/service/BiddingServiceTest.java index ea1221f3..545582f2 100644 --- a/core/src/test/java/dev/handsup/bidding/service/BiddingServiceTest.java +++ b/core/src/test/java/dev/handsup/bidding/service/BiddingServiceTest.java @@ -4,7 +4,6 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.BDDMockito.*; -import static org.mockito.Mockito.*; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -14,8 +13,8 @@ import org.mockito.junit.jupiter.MockitoExtension; import dev.handsup.auction.domain.Auction; +import dev.handsup.auction.service.AuctionService; import dev.handsup.bidding.domain.Bidding; -import dev.handsup.bidding.dto.BiddingMapper; import dev.handsup.bidding.dto.request.RegisterBiddingRequest; import dev.handsup.bidding.dto.response.RegisterBiddingResponse; import dev.handsup.bidding.repository.BiddingRepository; @@ -30,10 +29,13 @@ class BiddingServiceTest { @Mock private BiddingRepository biddingRepository; + @Mock + private AuctionService auctionService; @InjectMocks private BiddingService biddingService; + private final String DIGITAL_DEVICE = "디지털 기기"; private final Auction auction = AuctionFixture.auction(); // 최소 입찰가 10000원 private final User user = UserFixture.user(); @@ -42,7 +44,8 @@ class BiddingServiceTest { void validateBiddingPrice_LessThanInitPrice_ThrowsException() { // given given(biddingRepository.findMaxBiddingPriceByAuctionId(any(Long.class))).willReturn(null); - RegisterBiddingRequest request = RegisterBiddingRequest.of(9000, auction, user); + RegisterBiddingRequest request = RegisterBiddingRequest.of(9000, auction.getId(), user); + given(auctionService.getAuction(auction.getId())).willReturn(auction); // when & then assertThatThrownBy(() -> biddingService.registerBidding(request)) @@ -56,7 +59,8 @@ void validateBiddingPrice_NotHighEnough_ThrowsException() { // given Integer maxBiddingPrice = 15000; given(biddingRepository.findMaxBiddingPriceByAuctionId(any(Long.class))).willReturn(maxBiddingPrice); - RegisterBiddingRequest request = RegisterBiddingRequest.of(15500, auction, user); + RegisterBiddingRequest request = RegisterBiddingRequest.of(15500, auction.getId(), user); + given(auctionService.getAuction(auction.getId())).willReturn(auction); // when & then assertThatThrownBy(() -> biddingService.registerBidding(request)) @@ -68,9 +72,13 @@ void validateBiddingPrice_NotHighEnough_ThrowsException() { @DisplayName("[입찰 등록이 성공적으로 이루어진다]") void registerBidding_Success() { // given - RegisterBiddingRequest request = RegisterBiddingRequest.of(20000, auction, user); - Bidding bidding = BiddingMapper.toBidding(request); - + RegisterBiddingRequest request = RegisterBiddingRequest.of(20000, auction.getId(), user); + given(auctionService.getAuction(auction.getId())).willReturn(auction); + Bidding bidding = Bidding.of( + request.biddingPrice(), + auction, + user + ); given(biddingRepository.save(any(Bidding.class))).willReturn(bidding); given(biddingRepository.findMaxBiddingPriceByAuctionId(any(Long.class))).willReturn(19000);