package no.gunbang.market.unit.domain.auction.entity;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import no.gunbang.market.util.TestData;
import no.gunbang.market.common.exception.CustomException;
import no.gunbang.market.common.exception.ErrorCode;
import no.gunbang.market.domain.auction.entity.Auction;
import no.gunbang.market.domain.auction.entity.Bid;
import no.gunbang.market.domain.user.entity.User;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
class BidTest {
User bidder;
Auction auction;
Bid bid;
@BeforeEach
void setUp() {
bidder = TestData.USER_THREE;
auction = TestData.AUCTION_BY_USER_ONE;
bid = TestData.BID_BY_USER_TWO;
}
@Test
@DisplayName("실패: 입찰가가 기존 금액과 동일하면 예외 발생")
void failsToBidIfNewBidPriceIsSameAsCurrentBidPrice(){
// given
long bidPrice = TestData.BID_PRICE;
// when
CustomException thrownException = assertThrows(
CustomException.class,
() -> bid.updateBid(
bidPrice,
bidder
)
);
// then
String expectedMessage = ErrorCode.BID_TOO_LOW.getMessage();
String actualMessage = thrownException.getMessage();
assertEquals(expectedMessage, actualMessage);
}
@Test
@DisplayName("실패: 같은 사용자가 연속으로 입찰하면 예외 발생")
void failsToBidIfConsecutiveBiddingOccurs() {
// given
long firstBidPrice = TestData.BID_PRICE + 1;
long secondBidPrice = firstBidPrice + 1;
bid.updateBid(firstBidPrice, bidder);
// when
CustomException thrownException = assertThrows(
CustomException.class,
() -> bid.updateBid(
secondBidPrice,
bidder
)
);
// then
String expectedMessage = ErrorCode.CONSECUTIVE_BID_NOT_ALLOWED.getMessage();
String actualMessage = thrownException.getMessage();
assertEquals(expectedMessage, actualMessage);
}
@Test
@DisplayName("실패: 사용자가 보유한 골드보다 입찰 금액이 높으면 예외 발생")
void failsToBidIfBidPriceIsHigherThanHoldingGoldAmount() {
// given
long bidPrice = bidder.getGold() + 1;
// when
CustomException thrownException = assertThrows(
CustomException.class,
() -> bid.updateBid(
bidPrice,
bidder
)
);
// then
String expectedMessage = ErrorCode.EXCESSIVE_BID.getMessage();
String actualMessage = thrownException.getMessage();
assertEquals(expectedMessage, actualMessage);
}
}
'끝을 보는 용기' 카테고리의 다른 글
Day 122 - 게임 아이템 거래소 프로젝트 70%, 삽질로 하루를 허비해 버렸다 (0) | 2025.02.05 |
---|---|
Day 121 - 게임 아이템 거래소 프로젝트 55%, 한 사용자가 연속으로 입찰하지 못하도록 막아야 할까? (0) | 2025.02.04 |
Day 120 - 게임 아이템 거래소 프로젝트 45%, 자물쇠를 걸기도 전에 데드락(Deadlock)이 발생했을 때 심정이란 (0) | 2025.02.03 |
Day 119 - 게임 아이템 거래소 프로젝트 35%, 낙낙(Knock Knock) 대신 락락(Lock Lock), 제대로 골머리 앓는 중 (0) | 2025.02.02 |
Day 118 - 게임 아이템 거래소 프로젝트 25%, 코드 한 줄 쓸 때마다 '지금이 최선일까?' 고민하다 (0) | 2025.02.01 |