From 873fb5e79e96f58b515cfbc24ee3e5864267bd5a Mon Sep 17 00:00:00 2001 From: yyy9942 Date: Tue, 31 Dec 2019 16:04:54 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EC=9E=A5=EB=B0=94=EA=B5=AC=EB=8B=88=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=8C=80=EC=83=81=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/delfood/dto/ItemDTO.java | 8 + .../com/delfood/service/CartServiceTest.java | 157 +++++++++++++++++- 2 files changed, 160 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/delfood/dto/ItemDTO.java b/src/main/java/com/delfood/dto/ItemDTO.java index 416c743..7a87817 100644 --- a/src/main/java/com/delfood/dto/ItemDTO.java +++ b/src/main/java/com/delfood/dto/ItemDTO.java @@ -2,12 +2,15 @@ import java.util.List; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; @Getter @EqualsAndHashCode(of = {"menuInfo", "options", "shopInfo"}) +@NoArgsConstructor +@AllArgsConstructor public class ItemDTO { private CacheMenuDTO menuInfo; // id, name, price private List options; // id, name, price @@ -30,6 +33,8 @@ public boolean hasNullDataBeforeInsertCart() { @Getter @EqualsAndHashCode + @NoArgsConstructor + @AllArgsConstructor public static class CacheMenuDTO { private Long id; private String name; @@ -38,6 +43,8 @@ public static class CacheMenuDTO { @Getter @EqualsAndHashCode + @NoArgsConstructor + @AllArgsConstructor public static class CacheShopDTO { private Long id; private String name; @@ -45,6 +52,7 @@ public static class CacheShopDTO { @Getter @EqualsAndHashCode + @AllArgsConstructor public static class CacheOptionDTO { private Long id; private String name; diff --git a/src/test/java/com/delfood/service/CartServiceTest.java b/src/test/java/com/delfood/service/CartServiceTest.java index b58df32..b24ab51 100644 --- a/src/test/java/com/delfood/service/CartServiceTest.java +++ b/src/test/java/com/delfood/service/CartServiceTest.java @@ -1,8 +1,19 @@ package com.delfood.service; +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.CoreMatchers.equalTo; import static org.mockito.BDDMockito.given; - +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import com.delfood.dao.CartDao; +import com.delfood.dto.ItemDTO; +import com.delfood.dto.ShopDTO; +import com.delfood.dto.ItemDTO.CacheMenuDTO; +import com.delfood.dto.ItemDTO.CacheOptionDTO; +import com.delfood.dto.ItemDTO.CacheShopDTO; +import com.delfood.error.exception.cart.DuplicateItemException; +import com.google.common.collect.Lists; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; @@ -12,15 +23,151 @@ @RunWith(MockitoJUnitRunner.class) public class CartServiceTest { @InjectMocks - CartService service; + CartService cartService; @Mock - CartDao dao; + CartDao cartDao; + + public ItemDTO generateItem111() { + CacheMenuDTO menuInfo = new CacheMenuDTO(111L, "테스트 메뉴 111", 11000L); + + List options = new ArrayList(); + CacheOptionDTO optionInfo1 = new CacheOptionDTO(1L, "111 옵션 1", 100L); + CacheOptionDTO optionInfo2 = new CacheOptionDTO(1L, "111 옵션 2", 200L); + CacheOptionDTO optionInfo3 = new CacheOptionDTO(1L, "111 옵션 3", 300L); + options.add(optionInfo1); + options.add(optionInfo2); + options.add(optionInfo3); + + CacheShopDTO shopInfo = new CacheShopDTO(222L, "테스트 매장 이름"); + + ItemDTO itemInfo = new ItemDTO(menuInfo, options, 1, 11600L, shopInfo); + + return itemInfo; + } + + public ItemDTO generateItem222() { + CacheMenuDTO menuInfo = new CacheMenuDTO(222L, "테스트 메뉴 222", 11000L); + + List options = new ArrayList(); + CacheOptionDTO optionInfo1 = new CacheOptionDTO(2L, "222 옵션 1", 100L); + CacheOptionDTO optionInfo2 = new CacheOptionDTO(2L, "222 옵션 2", 200L); + CacheOptionDTO optionInfo3 = new CacheOptionDTO(2L, "222 옵션 3", 300L); + options.add(optionInfo1); + options.add(optionInfo2); + options.add(optionInfo3); + + CacheShopDTO shopInfo = new CacheShopDTO(222L, "테스트 매장 이름"); + + ItemDTO itemInfo = new ItemDTO(menuInfo, options, 1, 11600L, shopInfo); + + return itemInfo; + } + public ItemDTO generateItemAnotherShop() { + CacheMenuDTO menuInfo = new CacheMenuDTO(222L, "테스트 메뉴 222", 11000L); + + List options = new ArrayList(); + CacheOptionDTO optionInfo1 = new CacheOptionDTO(2L, "222 옵션 1", 100L); + CacheOptionDTO optionInfo2 = new CacheOptionDTO(2L, "222 옵션 2", 200L); + CacheOptionDTO optionInfo3 = new CacheOptionDTO(2L, "222 옵션 3", 300L); + options.add(optionInfo1); + options.add(optionInfo2); + options.add(optionInfo3); + + CacheShopDTO shopInfo = new CacheShopDTO(123L, "테스트 매장 이름"); + + ItemDTO itemInfo = new ItemDTO(menuInfo, options, 1, 11600L, shopInfo); + + return itemInfo; + } - // 로직이 확정되면 테스트코드를 다시 작성할 예정입니다 @Test - public void mockTest() { + public void addOrdersItemTest_장바구니에_메뉴_추가() { + ItemDTO item1 = generateItem111(); + ItemDTO item2 = generateItem222(); + given(cartDao.findPeekByMemberId("eric")).willReturn(item1); + cartService.addOrdersItem(item2, "eric"); + } + + @Test(expected = IllegalArgumentException.class) + public void addOrdersItemTest_장바구니에_다른매장_메뉴_추가() { + ItemDTO item1 = generateItem111(); + ItemDTO item2 = generateItemAnotherShop(); + given(cartDao.findPeekByMemberId("eric")).willReturn(item1); + cartService.addOrdersItem(item2, "eric"); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void addOrdersItemTest_너무많은메뉴추가() { + given(cartDao.findPeekByMemberId("eric")).willReturn(generateItem111()); + given(cartDao.findAllByMemberId("eric")).willReturn(Arrays.asList( + new ItemDTO[] {generateItem111(), generateItem111(), generateItem111(), generateItem111(), + generateItem111(), generateItem111(), generateItem111(), generateItem111(), + generateItem111(), generateItem111(), generateItem111(), generateItem111()})); + cartService.addOrdersItem(generateItem222(), "eric"); + } + + @Test(expected = DuplicateItemException.class) + public void addOrdersItemTest_같메뉴추가() { + given(cartDao.findPeekByMemberId("eric")).willReturn(generateItem111()); + given(cartDao.findAllByMemberId("eric")).willReturn(Arrays.asList( + new ItemDTO[] {generateItem111()})); + cartService.addOrdersItem(generateItem111(), "eric"); + } + + @Test + public void deleteCartMenuTest_장바구니_메뉴_삭제_인덱스() { + given(cartDao.getMenuCount("eric")).willReturn(5L); + given(cartDao.deleteByMemberIdAndIndex("eric", 1L)).willReturn(true); + cartService.deleteCartMenu("eric", 1L); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void deleteCartMenuTest_장바구니_메뉴_삭제_인덱스_초과() { + given(cartDao.getMenuCount("eric")).willReturn(5L); + cartService.deleteCartMenu("eric", 6L); + } + + @Test(expected = RuntimeException.class) + public void deleteCartMenuTest_장바구니_메뉴_삭제_redis에러() { + given(cartDao.getMenuCount("eric")).willReturn(5L); + given(cartDao.deleteByMemberIdAndIndex("eric", 1L)).willReturn(false); + cartService.deleteCartMenu("eric", 1L); + } + + @Test + public void containsEqualItemTest_장바구니_동일아이템_포함여부_검사() { + given(cartDao.findAllByMemberId("eric")) + .willReturn(Arrays.asList(new ItemDTO[] {generateItem111()})); + assertThat(cartService.containsEqualItem("eric", generateItem111())).isEqualTo(true); + assertThat(cartService.containsEqualItem("eric", generateItem222())).isEqualTo(false); } + + @Test + public void allPriceTest_장바구니_총가격_계산() { + given(cartDao.findAllByMemberId("eric")) + .willReturn(Arrays.asList(new ItemDTO[] {generateItem111(), generateItem222()})); + assertThat(cartService.allPrice("eric")).isEqualTo(23200L); + } + + @Test + public void priceTest_아이템_가격계산() { + ItemDTO itemInfo = generateItem111(); + assertThat(cartService.price(itemInfo)).isEqualTo(11600L); + } + + @Test + public void menuPriceTest_아이템_메뉴만_가격계산() { + ItemDTO itemInfo = generateItem111(); + assertThat(CartService.menuPrice(itemInfo)).isEqualTo(11000L); + } + + @Test + public void menuPriceTest_아이템_옵션만_가격계산() { + ItemDTO itemInfo = generateItem111(); + assertThat(CartService.optionsPrice(itemInfo)).isEqualTo(600L); + } + } From f03803a3c9962ed32fa0fa1544b4d118e159caeb Mon Sep 17 00:00:00 2001 From: yyy9942 Date: Fri, 3 Jan 2020 13:02:42 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/delfood/service/CartServiceTest.java | 88 +++++++++---------- 1 file changed, 42 insertions(+), 46 deletions(-) diff --git a/src/test/java/com/delfood/service/CartServiceTest.java b/src/test/java/com/delfood/service/CartServiceTest.java index b24ab51..c46e09a 100644 --- a/src/test/java/com/delfood/service/CartServiceTest.java +++ b/src/test/java/com/delfood/service/CartServiceTest.java @@ -28,39 +28,35 @@ public class CartServiceTest { @Mock CartDao cartDao; - public ItemDTO generateItem111() { - CacheMenuDTO menuInfo = new CacheMenuDTO(111L, "테스트 메뉴 111", 11000L); - - List options = new ArrayList(); - CacheOptionDTO optionInfo1 = new CacheOptionDTO(1L, "111 옵션 1", 100L); - CacheOptionDTO optionInfo2 = new CacheOptionDTO(1L, "111 옵션 2", 200L); - CacheOptionDTO optionInfo3 = new CacheOptionDTO(1L, "111 옵션 3", 300L); - options.add(optionInfo1); - options.add(optionInfo2); - options.add(optionInfo3); - - CacheShopDTO shopInfo = new CacheShopDTO(222L, "테스트 매장 이름"); - - ItemDTO itemInfo = new ItemDTO(menuInfo, options, 1, 11600L, shopInfo); - - return itemInfo; - } - - public ItemDTO generateItem222() { - CacheMenuDTO menuInfo = new CacheMenuDTO(222L, "테스트 메뉴 222", 11000L); + /** + * id에 따른 Item을 생산하여 리턴한다. + * @author jun + * @param id 해당 아이디를 기반으로 메뉴와 옵션을 생산하여 아이템을 제작한다. + * @return + */ + public ItemDTO generateItem(long id) { + final long menuId = id * 111; + final long shopId = 222L; + final long menuPrice = 11000L; + final long optionId = id; + final long[] optionPrices = {100L, 200L, 300L}; + CacheMenuDTO menuInfo = new CacheMenuDTO(menuId, "테스트 메뉴 " + menuId, menuPrice); + List options = new ArrayList(); - CacheOptionDTO optionInfo1 = new CacheOptionDTO(2L, "222 옵션 1", 100L); - CacheOptionDTO optionInfo2 = new CacheOptionDTO(2L, "222 옵션 2", 200L); - CacheOptionDTO optionInfo3 = new CacheOptionDTO(2L, "222 옵션 3", 300L); + CacheOptionDTO optionInfo1 = new CacheOptionDTO(optionId, menuId + " 옵션 1", optionPrices[0]); + CacheOptionDTO optionInfo2 = + new CacheOptionDTO(optionId * 2L, menuId + " 옵션 2", optionPrices[1]); + CacheOptionDTO optionInfo3 = + new CacheOptionDTO(optionId * 3L, menuId + " 옵션 3", optionPrices[2]); options.add(optionInfo1); options.add(optionInfo2); options.add(optionInfo3); - - CacheShopDTO shopInfo = new CacheShopDTO(222L, "테스트 매장 이름"); - - ItemDTO itemInfo = new ItemDTO(menuInfo, options, 1, 11600L, shopInfo); - + + CacheShopDTO shopInfo = new CacheShopDTO(shopId, "테스트 매장 이름"); + + ItemDTO itemInfo = new ItemDTO(menuInfo, options, 1, menuPrice + 600L, shopInfo); + return itemInfo; } @@ -84,15 +80,15 @@ public ItemDTO generateItemAnotherShop() { @Test public void addOrdersItemTest_장바구니에_메뉴_추가() { - ItemDTO item1 = generateItem111(); - ItemDTO item2 = generateItem222(); + ItemDTO item1 = generateItem(1L); + ItemDTO item2 = generateItem(2L); given(cartDao.findPeekByMemberId("eric")).willReturn(item1); cartService.addOrdersItem(item2, "eric"); } @Test(expected = IllegalArgumentException.class) public void addOrdersItemTest_장바구니에_다른매장_메뉴_추가() { - ItemDTO item1 = generateItem111(); + ItemDTO item1 = generateItem(1L); ItemDTO item2 = generateItemAnotherShop(); given(cartDao.findPeekByMemberId("eric")).willReturn(item1); cartService.addOrdersItem(item2, "eric"); @@ -100,20 +96,20 @@ public ItemDTO generateItemAnotherShop() { @Test(expected = IndexOutOfBoundsException.class) public void addOrdersItemTest_너무많은메뉴추가() { - given(cartDao.findPeekByMemberId("eric")).willReturn(generateItem111()); + given(cartDao.findPeekByMemberId("eric")).willReturn(generateItem(1L)); given(cartDao.findAllByMemberId("eric")).willReturn(Arrays.asList( - new ItemDTO[] {generateItem111(), generateItem111(), generateItem111(), generateItem111(), - generateItem111(), generateItem111(), generateItem111(), generateItem111(), - generateItem111(), generateItem111(), generateItem111(), generateItem111()})); - cartService.addOrdersItem(generateItem222(), "eric"); + new ItemDTO[] {generateItem(1L), generateItem(1L), generateItem(1L), generateItem(1L), + generateItem(1L), generateItem(1L), generateItem(1L), generateItem(1L), + generateItem(1L), generateItem(1L), generateItem(1L), generateItem(1L)})); + cartService.addOrdersItem(generateItem(2L), "eric"); } @Test(expected = DuplicateItemException.class) public void addOrdersItemTest_같메뉴추가() { - given(cartDao.findPeekByMemberId("eric")).willReturn(generateItem111()); + given(cartDao.findPeekByMemberId("eric")).willReturn(generateItem(1L)); given(cartDao.findAllByMemberId("eric")).willReturn(Arrays.asList( - new ItemDTO[] {generateItem111()})); - cartService.addOrdersItem(generateItem111(), "eric"); + new ItemDTO[] {generateItem(1L)})); + cartService.addOrdersItem(generateItem(1L), "eric"); } @Test @@ -139,34 +135,34 @@ public ItemDTO generateItemAnotherShop() { @Test public void containsEqualItemTest_장바구니_동일아이템_포함여부_검사() { given(cartDao.findAllByMemberId("eric")) - .willReturn(Arrays.asList(new ItemDTO[] {generateItem111()})); + .willReturn(Arrays.asList(new ItemDTO[] {generateItem(1L)})); - assertThat(cartService.containsEqualItem("eric", generateItem111())).isEqualTo(true); - assertThat(cartService.containsEqualItem("eric", generateItem222())).isEqualTo(false); + assertThat(cartService.containsEqualItem("eric", generateItem(1L))).isEqualTo(true); + assertThat(cartService.containsEqualItem("eric", generateItem(2L))).isEqualTo(false); } @Test public void allPriceTest_장바구니_총가격_계산() { given(cartDao.findAllByMemberId("eric")) - .willReturn(Arrays.asList(new ItemDTO[] {generateItem111(), generateItem222()})); + .willReturn(Arrays.asList(new ItemDTO[] {generateItem(1L), generateItem(2L)})); assertThat(cartService.allPrice("eric")).isEqualTo(23200L); } @Test public void priceTest_아이템_가격계산() { - ItemDTO itemInfo = generateItem111(); + ItemDTO itemInfo = generateItem(1L); assertThat(cartService.price(itemInfo)).isEqualTo(11600L); } @Test public void menuPriceTest_아이템_메뉴만_가격계산() { - ItemDTO itemInfo = generateItem111(); + ItemDTO itemInfo = generateItem(1L); assertThat(CartService.menuPrice(itemInfo)).isEqualTo(11000L); } @Test public void menuPriceTest_아이템_옵션만_가격계산() { - ItemDTO itemInfo = generateItem111(); + ItemDTO itemInfo = generateItem(1L); assertThat(CartService.optionsPrice(itemInfo)).isEqualTo(600L); }