[#8] feat: Cafe 기본적인 CRUD 구성
- CafeService 생성, 수정 로직 주석 추가 - CafeServiceTest를 통한 카페 생성 테스트(Mockito 사용)
This commit is contained in:
@@ -26,6 +26,11 @@ class CafeService(
|
||||
|
||||
/**
|
||||
* 카페 생성 로직
|
||||
* - 카페 생성시 카페정보 뿐만 아니라 하위 메뉴정보, 옵션, 옵션상세 같이 생성
|
||||
* - 카페 정보(이름, 주소, 전화번호, 소개글)
|
||||
* - 카페 메뉴정보 (메뉴 이름, 가격 /ex. 아메리카노, 2,800)
|
||||
* - 메뉴 옵션 (옵션 이름 /ex. 사이즈)
|
||||
* - 옵션 상세 (상세 이름, 추가 금액 /ex. [(medium, 0), (large, 200), (venti, 700)])
|
||||
*/
|
||||
fun createCafe(
|
||||
name: String,
|
||||
@@ -69,6 +74,10 @@ class CafeService(
|
||||
return CafeInfoResponseDto.of(cafe)
|
||||
}
|
||||
|
||||
/**
|
||||
* 카페 정보 수정
|
||||
* - 카페 정보만 수정 (하위 엔티티에 대해서는 각 도메인 영역에서 수정)
|
||||
*/
|
||||
@Transactional
|
||||
fun updateCafe(
|
||||
id: Long,
|
||||
|
||||
@@ -1,13 +1,87 @@
|
||||
package io.beaniejoy.dongnecafe.domain.cafe.service
|
||||
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import io.beaniejoy.dongnecafe.domain.cafe.dto.request.CafeMenuInfoRequestDto
|
||||
import io.beaniejoy.dongnecafe.domain.cafe.dto.request.MenuOptionInfoRequestDto
|
||||
import io.beaniejoy.dongnecafe.domain.cafe.dto.request.OptionDetailInfoRequestDto
|
||||
import io.beaniejoy.dongnecafe.domain.cafe.entity.Cafe
|
||||
import io.beaniejoy.dongnecafe.domain.cafe.repository.CafeRepository
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.extension.ExtendWith
|
||||
import org.mockito.InjectMocks
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.*
|
||||
import org.mockito.junit.jupiter.MockitoExtension
|
||||
import java.math.BigDecimal
|
||||
import javax.persistence.GeneratedValue
|
||||
|
||||
@ExtendWith(MockitoExtension::class)
|
||||
internal class CafeServiceTest {
|
||||
@InjectMocks
|
||||
lateinit var mockCafeService: CafeService
|
||||
|
||||
@Mock
|
||||
lateinit var mockCafeRepository: CafeRepository
|
||||
|
||||
@Test
|
||||
@DisplayName("카페 신규 생성 테스트")
|
||||
fun createCafeTest() {
|
||||
val cafeName = "beanie_cafe"
|
||||
val cafeAddress = "beanie_cafe_address"
|
||||
val phoneNumber = "01012345678"
|
||||
val description = "beanie_cafe_description"
|
||||
|
||||
val sizeOptionDetailList = listOf(
|
||||
OptionDetailInfoRequestDto(name = "medium", extraPrice = BigDecimal.ZERO),
|
||||
OptionDetailInfoRequestDto(name = "large", extraPrice = BigDecimal.valueOf(200L)),
|
||||
OptionDetailInfoRequestDto(name = "venti", extraPrice = BigDecimal.valueOf(700L))
|
||||
)
|
||||
val sizeMenuOption = MenuOptionInfoRequestDto(
|
||||
title = "size",
|
||||
optionDetailList = sizeOptionDetailList
|
||||
)
|
||||
|
||||
val cafeMenuList = listOf(
|
||||
CafeMenuInfoRequestDto(
|
||||
name = "menu1",
|
||||
price = BigDecimal.valueOf(2_800L),
|
||||
menuOptionList = listOf(sizeMenuOption)
|
||||
),
|
||||
CafeMenuInfoRequestDto(
|
||||
name = "menu2",
|
||||
price = BigDecimal.valueOf(3_500L),
|
||||
menuOptionList = listOf(sizeMenuOption)
|
||||
),
|
||||
)
|
||||
|
||||
val savedMockCafeId = 100L
|
||||
|
||||
`when`(mockCafeRepository.findByName(cafeName)).thenReturn(null)
|
||||
`when`(mockCafeRepository.save(any(Cafe::class.java))).thenAnswer {
|
||||
val argument = it.getArgument<Cafe>(0)
|
||||
val idField = argument.javaClass.declaredFields
|
||||
.find { f ->
|
||||
f.getAnnotation(GeneratedValue::class.java) != null
|
||||
} ?: return@thenAnswer argument
|
||||
|
||||
idField.isAccessible = true
|
||||
idField.set(argument, savedMockCafeId)
|
||||
|
||||
return@thenAnswer argument
|
||||
}
|
||||
|
||||
val savedCafeId = mockCafeService.createCafe(
|
||||
name = cafeName,
|
||||
address = cafeAddress,
|
||||
phoneNumber = phoneNumber,
|
||||
description = description,
|
||||
cafeMenuRequestList = cafeMenuList
|
||||
)
|
||||
|
||||
verify(mockCafeRepository).findByName(cafeName)
|
||||
verify(mockCafeRepository).save(any(Cafe::class.java))
|
||||
|
||||
assertEquals(savedCafeId, savedMockCafeId)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user