From 48176411555d8a9b00ef99180511a83c6d9b7d8d Mon Sep 17 00:00:00 2001 From: klaus Date: Tue, 2 Jun 2026 12:09:46 +0900 Subject: [PATCH] =?UTF-8?q?feat(home):=20=ED=99=88=20=EC=B6=94=EC=B2=9C=20?= =?UTF-8?q?activity=20type=20=EB=A7=A4=ED=8D=BC=EB=A5=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/model/HomeRecommendationMappers.kt | 6 ++ .../home/model/RecommendedActivityType.kt | 18 ++++++ .../main/home/RecommendedActivityTypeTest.kt | 62 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationMappers.kt create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/RecommendedActivityType.kt create mode 100644 app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/RecommendedActivityTypeTest.kt diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationMappers.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationMappers.kt new file mode 100644 index 00000000..f78daf20 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationMappers.kt @@ -0,0 +1,6 @@ +package kr.co.vividnext.sodalive.v2.main.home.model + +import androidx.annotation.StringRes + +@StringRes +fun String.toRecommendedActivityTypeLabelRes(): Int? = RecommendedActivityType.from(this)?.labelResId diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/RecommendedActivityType.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/RecommendedActivityType.kt new file mode 100644 index 00000000..ce45f082 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/RecommendedActivityType.kt @@ -0,0 +1,18 @@ +package kr.co.vividnext.sodalive.v2.main.home.model + +import androidx.annotation.StringRes +import kr.co.vividnext.sodalive.R + +enum class RecommendedActivityType( + val code: String, + @StringRes val labelResId: Int +) { + Live("LIVE", R.string.home_recommendation_activity_live), + LiveReplay("LIVE_REPLAY", R.string.home_recommendation_activity_live), + Audio("AUDIO", R.string.home_recommendation_activity_audio), + Community("COMMUNITY", R.string.home_recommendation_activity_community); + + companion object { + fun from(code: String): RecommendedActivityType? = entries.firstOrNull { it.code.equals(code, ignoreCase = true) } + } +} diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/RecommendedActivityTypeTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/RecommendedActivityTypeTest.kt new file mode 100644 index 00000000..f2a9593d --- /dev/null +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/RecommendedActivityTypeTest.kt @@ -0,0 +1,62 @@ +package kr.co.vividnext.sodalive.v2.main.home + +import kr.co.vividnext.sodalive.R +import kr.co.vividnext.sodalive.v2.main.home.model.toRecommendedActivityTypeLabelRes +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNull +import org.junit.Test + +class RecommendedActivityTypeTest { + @Test + fun `LIVE maps to live label`() { + assertEquals( + R.string.home_recommendation_activity_live, + "LIVE".toRecommendedActivityTypeLabelRes() + ) + } + + @Test + fun `LIVE_REPLAY maps to live label`() { + assertEquals( + R.string.home_recommendation_activity_live, + "LIVE_REPLAY".toRecommendedActivityTypeLabelRes() + ) + } + + @Test + fun `AUDIO maps to audio label`() { + assertEquals( + R.string.home_recommendation_activity_audio, + "AUDIO".toRecommendedActivityTypeLabelRes() + ) + } + + @Test + fun `COMMUNITY maps to community label`() { + assertEquals( + R.string.home_recommendation_activity_community, + "COMMUNITY".toRecommendedActivityTypeLabelRes() + ) + } + + @Test + fun `lowercase activity type maps to matching label`() { + assertEquals( + R.string.home_recommendation_activity_live, + "live".toRecommendedActivityTypeLabelRes() + ) + } + + @Test + fun `mixed case activity type maps to matching label`() { + assertEquals( + R.string.home_recommendation_activity_live, + "Live_RePlay".toRecommendedActivityTypeLabelRes() + ) + } + + @Test + fun `unknown activity type maps to null`() { + assertNull("UNKNOWN".toRecommendedActivityTypeLabelRes()) + } +}