feat(home): AI 캐릭터 크리에이터 이동을 연결한다

This commit is contained in:
2026-06-23 11:33:35 +09:00
parent 74efe45d05
commit 51b50eed75
6 changed files with 84 additions and 18 deletions

View File

@@ -32,6 +32,7 @@ import kr.co.vividnext.sodalive.settings.event.EventDetailActivity
import kr.co.vividnext.sodalive.settings.event.EventItem
import kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivity
import kr.co.vividnext.sodalive.v2.main.home.data.HomeActiveCreatorItem
import kr.co.vividnext.sodalive.v2.main.home.data.HomeAiCharacterItem
import kr.co.vividnext.sodalive.v2.main.home.data.HomeBannerItem
import kr.co.vividnext.sodalive.v2.main.home.data.HomeCreatorItem
import kr.co.vividnext.sodalive.v2.main.home.data.HomeFirstAudioContentItem
@@ -40,6 +41,7 @@ import kr.co.vividnext.sodalive.v2.main.home.data.HomeLiveItem
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationBannerSection
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationBannerRoute
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationBannerUiModel
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationAiCharacterRoute
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationFirstAudioContentUiModel
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationCreatorUiModel
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationGenreCreatorGroupUiModel
@@ -53,6 +55,8 @@ import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationRecentlyAct
import kr.co.vividnext.sodalive.v2.common.CreatorActivityType
import kr.co.vividnext.sodalive.v2.main.home.model.toHomeRecommendationBannerIntent
import kr.co.vividnext.sodalive.v2.main.home.model.toHomeRecommendationBannerRoute
import kr.co.vividnext.sodalive.v2.main.home.model.toHomeRecommendationAiCharacterIntent
import kr.co.vividnext.sodalive.v2.main.home.model.toHomeRecommendationAiCharacterRoute
import kr.co.vividnext.sodalive.v2.main.home.model.toHomeRecommendationRecentlyActiveCreatorIntent
import kr.co.vividnext.sodalive.v2.main.home.model.toHomeRecommendationRecentlyActiveCreatorRoute
import kr.co.vividnext.sodalive.v2.main.home.model.visibleHomePopularCommunityPosts
@@ -1087,6 +1091,41 @@ class HomeMainFragmentLayoutTest {
assertEquals(13L, communityIntent.getLongExtra(Constants.EXTRA_COMMUNITY_CREATOR_ID, 0L))
}
@Test
fun `home ai character mapper preserves creator id for routing and character id for display`() {
val item = HomeAiCharacterItem(
characterId = 11L,
creatorId = 22L,
name = "캐릭터",
description = "설명",
profileImage = "https://example.com/character.png",
totalChatCount = 33L,
originalWorkTitle = "원작"
).toUiModel()
assertEquals(22L, item.creatorId)
assertEquals(11L, item.item.characterId)
}
@Test
fun `home ai character route uses creator id and ignores invalid ids`() {
assertEquals(
HomeRecommendationAiCharacterRoute.Creator(22L),
aiCharacter(creatorId = 22L).toHomeRecommendationAiCharacterRoute()
)
assertEquals(null, aiCharacter(creatorId = 0L).toHomeRecommendationAiCharacterRoute())
assertEquals(null, aiCharacter(creatorId = -1L).toHomeRecommendationAiCharacterRoute())
}
@Test
fun `home ai character route creates creator channel intent`() {
val context = ApplicationProvider.getApplicationContext<Context>()
val intent = HomeRecommendationAiCharacterRoute.Creator(22L).toHomeRecommendationAiCharacterIntent(context)
assertEquals(CreatorChannelActivity::class.java.name, intent.component?.className)
assertEquals(22L, intent.getLongExtra(CreatorChannelActivity.EXTRA_CREATOR_ID, 0L))
}
@Test
fun `home popular community adapter applies blur when locked paid post image is loaded`() {
val source = projectFile(
@@ -1517,6 +1556,18 @@ class HomeMainFragmentLayoutTest {
)
}
private fun aiCharacter(creatorId: Long): kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationAiCharacterUiModel {
return HomeAiCharacterItem(
characterId = 11L,
creatorId = creatorId,
name = "캐릭터",
description = "설명",
profileImage = null,
totalChatCount = 33L,
originalWorkTitle = null
).toUiModel()
}
private fun popularCommunityData(
audioUrl: String?,
createdAt: String = "2분 전"