fix(series-banner): 배너 응답 생성을 서비스로 옮긴다
This commit is contained in:
+137
@@ -0,0 +1,137 @@
|
||||
package kr.co.vividnext.sodalive.content.series.main.banner
|
||||
|
||||
import kr.co.vividnext.sodalive.admin.content.series.genre.SeriesGenre
|
||||
import kr.co.vividnext.sodalive.creator.admin.content.series.Series
|
||||
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.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.boot.test.context.SpringBootTest
|
||||
import org.springframework.data.domain.PageRequest
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
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:series-banner-service-integration;" +
|
||||
"MODE=MySQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=VALUE;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"
|
||||
]
|
||||
)
|
||||
@ContextConfiguration(initializers = [EmbeddedRedisInitializer::class])
|
||||
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
|
||||
class ContentSeriesBannerServiceIntegrationTest @Autowired constructor(
|
||||
private val service: ContentSeriesBannerService,
|
||||
private val entityManager: EntityManager,
|
||||
private val transactionTemplate: TransactionTemplate
|
||||
) {
|
||||
@Test
|
||||
@DisplayName("OSIV off 환경에서 관리자 시리즈 배너 목록 응답 생성 시 lazy 초기화 예외가 발생하지 않는다")
|
||||
fun shouldCreateAdminSeriesBannerListResponseWhenOpenInViewIsDisabled() {
|
||||
val fixtureIds = createBannerFixture(suffix = "list", sortOrder = 1)
|
||||
|
||||
val response = service.getActiveBanners(PageRequest.of(0, 20), "https://cdn.test")
|
||||
|
||||
assertEquals(1, response.totalCount)
|
||||
assertEquals(fixtureIds.seriesId, response.content.first().seriesId)
|
||||
assertEquals("series-admin-banner (일본어)", response.content.first().seriesTitle)
|
||||
assertEquals("https://cdn.test/banner/jp.png", response.content.first().imagePath)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("OSIV off 환경에서 관리자 시리즈 배너 상세 응답 생성 시 lazy 초기화 예외가 발생하지 않는다")
|
||||
fun shouldCreateAdminSeriesBannerDetailResponseWhenOpenInViewIsDisabled() {
|
||||
val fixtureIds = createBannerFixture(suffix = "detail", sortOrder = 2)
|
||||
|
||||
val response = service.getBannerDetailResponse(fixtureIds.bannerId, "https://cdn.test")
|
||||
|
||||
assertEquals(fixtureIds.bannerId, response.id)
|
||||
assertEquals(fixtureIds.seriesId, response.seriesId)
|
||||
assertEquals("series-admin-banner", response.seriesTitle)
|
||||
assertEquals("https://cdn.test/banner/jp.png", response.imagePath)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("OSIV off 환경에서 공개 시리즈 메인 배너 응답 생성 시 lazy 초기화 예외가 발생하지 않는다")
|
||||
fun shouldCreatePublicMainSeriesBannerResponseWhenOpenInViewIsDisabled() {
|
||||
val fixtureIds = createBannerFixture(suffix = "public", sortOrder = 3)
|
||||
|
||||
val response = service.getDisplayBannerResponses(PageRequest.of(0, 10), Lang.JA, "https://cdn.test")
|
||||
|
||||
assertEquals(1, response.size)
|
||||
assertEquals(fixtureIds.seriesId, response.first().seriesId)
|
||||
assertEquals("series-admin-banner", response.first().seriesTitle)
|
||||
assertEquals("https://cdn.test/banner/jp.png", response.first().imagePath)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("OSIV off 환경에서 관리자 시리즈 배너 수정 응답 생성 시 lazy 초기화 예외가 발생하지 않는다")
|
||||
fun shouldCreateAdminSeriesBannerUpdateResponseWhenOpenInViewIsDisabled() {
|
||||
val fixtureIds = createBannerFixture(suffix = "update", sortOrder = 4)
|
||||
|
||||
val response = service.updateBannerResponse(
|
||||
bannerId = fixtureIds.bannerId,
|
||||
imagePath = "banner/updated.png",
|
||||
imageHost = "https://cdn.test"
|
||||
)
|
||||
|
||||
assertEquals(fixtureIds.bannerId, response.id)
|
||||
assertEquals(fixtureIds.seriesId, response.seriesId)
|
||||
assertEquals("series-admin-banner", response.seriesTitle)
|
||||
assertEquals("https://cdn.test/banner/updated.png", response.imagePath)
|
||||
}
|
||||
|
||||
private fun createBannerFixture(suffix: String, sortOrder: Int): BannerFixtureIds {
|
||||
return transactionTemplate.execute {
|
||||
val creator = Member(
|
||||
email = "series-admin-banner-service-$suffix@test.com",
|
||||
password = "password",
|
||||
nickname = "series-admin-banner-creator",
|
||||
role = MemberRole.CREATOR
|
||||
)
|
||||
entityManager.persist(creator)
|
||||
|
||||
val genre = SeriesGenre(genre = "series-admin-banner-genre")
|
||||
entityManager.persist(genre)
|
||||
|
||||
val series = Series(
|
||||
title = "series-admin-banner",
|
||||
introduction = "introduction",
|
||||
languageCode = "ko"
|
||||
).apply {
|
||||
member = creator
|
||||
this.genre = genre
|
||||
}
|
||||
entityManager.persist(series)
|
||||
|
||||
val banner = SeriesBanner(
|
||||
imagePath = "banner/jp.png",
|
||||
series = series,
|
||||
sortOrder = sortOrder,
|
||||
lang = Lang.JA
|
||||
)
|
||||
entityManager.persist(
|
||||
banner
|
||||
)
|
||||
|
||||
entityManager.flush()
|
||||
val fixtureIds = BannerFixtureIds(
|
||||
seriesId = series.id!!,
|
||||
bannerId = banner.id!!
|
||||
)
|
||||
entityManager.clear()
|
||||
fixtureIds
|
||||
}!!
|
||||
}
|
||||
|
||||
private data class BannerFixtureIds(
|
||||
val seriesId: Long,
|
||||
val bannerId: Long
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user