test(home): 홈 추천 섹션 레이아웃 검증을 추가한다

This commit is contained in:
2026-06-02 16:23:36 +09:00
parent b20866fedd
commit 716f3c6880

View File

@@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.v2.widget.TextTabBarView import kr.co.vividnext.sodalive.v2.widget.TextTabBarView
import kr.co.vividnext.sodalive.v2.widget.banner.BannerView
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull import org.junit.Assert.assertNotNull
@@ -60,7 +61,6 @@ class HomeMainFragmentLayoutTest {
) )
val listIds = listOf( val listIds = listOf(
R.id.rv_home_lives, R.id.rv_home_lives,
R.id.rv_home_banners,
R.id.rv_home_recent_activity_creators, R.id.rv_home_recent_activity_creators,
R.id.rv_home_recent_debut_creators, R.id.rv_home_recent_debut_creators,
R.id.rv_home_first_audio_contents, R.id.rv_home_first_audio_contents,
@@ -77,9 +77,48 @@ class HomeMainFragmentLayoutTest {
assertNotNull(recyclerView) assertNotNull(recyclerView)
assertEquals(RecyclerView.HORIZONTAL, recyclerView.layoutManager?.canScrollHorizontally()?.toOrientation()) assertEquals(RecyclerView.HORIZONTAL, recyclerView.layoutManager?.canScrollHorizontally()?.toOrientation())
} }
assertNotNull(root.findViewById<BannerView>(R.id.rv_home_banners))
assertNotNull(root.findViewById<View>(R.id.ll_home_business_info)) assertNotNull(root.findViewById<View>(R.id.ll_home_business_info))
} }
@Test
fun `home phase6 item layouts expose required binding views`() {
val recentActivity = inflateView(R.layout.item_home_recent_activity_creator)
val recentDebut = inflateView(R.layout.item_home_recent_debut_creator)
val creatorProfile = inflateView(R.layout.item_home_creator_profile)
val followAllButton = inflateView(R.layout.view_home_follow_all_button)
assertNotNull(recentActivity.findViewById<ImageView>(R.id.iv_home_recent_activity_creator_profile))
assertNotNull(recentActivity.findViewById<TextView>(R.id.tv_home_recent_activity_type))
assertNotNull(recentActivity.findViewById<TextView>(R.id.tv_home_recent_activity_title))
assertNotNull(recentActivity.findViewById<TextView>(R.id.tv_home_recent_activity_nickname))
assertNotNull(recentDebut.findViewById<ImageView>(R.id.iv_home_recent_debut_creator_profile))
assertNotNull(recentDebut.findViewById<TextView>(R.id.tv_home_recent_debut_creator_nickname))
assertNotNull(creatorProfile.findViewById<ImageView>(R.id.iv_home_creator_profile))
assertNotNull(creatorProfile.findViewById<TextView>(R.id.tv_home_creator_profile_nickname))
assertNotNull(followAllButton.findViewById<ImageView>(R.id.iv_home_follow_all_icon))
assertNotNull(followAllButton.findViewById<TextView>(R.id.tv_home_follow_all))
}
@Test
fun `recent activity creator item matches figma capsule dimensions`() {
val recentActivity = inflateViewWithParent(R.layout.item_home_recent_activity_creator)
val profileImage = recentActivity.findViewById<ImageView>(R.id.iv_home_recent_activity_creator_profile)
assertEquals(244.dpToPx(), recentActivity.layoutParams.width)
assertEquals(76.dpToPx(), recentActivity.layoutParams.height)
assertEquals(52.dpToPx(), profileImage.layoutParams.width)
assertEquals(52.dpToPx(), profileImage.layoutParams.height)
}
@Test
fun `popular community section is hidden until phase7 binding is implemented`() {
val root = inflateView(R.layout.fragment_v2_main_home)
val popularCommunitySection = root.findViewById<LinearLayout>(R.id.ll_home_popular_community_section)
assertEquals(View.GONE, popularCommunitySection.visibility)
}
@Test @Test
fun `home layout uses section title components and custom genre title row`() { fun `home layout uses section title components and custom genre title row`() {
val root = inflateView(R.layout.fragment_v2_main_home) val root = inflateView(R.layout.fragment_v2_main_home)
@@ -136,6 +175,12 @@ class HomeMainFragmentLayoutTest {
return LayoutInflater.from(context).inflate(layoutResId, null, false) return LayoutInflater.from(context).inflate(layoutResId, null, false)
} }
private fun inflateViewWithParent(layoutResId: Int): View {
val context = ApplicationProvider.getApplicationContext<Context>()
val parent = android.widget.FrameLayout(context)
return LayoutInflater.from(context).inflate(layoutResId, parent, false)
}
private fun View.containsClassName(className: String): Boolean { private fun View.containsClassName(className: String): Boolean {
if (javaClass.name == className) return true if (javaClass.name == className) return true
if (this !is android.view.ViewGroup) return false if (this !is android.view.ViewGroup) return false