[#15] feat: 카페 메뉴 관련 JPA 수행 테스트

- 카페 메뉴 관련 JPA 수행 테스트
- JPA update시 dynamic update 기능 적용 테스트(추후 변경)
This commit is contained in:
Hanbin Lee
2022-10-03 14:15:35 +09:00
parent f798e278b8
commit 5d5309669c
7 changed files with 86 additions and 13 deletions

View File

@@ -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,

View File

@@ -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(

View File

@@ -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(

View File

@@ -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
)
}
}

View File

@@ -38,9 +38,6 @@ internal class CafeMenuServiceTest {
@InjectMocks
lateinit var mockCafeMenuService: CafeMenuService
@Test
@DisplayName("카페 메뉴 ID를 통한 카페 메뉴 상세 조회")
fun find_cafe_menu_by_cafe_menu_id() {

View File

@@ -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",

View File

@@ -19,23 +19,33 @@ class CafeMenuTestUtils {
fun createCafeMenuRegisterRequestList(): List<CafeMenuRegisterRequest> {
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)
),
)