From 8ba3ed5fb5cf49e70d5872487cce143c2671df74 Mon Sep 17 00:00:00 2001 From: klaus Date: Wed, 24 Jun 2026 15:40:14 +0900 Subject: [PATCH] =?UTF-8?q?fix(content):=20=EB=9E=AD=ED=82=B9=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EC=9D=B4=EB=8F=99=20guard=EB=A5=BC=20=EB=B3=B4?= =?UTF-8?q?=EA=B0=95=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/v2/main/content/ContentMainFragment.kt | 2 +- .../v2/main/content/ContentMainFragmentSourceTest.kt | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt index af6eadbc..6f3303a5 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt @@ -293,7 +293,7 @@ class ContentMainFragment : BaseFragment( } private fun openRankingAudioContentDetail(item: ContentRankingItem) { - val audioContentId = item.contentId.toLongOrNull() ?: return + val audioContentId = item.contentId.toLongOrNull()?.takeIf { it > 0L } ?: return openAudioContentDetail(audioContentId) } diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragmentSourceTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragmentSourceTest.kt index 773f40c6..b9f32dbb 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragmentSourceTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragmentSourceTest.kt @@ -85,6 +85,17 @@ class ContentMainFragmentSourceTest { assertTrue(source.contains("toContentBannerIntent(requireContext())")) } + @Test + fun `content 랭킹 routing은 유효하지 않은 contentId를 무시한다`() { + val source = projectFile( + "app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt" + ).readText() + + assertTrue(source.contains("private fun openRankingAudioContentDetail(item: ContentRankingItem)")) + assertTrue(source.contains("item.contentId.toLongOrNull()?.takeIf { it > 0L } ?: return")) + assertTrue(source.contains("openAudioContentDetail(audioContentId)")) + } + @Test fun `content 추천 layout은 Phase 4~6 item layout과 제외 섹션 정책을 지킨다`() { val fragmentLayout = projectFile("app/src/main/res/layout/fragment_v2_main_content.xml").readText()