From 5d5309669cc41db96ce69feaf33ebcdb356895be Mon Sep 17 00:00:00 2001 From: Hanbin Lee Date: Mon, 3 Oct 2022 14:15:35 +0900 Subject: [PATCH] =?UTF-8?q?[#15]=20feat:=20=EC=B9=B4=ED=8E=98=20=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20=EA=B4=80=EB=A0=A8=20JPA=20=EC=88=98=ED=96=89=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 카페 메뉴 관련 JPA 수행 테스트 - JPA update시 dynamic update 기능 적용 테스트(추후 변경) --- .../dongnecafe/domain/cafe/entity/CafeMenu.kt | 2 +- .../domain/cafe/entity/MenuOption.kt | 2 + .../domain/cafe/entity/OptionDetail.kt | 2 + .../service/CafeMenuServiceIntegratedTest.kt | 62 +++++++++++++++++++ .../cafe/service/CafeMenuServiceTest.kt | 3 - .../domain/cafe/service/CafeServiceTest.kt | 6 +- .../domain/cafe/utils/CafeMenuTestUtils.kt | 22 +++++-- 7 files changed, 86 insertions(+), 13 deletions(-) create mode 100644 src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceIntegratedTest.kt diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt index 7c9c7e6..faa84d4 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt @@ -7,9 +7,9 @@ import org.hibernate.annotations.DynamicUpdate import java.math.BigDecimal import javax.persistence.* +@DynamicUpdate @Entity @Table(name = "cafe_menu") -@DynamicUpdate class CafeMenu protected constructor( name: String, price: BigDecimal, diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt index e63795a..b437837 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt @@ -2,8 +2,10 @@ package io.beaniejoy.dongnecafe.domain.cafe.entity import io.beaniejoy.dongnecafe.common.entity.BaseTimeEntity import io.beaniejoy.dongnecafe.domain.cafe.model.request.OptionDetailRegisterRequest +import org.hibernate.annotations.DynamicUpdate import javax.persistence.* +@DynamicUpdate @Entity @Table(name = "menu_option") class MenuOption protected constructor( diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt index 6bf8b70..998d149 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt @@ -1,9 +1,11 @@ package io.beaniejoy.dongnecafe.domain.cafe.entity import io.beaniejoy.dongnecafe.common.entity.BaseTimeEntity +import org.hibernate.annotations.DynamicUpdate import java.math.BigDecimal import javax.persistence.* +@DynamicUpdate @Entity @Table(name = "option_detail") class OptionDetail protected constructor( diff --git a/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceIntegratedTest.kt b/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceIntegratedTest.kt new file mode 100644 index 0000000..59b9b89 --- /dev/null +++ b/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceIntegratedTest.kt @@ -0,0 +1,62 @@ +package io.beaniejoy.dongnecafe.domain.cafe.service + +import io.beaniejoy.dongnecafe.domain.cafe.model.request.* +import io.beaniejoy.dongnecafe.domain.cafe.utils.CafeTestUtils +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import java.math.BigDecimal + +@SpringBootTest +class CafeMenuServiceIntegratedTest { + @Autowired + lateinit var cafeService: CafeService + + @Autowired + lateinit var cafeMenuService: CafeMenuService + + @Test + fun update_info_and_bulk_update_menu_options() { + val cafeRegisterRequest = CafeTestUtils.createCafeRegisterRequest() + + val savedCafeId = cafeService.createNew( + name = cafeRegisterRequest.name!!, + address = cafeRegisterRequest.address!!, + phoneNumber = cafeRegisterRequest.phoneNumber!!, + description = cafeRegisterRequest.description!!, + cafeMenuRequestList = cafeRegisterRequest.cafeMenuList + ) + + val cafeDetailedInfo = cafeService.getDetailedInfoByCafeId(savedCafeId) + + val cafeMenuUpdateRequest = cafeMenuService.getDetailedInfoByMenuId( + menuId = cafeDetailedInfo.menuList[0].cafeMenuId, + cafeId = cafeDetailedInfo.cafeId + ).let { + CafeMenuUpdateRequest( + name = "menu2 update", + price = it.price, + menuOptionList = listOf(it.optionList[1].let { menuOption -> + MenuOptionUpdateRequest( + menuOptionId = menuOption.menuOptionId, + title = "샷 update", + optionDetailList = menuOption.optionDetailList.mapIndexed { index, optionDetail -> + OptionDetailUpdateRequest( + optionDetailId = optionDetail.optionDetailId, + name = optionDetail.name!!, + extraPrice = BigDecimal("${index}000"), + isDelete = index == 0 + ) + } + ) + }) + ) + } + + cafeMenuService.updateInfoAndBulkUpdate( + menuId = cafeDetailedInfo.menuList[1].cafeMenuId, + cafeId = cafeDetailedInfo.cafeId, + resource = cafeMenuUpdateRequest + ) + } +} \ No newline at end of file diff --git a/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceTest.kt b/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceTest.kt index 28281fe..361267a 100644 --- a/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceTest.kt +++ b/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceTest.kt @@ -38,9 +38,6 @@ internal class CafeMenuServiceTest { @InjectMocks lateinit var mockCafeMenuService: CafeMenuService - - - @Test @DisplayName("카페 메뉴 ID를 통한 카페 메뉴 상세 조회") fun find_cafe_menu_by_cafe_menu_id() { diff --git a/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeServiceTest.kt b/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeServiceTest.kt index 233af8d..5779f9c 100644 --- a/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeServiceTest.kt +++ b/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/service/CafeServiceTest.kt @@ -97,9 +97,9 @@ internal class CafeServiceTest { ) val cafeId = 50L - // TODO findByIdOrNull은 kotlin test 라이브러리 필요한 듯 + // TODO 'findByIdOrNull'은 kotlin test 라이브러리 필요한 듯 val mockCafe = mock(Cafe::class.java) - `when`(mockCafeRepository.findById(cafeId)).thenReturn(Optional.of(mockCafe)) + doReturn(Optional.of(cafe)).`when`(mockCafeRepository.findById(eq(cafeId))) doNothing().`when`(mockCafe).updateInfo( name = anyString(), @@ -110,7 +110,7 @@ internal class CafeServiceTest { // when mockCafeService.updateInfo( - id = cafeId, + id = eq(cafeId), name = "updated_name", address = "updated_address", phoneNumber = "updated_phoneNumber", diff --git a/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/utils/CafeMenuTestUtils.kt b/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/utils/CafeMenuTestUtils.kt index 7522c2b..a700fde 100644 --- a/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/utils/CafeMenuTestUtils.kt +++ b/src/test/java/io/beaniejoy/dongnecafe/domain/cafe/utils/CafeMenuTestUtils.kt @@ -19,23 +19,33 @@ class CafeMenuTestUtils { fun createCafeMenuRegisterRequestList(): List { val sizeOptionDetailList = listOf( OptionDetailRegisterRequest(name = "medium", extraPrice = BigDecimal.ZERO), - OptionDetailRegisterRequest(name = "large", extraPrice = BigDecimal.valueOf(200L)), - OptionDetailRegisterRequest(name = "venti", extraPrice = BigDecimal.valueOf(700L)) + OptionDetailRegisterRequest(name = "large", extraPrice = BigDecimal("200")), + OptionDetailRegisterRequest(name = "venti", extraPrice = BigDecimal("700")) ) + val shotOptionDetailList = listOf( + OptionDetailRegisterRequest(name = "기본", extraPrice = BigDecimal.ZERO), + OptionDetailRegisterRequest(name = "샷 1 추가", extraPrice = BigDecimal("500")), + OptionDetailRegisterRequest(name = "샷 2 추가", extraPrice = BigDecimal("1000")), + ) + val sizeMenuOption = MenuOptionRegisterRequest( - title = "size", + title = "사이즈", optionDetailList = sizeOptionDetailList ) + val shotMenuOption = MenuOptionRegisterRequest( + title = "샷", + optionDetailList = shotOptionDetailList + ) return listOf( CafeMenuRegisterRequest( name = "menu1", - price = BigDecimal.valueOf(2_800L), - menuOptionList = listOf(sizeMenuOption) + price = BigDecimal("2800"), + menuOptionList = listOf(sizeMenuOption, shotMenuOption) ), CafeMenuRegisterRequest( name = "menu2", - price = BigDecimal.valueOf(3_500L), + price = BigDecimal("3500"), menuOptionList = listOf(sizeMenuOption) ), )