fix(admin-chat): 배너 목록 응답 위임을 적용한다
This commit is contained in:
@@ -4,7 +4,6 @@ import com.amazonaws.services.s3.model.ObjectMetadata
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import kr.co.vividnext.sodalive.admin.chat.character.dto.ChatCharacterSearchListPageResponse
|
||||
import kr.co.vividnext.sodalive.admin.chat.character.service.AdminChatCharacterService
|
||||
import kr.co.vividnext.sodalive.admin.chat.dto.ChatCharacterBannerListPageResponse
|
||||
import kr.co.vividnext.sodalive.admin.chat.dto.ChatCharacterBannerRegisterRequest
|
||||
import kr.co.vividnext.sodalive.admin.chat.dto.ChatCharacterBannerResponse
|
||||
import kr.co.vividnext.sodalive.admin.chat.dto.ChatCharacterBannerUpdateRequest
|
||||
@@ -59,17 +58,7 @@ class AdminChatBannerController(
|
||||
@RequestParam(defaultValue = "20") size: Int
|
||||
) = run {
|
||||
val pageable = adminCharacterService.createDefaultPageRequest(page, size)
|
||||
val banners = bannerService.getActiveBanners(pageable)
|
||||
val response = ChatCharacterBannerListPageResponse(
|
||||
totalCount = banners.totalElements,
|
||||
content = banners.content.map {
|
||||
ChatCharacterBannerResponse.from(
|
||||
banner = it,
|
||||
imageHost = imageHost,
|
||||
appendLanguageToCharacterName = true
|
||||
)
|
||||
}
|
||||
)
|
||||
val response = bannerService.getActiveBanners(pageable, imageHost)
|
||||
|
||||
ApiResponse.ok(response)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
package kr.co.vividnext.sodalive.admin.chat
|
||||
|
||||
import kr.co.vividnext.sodalive.chat.character.ChatCharacter
|
||||
import kr.co.vividnext.sodalive.chat.character.ChatCharacterBanner
|
||||
import kr.co.vividnext.sodalive.i18n.Lang
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.member.MemberRole
|
||||
import kr.co.vividnext.sodalive.support.EmbeddedRedisInitializer
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
|
||||
import org.springframework.boot.test.context.SpringBootTest
|
||||
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
import org.springframework.test.web.servlet.MockMvc
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
|
||||
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath
|
||||
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
|
||||
import org.springframework.transaction.support.TransactionTemplate
|
||||
import javax.persistence.EntityManager
|
||||
|
||||
@SpringBootTest(
|
||||
properties = [
|
||||
"cloud.aws.cloud-front.host=https://cdn.test",
|
||||
"spring.datasource.url=jdbc:h2:mem:admin-chat-banner-controller-integration;" +
|
||||
"MODE=MySQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=VALUE;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"
|
||||
]
|
||||
)
|
||||
@AutoConfigureMockMvc
|
||||
@ContextConfiguration(initializers = [EmbeddedRedisInitializer::class])
|
||||
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
|
||||
class AdminChatBannerControllerIntegrationTest @Autowired constructor(
|
||||
private val mockMvc: MockMvc,
|
||||
private val entityManager: EntityManager,
|
||||
private val transactionTemplate: TransactionTemplate
|
||||
) {
|
||||
@Test
|
||||
@DisplayName("관리자 채팅 배너 목록 API는 OSIV off 환경에서 lazy 초기화 예외 없이 응답한다")
|
||||
fun shouldReturnAdminChatBannerListWhenOpenInViewIsDisabled() {
|
||||
createBannerFixture()
|
||||
|
||||
mockMvc.perform(
|
||||
get("/admin/chat/banner/list")
|
||||
.param("page", "0")
|
||||
.param("size", "20")
|
||||
.with(user("admin").roles("ADMIN"))
|
||||
)
|
||||
.andExpect(status().isOk)
|
||||
.andExpect(jsonPath("$.success").value(true))
|
||||
.andExpect(jsonPath("$.data.totalCount").value(1))
|
||||
.andExpect(jsonPath("$.data.content[0].characterName").value("character-admin-banner (일본어)"))
|
||||
.andExpect(jsonPath("$.data.content[0].imagePath").value("https://cdn.test/banner/jp.png"))
|
||||
}
|
||||
|
||||
private fun createBannerFixture() {
|
||||
transactionTemplate.execute {
|
||||
val creator = Member(
|
||||
email = "admin-chat-banner-controller@test.com",
|
||||
password = "password",
|
||||
nickname = "admin-chat-banner-creator",
|
||||
role = MemberRole.CREATOR
|
||||
)
|
||||
entityManager.persist(creator)
|
||||
|
||||
val character = ChatCharacter(
|
||||
characterUUID = "character-admin-banner-controller",
|
||||
name = "character-admin-banner",
|
||||
description = "description",
|
||||
systemPrompt = "system-prompt"
|
||||
).apply {
|
||||
creatorMember = creator
|
||||
}
|
||||
entityManager.persist(character)
|
||||
|
||||
entityManager.persist(
|
||||
ChatCharacterBanner(
|
||||
imagePath = "banner/jp.png",
|
||||
chatCharacter = character,
|
||||
sortOrder = 1,
|
||||
lang = Lang.JA
|
||||
)
|
||||
)
|
||||
|
||||
entityManager.flush()
|
||||
entityManager.clear()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,8 +14,6 @@ import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.mockito.Mockito
|
||||
import org.springframework.data.domain.PageImpl
|
||||
import org.springframework.data.domain.PageRequest
|
||||
import org.springframework.mock.web.MockMultipartFile
|
||||
import java.net.URL
|
||||
|
||||
@@ -109,21 +107,6 @@ class AdminChatBannerControllerTest {
|
||||
Mockito.verify(bannerService).registerBanner(2L, "", null)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun shouldAppendBannerLanguageToCharacterNameInBannerList() {
|
||||
val pageable = PageRequest.of(0, 20)
|
||||
val japaneseBanner = createBanner(id = 12L, lang = Lang.JA, imagePath = "banner/jp.png")
|
||||
|
||||
Mockito.`when`(adminCharacterService.createDefaultPageRequest(0, 20)).thenReturn(pageable)
|
||||
Mockito.`when`(bannerService.getActiveBanners(pageable))
|
||||
.thenReturn(PageImpl(listOf(japaneseBanner), pageable, 1))
|
||||
|
||||
val response = controller.getBannerList(page = 0, size = 20)
|
||||
|
||||
assertTrue(response.success)
|
||||
assertEquals("character-12 (일본어)", response.data?.content?.first()?.characterName)
|
||||
}
|
||||
|
||||
private fun createBanner(id: Long, lang: Lang, imagePath: String): ChatCharacterBanner {
|
||||
val character = ChatCharacter(
|
||||
characterUUID = "character-$id",
|
||||
|
||||
Reference in New Issue
Block a user