feat(live-recommend): 추천 크리에이터 배너를 언어별로 등록하고 노출한다
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
package kr.co.vividnext.sodalive.admin.live
|
||||
|
||||
import com.amazonaws.services.s3.AmazonS3Client
|
||||
import kr.co.vividnext.sodalive.aws.s3.S3Uploader
|
||||
import kr.co.vividnext.sodalive.can.CanRepository
|
||||
import kr.co.vividnext.sodalive.can.charge.ChargeRepository
|
||||
import kr.co.vividnext.sodalive.can.use.UseCanCalculateRepository
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.i18n.Lang
|
||||
import kr.co.vividnext.sodalive.i18n.LangContext
|
||||
import kr.co.vividnext.sodalive.i18n.SodaMessageSource
|
||||
import kr.co.vividnext.sodalive.live.recommend.RecommendLiveCreatorBanner
|
||||
import kr.co.vividnext.sodalive.live.recommend.RecommendLiveCreatorBannerRepository
|
||||
import kr.co.vividnext.sodalive.live.reservation.LiveReservationRepository
|
||||
import kr.co.vividnext.sodalive.live.room.cancel.LiveRoomCancelRepository
|
||||
import kr.co.vividnext.sodalive.live.room.info.LiveRoomInfoRedisRepository
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.member.MemberRepository
|
||||
import kr.co.vividnext.sodalive.member.MemberRole
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertThrows
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.mockito.Mockito
|
||||
import org.springframework.context.ApplicationEventPublisher
|
||||
import org.springframework.mock.web.MockMultipartFile
|
||||
import java.net.URL
|
||||
|
||||
class AdminLiveServiceTest {
|
||||
private val recommendCreatorBannerRepository = Mockito.mock(RecommendLiveCreatorBannerRepository::class.java)
|
||||
private val roomInfoRepository = Mockito.mock(LiveRoomInfoRedisRepository::class.java)
|
||||
private val roomCancelRepository = Mockito.mock(LiveRoomCancelRepository::class.java)
|
||||
private val repository = Mockito.mock(AdminLiveRoomQueryRepository::class.java)
|
||||
private val memberRepository = Mockito.mock(MemberRepository::class.java)
|
||||
private val amazonS3Client = Mockito.mock(AmazonS3Client::class.java)
|
||||
private val s3Uploader = S3Uploader(amazonS3Client)
|
||||
private val useCanCalculateRepository = Mockito.mock(UseCanCalculateRepository::class.java)
|
||||
private val reservationRepository = Mockito.mock(LiveReservationRepository::class.java)
|
||||
private val chargeRepository = Mockito.mock(ChargeRepository::class.java)
|
||||
private val canRepository = Mockito.mock(CanRepository::class.java)
|
||||
private val applicationEventPublisher = Mockito.mock(ApplicationEventPublisher::class.java)
|
||||
private val messageSource = SodaMessageSource()
|
||||
private val langContext = LangContext()
|
||||
private val service = AdminLiveService(
|
||||
recommendCreatorBannerRepository = recommendCreatorBannerRepository,
|
||||
roomInfoRepository = roomInfoRepository,
|
||||
roomCancelRepository = roomCancelRepository,
|
||||
repository = repository,
|
||||
memberRepository = memberRepository,
|
||||
s3Uploader = s3Uploader,
|
||||
useCanCalculateRepository = useCanCalculateRepository,
|
||||
reservationRepository = reservationRepository,
|
||||
chargeRepository = chargeRepository,
|
||||
canRepository = canRepository,
|
||||
applicationEventPublisher = applicationEventPublisher,
|
||||
messageSource = messageSource,
|
||||
langContext = langContext,
|
||||
bucket = "test-bucket",
|
||||
coverImageHost = "https://cdn.test"
|
||||
)
|
||||
|
||||
@Test
|
||||
@DisplayName("추천 크리에이터 등록은 소문자 lang 코드를 Lang enum으로 저장한다")
|
||||
fun shouldSaveRecommendCreatorBannerWithIsoLanguageCode() {
|
||||
val image = MockMultipartFile("image", "banner.png", "image/png", "image".toByteArray())
|
||||
val creator = Member(
|
||||
email = "creator@test.com",
|
||||
password = "password",
|
||||
nickname = "creator",
|
||||
role = MemberRole.CREATOR
|
||||
).also {
|
||||
it.id = 7L
|
||||
}
|
||||
var savedBanner: RecommendLiveCreatorBanner? = null
|
||||
|
||||
Mockito.`when`(memberRepository.findCreatorByIdOrNull(7L)).thenReturn(creator)
|
||||
Mockito.doAnswer {
|
||||
val banner = it.arguments[0] as RecommendLiveCreatorBanner
|
||||
banner.id = 55L
|
||||
savedBanner = banner
|
||||
banner
|
||||
}.`when`(recommendCreatorBannerRepository).save(Mockito.any(RecommendLiveCreatorBanner::class.java))
|
||||
Mockito.`when`(amazonS3Client.getUrl(Mockito.eq("test-bucket"), Mockito.anyString()))
|
||||
.thenAnswer { URL("https://cdn.test/${it.arguments[1]}") }
|
||||
|
||||
service.createRecommendCreatorBanner(
|
||||
image = image,
|
||||
creatorId = 7L,
|
||||
startDateString = "2099-01-01 10:00",
|
||||
endDateString = "2099-01-02 10:00",
|
||||
isAdult = false,
|
||||
lang = "ja"
|
||||
)
|
||||
|
||||
assertEquals(Lang.JA, savedBanner?.lang)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("추천 크리에이터 등록은 지원하지 않는 lang 값이면 예외를 던진다")
|
||||
fun shouldThrowWhenRecommendCreatorBannerLangIsInvalid() {
|
||||
val image = MockMultipartFile("image", "banner.png", "image/png", "image".toByteArray())
|
||||
val creator = Member(
|
||||
email = "creator@test.com",
|
||||
password = "password",
|
||||
nickname = "creator",
|
||||
role = MemberRole.CREATOR
|
||||
).also {
|
||||
it.id = 7L
|
||||
}
|
||||
|
||||
Mockito.`when`(memberRepository.findCreatorByIdOrNull(7L)).thenReturn(creator)
|
||||
|
||||
val exception = assertThrows(SodaException::class.java) {
|
||||
service.createRecommendCreatorBanner(
|
||||
image = image,
|
||||
creatorId = 7L,
|
||||
startDateString = "2099-01-01 10:00",
|
||||
endDateString = "2099-01-02 10:00",
|
||||
isAdult = false,
|
||||
lang = "fr"
|
||||
)
|
||||
}
|
||||
|
||||
assertEquals("common.error.invalid_request", exception.messageKey)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user