From 68ba58a73c5ab3afae5052408aad725f2b464141 Mon Sep 17 00:00:00 2001 From: klaus Date: Fri, 26 Jun 2026 15:43:03 +0900 Subject: [PATCH] =?UTF-8?q?test(home):=20=ED=8C=94=EB=A1=9C=EC=9E=89=20?= =?UTF-8?q?=ED=83=AD=20=ED=9B=84=EC=86=8D=20UI=20=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=EC=9D=84=20=EB=B3=B4=EA=B0=95=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/HomeFollowingFragmentSourceTest.kt | 97 +++++++++++++++++-- .../main/home/HomeFollowingViewModelTest.kt | 2 +- 2 files changed, 91 insertions(+), 8 deletions(-) diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingFragmentSourceTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingFragmentSourceTest.kt index e9e8b2f5..aa445ecc 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingFragmentSourceTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingFragmentSourceTest.kt @@ -65,7 +65,7 @@ class HomeFollowingFragmentSourceTest { .substringBefore("\n private fun") assertTrue(source.contains("onFollowingSectionMoreClick(")) - assertTrue(source.contains("binding.viewHomeFollowingCreatorsTitle")) + assertFalse(source.contains("binding.viewHomeFollowingCreatorsTitle")) assertTrue(source.contains("binding.viewHomeFollowingOnAirTitle")) assertTrue(source.contains("binding.viewHomeFollowingRecentChatsTitle")) assertTrue(source.contains("binding.viewHomeFollowingMonthlySchedulesTitle")) @@ -109,7 +109,7 @@ class HomeFollowingFragmentSourceTest { val newsAdapter = projectFile( "app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeFollowingNewsAdapter.kt" ).readText() - val newsLayout = projectFile("app/src/main/res/layout/item_home_following_news_content.xml").readText() + val newsLayout = projectFile("app/src/main/res/layout/view_feed_content.xml").readText() assertTrue(liveLayout.contains("@+id/tv_home_following_live_started_at")) assertTrue(liveAdapter.contains("startedAtText.text")) @@ -122,11 +122,94 @@ class HomeFollowingFragmentSourceTest { assertTrue(scheduleAdapter.contains("item.isOnAir")) assertTrue(scheduleAdapter.contains("R.string.screen_home_following_on_air")) - assertTrue(newsLayout.contains("@+id/tv_home_following_news_label")) - assertTrue(newsLayout.contains("@+id/tv_home_following_news_title")) - assertTrue(newsAdapter.contains("labelText.setText(content.labelResId)")) - assertTrue(newsAdapter.contains("titleText.text = content.title")) - assertTrue(newsAdapter.contains("createdAtText.text = content.visibleFromText")) + assertTrue(newsLayout.contains("@+id/tv_feed_content_category")) + assertTrue(newsLayout.contains("@+id/tv_feed_content_title")) + assertTrue(newsAdapter.contains("contentTitle = content.title")) + assertTrue(newsAdapter.contains("createdAtText = content.visibleFromText")) + assertTrue(newsAdapter.contains("creatorImageUrl = content.creatorProfileImageUrl")) + } + + @Test + fun `following recent news hides chevron and reuses feed widgets by item type`() { + val layout = homeMainLayoutSource() + val recentNewsSection = layout.substringAfter("@+id/ll_home_following_recent_news_section") + .substringBefore("") + val fragment = homeMainFragmentSource() + val adapter = projectFile( + "app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeFollowingNewsAdapter.kt" + ).readText() + + assertTrue(fragment.contains("binding.viewHomeFollowingRecentNewsTitle.setTitle(")) + assertFalse( + fragment.contains( + "binding.viewHomeFollowingRecentNewsTitle.setTitle(\n" + + " R.string.screen_home_following_recent_news_title,\n" + + " showMore = true" + ) + ) + assertFalse(fragment.contains("binding.viewHomeFollowingRecentNewsTitle.ivSectionTitleChevron")) + assertTrue(recentNewsSection.contains("view_home_following_recent_news_title")) + assertTrue(adapter.contains("FollowingNewsType.COMMUNITY_POST -> VIEW_TYPE_COMMUNITY")) + assertTrue(adapter.contains("is HomeFollowingNewsUiItem.Ranking -> VIEW_TYPE_RANKING")) + assertTrue(adapter.contains("R.layout.view_feed_community")) + assertTrue(adapter.contains("R.layout.view_feed_rank")) + assertTrue(adapter.contains("R.layout.view_feed_content")) + assertTrue(adapter.contains("FeedCommunityView")) + assertTrue(adapter.contains("FeedRankView")) + assertTrue(adapter.contains("FeedContentView")) + assertTrue(adapter.contains("FeedItem.Community")) + assertTrue(adapter.contains("FeedItem.Rank")) + assertTrue(adapter.contains("FeedItem.Content")) + assertFalse(adapter.contains("R.layout.item_home_following_news_content")) + assertFalse(adapter.contains("R.layout.item_home_following_news_rank")) + } + + @Test + fun `following creators section has no header and uses figma simple profile size`() { + val layout = homeMainLayoutSource() + val section = layout.substringAfter("@+id/ll_home_following_creators_section") + .substringBefore("@+id/ll_home_following_on_air_section") + val itemLayout = projectFile("app/src/main/res/layout/item_home_following_creator.xml").readText() + + assertFalse(section.contains("view_home_following_creators_title")) + assertTrue(itemLayout.contains("android:layout_width=\"75dp\"")) + assertTrue(itemLayout.contains("android:layout_height=\"75dp\"")) + assertTrue(itemLayout.contains("@style/Typography.Body5")) + } + + @Test + fun `following recent chats section is horizontal box list`() { + val layout = homeMainLayoutSource() + val section = layout.substringAfter("@+id/rv_home_following_recent_chats") + .substringBefore("@+id/ll_home_following_monthly_schedules_section") + val fragment = homeMainFragmentSource() + + assertTrue(section.contains("android:orientation=\"horizontal\"")) + assertTrue(fragment.contains("rvHomeFollowingRecentChats.apply")) + assertTrue(fragment.contains("LinearLayoutManager.HORIZONTAL")) + } + + @Test + fun `following recent chat item matches figma box fields`() { + val adapter = projectFile( + "app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeFollowingChatAdapter.kt" + ).readText() + val itemLayout = projectFile("app/src/main/res/layout/item_home_following_chat.xml").readText() + + assertTrue(itemLayout.contains("android:layout_width=\"284dp\"")) + assertTrue(itemLayout.contains("android:layout_width=\"62dp\"")) + assertTrue(itemLayout.contains("android:layout_height=\"62dp\"")) + assertTrue(itemLayout.contains("@+id/tv_home_following_chat_direct_badge")) + assertTrue(itemLayout.contains("@drawable/bg_chat_direct_badge")) + assertTrue(itemLayout.contains("@string/screen_chat_direct_badge")) + val messageText = itemLayout.substringAfter("@+id/tv_home_following_chat_message") + .substringBefore("@+id/tv_home_following_chat_creator_nickname") + assertTrue(messageText.contains("android:maxLines=\"1\"")) + assertTrue(messageText.contains("android:ellipsize=\"end\"")) + assertFalse(adapter.contains("ViewGroup.LayoutParams.MATCH_PARENT")) + assertTrue(adapter.contains("recyclerItemLayoutParams(parent)")) + assertTrue(adapter.contains("directBadgeText.visibility = if (item.showDirectBadge)")) + assertTrue(adapter.contains("formatChatRoomLastMessageTime(itemView.context, item.lastMessageAt)")) } private fun homeMainFragmentSource(): String { diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingViewModelTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingViewModelTest.kt index 7fbff51e..8b3baf8a 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingViewModelTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingViewModelTest.kt @@ -43,7 +43,7 @@ class HomeFollowingViewModelTest { setImmediateRxSchedulers() SharedPreferenceManager.resetForTest() SharedPreferenceManager.init(context) - SharedPreferenceManager.token = "test-token" + SharedPreferenceManager.token = "" api = FakeHomeFollowingApi() viewModel = HomeFollowingViewModel( repository = HomeFollowingRepository(api),