728x90
@SpringBootTest
@Transactional
class OrderServiceTest {
@Autowired
EntityManager em;
@Autowired
OrderService orderService;
@Autowired
OrderRepository orderRepository;
@Test
public void 상품주문() throws Exception{
//given
Member member = createMember();
Book book = createBook("시골 JPA",10000,10);
//when
int orderCount = 2;
Long orderId = orderService.order(member.getId(),book.getId(),orderCount);
//then
Order getOrder = orderRepository.findOne(orderId);
assertEquals( OrderStatus.ORDER,getOrder.getStatus(),"상품 주문시 상태는 ORDER");
assertEquals( 1,getOrder.getOrderItems().size(), "주문한 상품 종류 수가 정확해야 한다.");
assertEquals(10000 * orderCount , getOrder.getTotalPrice() , "주문 가격은 가격 * 수량이다.");
assertEquals(8,book.getStockQuantity(),"주문 수량만큼 재고가 줄어야 한다.");
}
@Test
public void 상품주문_재고수량초과() throws Exception{
//given
Member member = createMember();
Item item = createBook("시골 JPA",10000,10);
int orderCount = 11;
//when
//then
assertThrows(NotEnoughStockException.class,() -> orderService.order(member.getId(),item.getId(),orderCount));
//fail("재고 수량 부족 예외가 발생해야 한다.");
}
@Test
public void 주문취소() throws Exception{
//given
Member member = createMember();
Book item = createBook("시골 JPA",10000,10);
int orderCount = 2;
Long orderId = orderService.order(member.getId(),item.getId(),orderCount);
//when
orderService.cancelOrder(orderId);
//then
Order getOrder = orderRepository.findOne(orderId);
assertEquals(OrderStatus.CANCEL,getOrder.getStatus(),"주문 취소시 상태는 CANCEL 이다");
assertEquals(10,item.getStockQuantity(),"주문이 취소된 상품은 그만큼 재고가 증가해야 한다");
}
private Book createBook(String name,int price, int stockQuantity) {
Book book = new Book();
book.setName(name);
book.setPrice(price);
book.setStockQuantity(stockQuantity);
em.persist(book);
return book;
}
private Member createMember() {
Member member = new Member();
member.setName("회원1");
member.setAddress(new Address("서울","강가","123-123"));
em.persist(member);
return member;
}
}
- 상품 주문 메서드
- Member 생성 -> createMember()
- createMember 함수 : Member를 생성해준다.
- Name = 회원 1, Address는 서울, 강가, 123-123으로 생성하여 준다.
- Book 생성 -> createBook(name,price,stockQuantity)
- createBook 함수 : Book Item을 생성해 준다.
- name, price, stockQuantity를 매개변수로 받아 Book을 생성해 준다.
- 주문 횟수를 정한 뒤 OrderService.order 메서드 호출
- 확인
- ORDER 상태 값으로 잘 들어갔는지?
- 주문한 상품 종류가 잘 맞는지?
- 주문한 총금액이 잘 맞는지? -> 가격 * 수량
- 주문 수량만큼 재고가 줄었는지?
- Member 생성 -> createMember()
- 상품 주문_재고 수량 초과 메서드
- Member 생성 -> createMember()
- Book 생성 -> createBook(name, price, stockQuantity)
- 주문 수량을 초과하게끔 설정한 뒤 에러 발생하는지 확인
- assertThrows(NotEnoughStockException.class, () -> orderService.order(member.getId(), item.getId(), orderCount));
- 주문 취소 메서드
- Member 생성 -> createMember()
- Book 생성 -> createBook(name, price, stockQuantity)
- 주문 횟수를 설정한 뒤 주문 후, 다시 주문 취소 메서드 실행
- 확인
- 주문 취소가 잘 되었는지(status가 CANCEL 상태야 된다)
- 재고가 취소한 만큼 늘어났는지?
728x90
'실전! 스프링 부트와 JPA 활용1(웹 애플리케이션 개발)' 카테고리의 다른 글
| Ch07. 웹 계층 개발 - 홈 화면과 레이아웃 (0) | 2021.12.07 |
|---|---|
| Ch06. 상품 도메인 개발 - 주문 검색 기능 개발 (0) | 2021.12.06 |
| Ch06. 상품 도메인 개발 - 주문 Repository 개발, 주문 Service 개발 (0) | 2021.12.06 |
| Ch06. 주문 도메인 개발 - 주문, 주문상품 엔티티 개발 (0) | 2021.12.06 |
| Ch05. 상품 도메인 개발 - 상품 Service 개발 (0) | 2021.12.05 |