[#8] feat: Cafe 기본적인 CRUD 구성

- CafeService 생성, 수정 로직 주석 추가
- CafeServiceTest를 통한 카페 생성 테스트(Mockito 사용)
This commit is contained in:
beaniejoy
2022-08-06 21:56:37 +09:00
parent aeff3a51af
commit 410943a74e
2 changed files with 84 additions and 1 deletions

View File

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

View File

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