feat(content-banner): 오디오 콘텐츠 배너를 언어별로 등록하고 노출한다
This commit is contained in:
+78
@@ -0,0 +1,78 @@
|
||||
package kr.co.vividnext.sodalive.admin.content.banner
|
||||
|
||||
import com.amazonaws.services.s3.AmazonS3Client
|
||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||
import kr.co.vividnext.sodalive.admin.content.series.AdminContentSeriesRepository
|
||||
import kr.co.vividnext.sodalive.admin.content.tab.AdminContentMainTabRepository
|
||||
import kr.co.vividnext.sodalive.aws.s3.S3Uploader
|
||||
import kr.co.vividnext.sodalive.content.main.banner.AudioContentBanner
|
||||
import kr.co.vividnext.sodalive.content.main.banner.AudioContentBannerType
|
||||
import kr.co.vividnext.sodalive.event.EventRepository
|
||||
import kr.co.vividnext.sodalive.i18n.Lang
|
||||
import kr.co.vividnext.sodalive.member.MemberRepository
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.mockito.ArgumentCaptor
|
||||
import org.mockito.Mockito
|
||||
import org.springframework.mock.web.MockMultipartFile
|
||||
import java.net.URL
|
||||
|
||||
class AdminContentBannerServiceTest {
|
||||
private lateinit var amazonS3Client: AmazonS3Client
|
||||
private lateinit var s3Uploader: S3Uploader
|
||||
private lateinit var repository: AdminContentBannerRepository
|
||||
private lateinit var memberRepository: MemberRepository
|
||||
private lateinit var seriesRepository: AdminContentSeriesRepository
|
||||
private lateinit var eventRepository: EventRepository
|
||||
private lateinit var contentMainTabRepository: AdminContentMainTabRepository
|
||||
private lateinit var service: AdminContentBannerService
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
amazonS3Client = Mockito.mock(AmazonS3Client::class.java)
|
||||
s3Uploader = S3Uploader(amazonS3Client)
|
||||
repository = Mockito.mock(AdminContentBannerRepository::class.java)
|
||||
memberRepository = Mockito.mock(MemberRepository::class.java)
|
||||
seriesRepository = Mockito.mock(AdminContentSeriesRepository::class.java)
|
||||
eventRepository = Mockito.mock(EventRepository::class.java)
|
||||
contentMainTabRepository = Mockito.mock(AdminContentMainTabRepository::class.java)
|
||||
service = AdminContentBannerService(
|
||||
s3Uploader = s3Uploader,
|
||||
repository = repository,
|
||||
memberRepository = memberRepository,
|
||||
seriesRepository = seriesRepository,
|
||||
eventRepository = eventRepository,
|
||||
contentMainTabRepository = contentMainTabRepository,
|
||||
objectMapper = jacksonObjectMapper(),
|
||||
bucket = "test-bucket"
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("배너 등록 요청의 lang 값을 저장한다")
|
||||
fun shouldSaveRequestedLangWhenCreatingBanner() {
|
||||
val image = MockMultipartFile("image", "banner.png", "image/png", "image".toByteArray())
|
||||
val requestString = """
|
||||
{"type":"LINK","lang":"ja","tabId":null,"eventId":null,"creatorId":null,"seriesId":null,"link":"https://example.com","isAdult":false}
|
||||
""".trimIndent()
|
||||
val savedBannerCaptor = ArgumentCaptor.forClass(AudioContentBanner::class.java)
|
||||
|
||||
Mockito.`when`(repository.save(Mockito.any(AudioContentBanner::class.java)))
|
||||
.thenAnswer {
|
||||
(it.arguments[0] as AudioContentBanner).also { banner ->
|
||||
banner.id = 1L
|
||||
}
|
||||
}
|
||||
Mockito.doAnswer { URL("https://cdn.test/${it.arguments[1]}") }
|
||||
.`when`(amazonS3Client)
|
||||
.getUrl(Mockito.eq("test-bucket"), Mockito.anyString())
|
||||
|
||||
service.createAudioContentMainBanner(image, requestString)
|
||||
|
||||
Mockito.verify(repository).save(savedBannerCaptor.capture())
|
||||
assertEquals(AudioContentBannerType.LINK, savedBannerCaptor.value.type)
|
||||
assertEquals(Lang.JA, savedBannerCaptor.value.lang)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user