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);