From a47eb966be0c9917e04c6164c95281e5a6621346 Mon Sep 17 00:00:00 2001 From: kim Date: Mon, 25 Jan 2021 01:11:51 +0900 Subject: [PATCH] jpashop : order test --- .../jpashop/service/OrderServiceTest.java | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 jpashop/src/test/java/com/example/jpashop/service/OrderServiceTest.java diff --git a/jpashop/src/test/java/com/example/jpashop/service/OrderServiceTest.java b/jpashop/src/test/java/com/example/jpashop/service/OrderServiceTest.java new file mode 100644 index 00000000..46037873 --- /dev/null +++ b/jpashop/src/test/java/com/example/jpashop/service/OrderServiceTest.java @@ -0,0 +1,100 @@ +package com.example.jpashop.service; + +import com.example.jpashop.domain.Address; +import com.example.jpashop.domain.Member; +import com.example.jpashop.domain.Order; +import com.example.jpashop.domain.OrderStatus; +import com.example.jpashop.domain.item.Book; +import com.example.jpashop.domain.item.Item; +import com.example.jpashop.exception.NotEnoughStockException; +import com.example.jpashop.repository.OrderRepository; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.Transactional; + +import javax.persistence.EntityManager; + +import static org.junit.Assert.*; + +@RunWith(SpringRunner.class) +@SpringBootTest +@Transactional +public 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); + + int orderCount = 2; + // when + Long orderId = orderService.order(member.getId(), book.getId(), orderCount); + + // then + Order getOrder = orderRepository.findOne(orderId); + + assertEquals("상품 주문시 상태는 ORDER", OrderStatus.ORDER, getOrder.getStatus()); + assertEquals("주문한 상품 종류 수가 정확해야 한다.", 1, getOrder.getOrderItems().size()); + assertEquals("주문 가격은 가격 * 수량이다.", 10000 * orderCount, getOrder.getTotalPrice()); + assertEquals("주문 수량만큼 재고가 줄어야 한다.", 8, book.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; + } + + @Test(expected = NotEnoughStockException.class) + public void 상품주문_재고수량초과() throws Exception { + // given + Member member = createMember(); + Item item = createBook("시골 JPA", 10000, 10); + + int orderCount = 11; + + // when + Long order = orderService.order(member.getId(), item.getId(), orderCount); + // then + fail("재고 수량 부족 예외가 발생해야 한다."); + } + + + @Test + public void 주문취소() throws Exception { + // given + Member member = createMember(); + Book book = createBook("시골 JPA", 10000, 10); + + int orderCount = 2; + Long orderId = orderService.order(member.getId(), book.getId(), orderCount); + + // when + orderService.cancelOrder(orderId); + + // then + Order getOrder = orderRepository.findOne(orderId); + + assertEquals("주문 취소시 상태는 CANCEL이다.", OrderStatus.CANCEL, getOrder.getStatus()); + assertEquals("주문이 취소된 상품은 그만큼 재고가 증가해야한다.", 10, book.getStockQuantity()); + } +} \ No newline at end of file