test(creator): 라이브 공통 UI 검증을 갱신한다

This commit is contained in:
2026-06-19 19:12:47 +09:00
parent 6df7666cec
commit 763a86704c
2 changed files with 38 additions and 38 deletions

View File

@@ -91,20 +91,20 @@ class CreatorChannelLiveFragmentLayoutTest {
@Test
fun `라이브 sort popup layout은 Figma 기준 option row와 선택 배경을 제공한다`() {
val popup = inflateView(R.layout.view_creator_channel_live_sort_menu)
val popup = inflateView(R.layout.view_creator_channel_sort_menu)
val popupLayout = projectFile(
"app/src/main/res/layout/view_creator_channel_live_sort_menu.xml"
"app/src/main/res/layout/view_creator_channel_sort_menu.xml"
).readText()
val popupBackground = projectFile(
"app/src/main/res/drawable/bg_creator_channel_live_sort_popup.xml"
"app/src/main/res/drawable/bg_creator_channel_sort_popup.xml"
).readText()
val selectedBackground = projectFile(
"app/src/main/res/drawable/bg_creator_channel_live_sort_selected.xml"
"app/src/main/res/drawable/bg_creator_channel_sort_selected.xml"
).readText()
assertNotNull(popup.findViewById<View>(R.id.layout_creator_channel_live_sort_options))
assertTrue(popupLayout.contains("@drawable/bg_creator_channel_live_sort_popup"))
assertTrue(popupLayout.contains("@+id/layout_creator_channel_live_sort_options"))
assertNotNull(popup.findViewById<View>(R.id.layout_creator_channel_sort_options))
assertTrue(popupLayout.contains("@drawable/bg_creator_channel_sort_popup"))
assertTrue(popupLayout.contains("@+id/layout_creator_channel_sort_options"))
assertTrue(popupLayout.contains("android:paddingHorizontal=\"@dimen/spacing_12\""))
assertTrue(popupLayout.contains("android:paddingVertical=\"@dimen/spacing_8\""))
assertTrue(popupLayout.contains("android:fontFamily=\"@font/medium\""))
@@ -115,49 +115,49 @@ class CreatorChannelLiveFragmentLayoutTest {
}
@Test
fun `라이브 다시듣기 item layout은 썸네일 tag title duration action 영역을 제공한다`() {
val item = inflateView(R.layout.item_creator_channel_live_replay)
val itemLayout = projectFile("app/src/main/res/layout/item_creator_channel_live_replay.xml").readText()
fun `라이브 다시듣기 공통 item layout은 썸네일 tag title secondary action 영역을 제공한다`() {
val item = inflateView(R.layout.item_creator_channel_audio_content)
val itemLayout = projectFile("app/src/main/res/layout/item_creator_channel_audio_content.xml").readText()
val adapter = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/live/ui/CreatorChannelLiveReplayAdapter.kt"
).readText()
val thumbnail = requireNotNull(item.findViewById<View>(R.id.layout_creator_channel_live_replay_thumbnail))
val thumbnail = requireNotNull(item.findViewById<View>(R.id.layout_creator_channel_audio_content_thumbnail))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_live_replay_thumbnail))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_live_replay_adult_badge))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_live_replay_original_tag))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_live_replay_first_tag))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_live_replay_point_tag))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_live_replay_free_tag))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_live_replay_title))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_live_replay_duration))
assertNotNull(item.findViewById<View>(R.id.layout_creator_channel_live_replay_action))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_live_replay_play))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_live_replay_can))
assertNotNull(item.findViewById<View>(R.id.layout_creator_channel_live_replay_action_text))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_live_replay_action_text))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_audio_content_thumbnail))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_audio_content_adult_badge))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_audio_content_original_tag))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_audio_content_first_tag))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_audio_content_point_tag))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_audio_content_free_tag))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_audio_content_title))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_audio_content_secondary_text))
assertNotNull(item.findViewById<View>(R.id.layout_creator_channel_audio_content_action))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_audio_content_play))
assertNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_audio_content_can))
assertNotNull(item.findViewById<View>(R.id.layout_creator_channel_audio_content_action_text))
assertNotNull(item.findViewById<TextView>(R.id.tv_creator_channel_audio_content_action_text))
assertEquals(dp(88), thumbnail.layoutParams.width)
assertEquals(dp(88), thumbnail.layoutParams.height)
assertTrue(itemLayout.contains("android:layout_marginBottom=\"@dimen/spacing_8\""))
assertTrue(itemLayout.contains("android:clipToOutline=\"true\""))
assertTrue(itemLayout.contains("android:outlineProvider=\"background\""))
assertTrue(itemLayout.contains("@drawable/bg_audio_content_card_thumbnail"))
assertTrue(adapter.contains("layoutCreatorChannelLiveReplayThumbnail.clipToOutline = true"))
assertTrue(adapter.contains("layoutCreatorChannelAudioContentThumbnail.clipToOutline = true"))
assertTrue(adapter.contains("resources.getDimension(R.dimen.radius_14)"))
}
@Test
fun `라이브 layout은 가격 영역을 유연한 너비와 bar cash icon으로 제공한다`() {
val fragmentLayout = projectFile("app/src/main/res/layout/fragment_creator_channel_live.xml").readText()
val itemLayout = projectFile("app/src/main/res/layout/item_creator_channel_live_replay.xml").readText()
val itemLayout = projectFile("app/src/main/res/layout/item_creator_channel_audio_content.xml").readText()
val root = inflateView(R.layout.fragment_creator_channel_live)
val item = inflateView(R.layout.item_creator_channel_live_replay)
val item = inflateView(R.layout.item_creator_channel_audio_content)
val currentPrice = requireNotNull(root.findViewById<View>(R.id.layout_creator_channel_live_current_price))
val currentPriceCash = requireNotNull(root.findViewById<ImageView>(R.id.iv_creator_channel_live_current_price_cash))
val replayAction = requireNotNull(item.findViewById<View>(R.id.layout_creator_channel_live_replay_action))
val replayPlay = requireNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_live_replay_play))
val actionText = requireNotNull(item.findViewById<View>(R.id.layout_creator_channel_live_replay_action_text))
val adultBadge = requireNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_live_replay_adult_badge))
val replayAction = requireNotNull(item.findViewById<View>(R.id.layout_creator_channel_audio_content_action))
val replayPlay = requireNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_audio_content_play))
val actionText = requireNotNull(item.findViewById<View>(R.id.layout_creator_channel_audio_content_action_text))
val adultBadge = requireNotNull(item.findViewById<ImageView>(R.id.iv_creator_channel_audio_content_adult_badge))
val adultBadgeParams = adultBadge.layoutParams as ViewGroup.MarginLayoutParams
assertEquals(ViewGroup.LayoutParams.WRAP_CONTENT, currentPrice.layoutParams.width)
@@ -183,7 +183,7 @@ class CreatorChannelLiveFragmentLayoutTest {
)
assertFalse(
itemLayout.contains(
"android:id=\"@+id/layout_creator_channel_live_replay_action\"\n" +
"android:id=\"@+id/layout_creator_channel_audio_content_action\"\n" +
" android:layout_width=\"60dp\""
)
)
@@ -208,7 +208,7 @@ class CreatorChannelLiveFragmentLayoutTest {
""".trimIndent()
assertTrue(fragment.contains("R.drawable.ic_new_sort"))
assertTrue(fragment.contains("CreatorChannelLiveSortPopup"))
assertTrue(fragment.contains("CreatorChannelSortPopup"))
assertTrue(fragment.contains("layoutCreatorChannelLiveSortButton.setOnClickListener"))
assertTrue(fragment.contains("showSortPopup"))
assertTrue(fragment.contains("viewModel.changeSort(sort)"))
@@ -234,9 +234,9 @@ class CreatorChannelLiveFragmentLayoutTest {
assertFalse(fragment.contains("addOnScrollListener(object : RecyclerView.OnScrollListener()"))
assertTrue(adapter.contains("R.drawable.ic_new_shield_small"))
assertTrue(adapter.contains("R.drawable.ic_new_player_play"))
assertTrue(adapter.contains("ivCreatorChannelLiveReplayPlay.isVisible = true"))
assertTrue(adapter.contains("layoutCreatorChannelLiveReplayActionText.isVisible = false"))
assertTrue(adapter.contains("layoutCreatorChannelLiveReplayActionText.isVisible = true"))
assertTrue(adapter.contains("ivCreatorChannelAudioContentPlay.isVisible = true"))
assertTrue(adapter.contains("layoutCreatorChannelAudioContentActionText.isVisible = false"))
assertTrue(adapter.contains("layoutCreatorChannelAudioContentActionText.isVisible = true"))
}
@Test
@@ -282,7 +282,7 @@ class CreatorChannelLiveFragmentLayoutTest {
@Test
fun `라이브 sort popup source는 outside dismiss와 화면 밖 보정 및 같은 정렬 dismiss를 포함한다`() {
val popup = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/live/ui/CreatorChannelLiveSortPopup.kt"
"app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/ui/CreatorChannelSortPopup.kt"
).readText()
assertTrue(popup.contains("PopupWindow"))

View File

@@ -4,8 +4,8 @@ import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.v2.common.data.ContentSort
import kr.co.vividnext.sodalive.v2.creator.channel.data.CreatorChannelAudioContentResponse
import kr.co.vividnext.sodalive.v2.creator.channel.live.model.CreatorChannelLiveReplayStatus
import kr.co.vividnext.sodalive.v2.creator.channel.live.model.toLabelResId
import kr.co.vividnext.sodalive.v2.creator.channel.live.model.toReplayUiModel
import kr.co.vividnext.sodalive.v2.creator.channel.model.toLabelResId
import kr.co.vividnext.sodalive.v2.widget.AudioContentTag
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse