fix(content): 크리에이터 관리자 시리즈 상세 조회 예외를 수정한다

This commit is contained in:
2026-08-05 19:50:15 +09:00
parent 579a48c2f1
commit 8538880d81
4 changed files with 419 additions and 0 deletions

View File

@@ -26,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional
import org.springframework.web.multipart.MultipartFile
@Service
@Transactional(readOnly = true)
class CreatorAdminContentSeriesService(
private val repository: CreatorAdminContentSeriesRepository,
private val genreRepository: CreatorAdminContentSeriesGenreRepository,

View File

@@ -0,0 +1,96 @@
package kr.co.vividnext.sodalive.creator.admin.content.series
import kr.co.vividnext.sodalive.admin.content.series.genre.SeriesGenre
import kr.co.vividnext.sodalive.content.hashtag.HashTag
import kr.co.vividnext.sodalive.creator.admin.content.series.keyword.SeriesKeyword
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.test.context.ContextConfiguration
import org.springframework.transaction.support.TransactionTemplate
import javax.persistence.EntityManager
@SpringBootTest(properties = ["cloud.aws.cloud-front.host=https://cdn.test"])
@ContextConfiguration(initializers = [EmbeddedRedisInitializer::class])
class CreatorAdminContentSeriesServiceIntegrationTest @Autowired constructor(
private val service: CreatorAdminContentSeriesService,
private val entityManager: EntityManager,
private val transactionTemplate: TransactionTemplate
) {
@Test
@DisplayName("OSIV off 환경에서 크리에이터 관리자 시리즈 상세는 키워드와 기존 필드를 반환한다")
fun shouldReturnOwnedSeriesDetailWithKeywordsWhenOpenInViewIsDisabled() {
val fixtureIds = createSeriesFixture()
val response = service.getDetail(id = fixtureIds.seriesId, memberId = fixtureIds.memberId)
assertEquals(fixtureIds.seriesId, response.seriesId)
assertEquals("lazy series", response.title)
assertEquals("lazy series introduction", response.introduction)
assertEquals("https://cdn.test/series/lazy-series.png", response.coverImageUrl)
assertEquals("월, 수", response.publishedDaysOfWeek)
assertEquals("lazy genre", response.genre)
assertEquals("#lazy-keyword", response.keywords)
assertEquals(true, response.isAdult)
assertEquals("완결", response.state)
assertEquals("lazy writer", response.writer)
assertEquals("lazy studio", response.studio)
}
private fun createSeriesFixture(): FixtureIds {
return transactionTemplate.execute {
val member = Member(
email = "creator-admin-series-detail@test.com",
password = "password",
nickname = "creator-admin-series-detail",
role = MemberRole.CREATOR
)
entityManager.persist(member)
val genre = SeriesGenre(genre = "lazy genre")
entityManager.persist(genre)
val hashTag = HashTag("#lazy-keyword")
entityManager.persist(hashTag)
val series = Series(
title = "lazy series",
introduction = "lazy series introduction",
state = SeriesState.COMPLETE,
writer = "lazy writer",
studio = "lazy studio",
publishedDaysOfWeek = mutableSetOf(
SeriesPublishedDaysOfWeek.MON,
SeriesPublishedDaysOfWeek.WED
),
isAdult = true
).apply {
this.member = member
this.genre = genre
coverImage = "series/lazy-series.png"
}
series.keywordList.add(
SeriesKeyword().apply {
this.series = series
keyword = hashTag
}
)
entityManager.persist(series)
entityManager.flush()
val fixtureIds = FixtureIds(memberId = member.id!!, seriesId = series.id!!)
entityManager.clear()
fixtureIds
}!!
}
private data class FixtureIds(
val memberId: Long,
val seriesId: Long
)
}