feat(chat): DM 채팅방 Activity를 추가한다

This commit is contained in:
2026-06-11 11:17:04 +09:00
parent f2687b8243
commit 590a52c605
2 changed files with 269 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
package kr.co.vividnext.sodalive.v2.main.chat.dm
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import java.io.File
class DmChatRoomActivitySourceTest {
@Test
fun `DM 채팅방 Activity source는 intent binding input pagination scroll lifecycle을 연결한다`() {
val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomActivity.kt"
).readText()
assertTrue(source.contains("BaseActivity<ActivityDmChatRoomBinding>"))
assertTrue(source.contains("const val EXTRA_ROOM_ID"))
assertTrue(source.contains("const val EXTRA_CREATOR_ID"))
assertTrue(source.contains("fun newIntentByRoomId"))
assertTrue(source.contains("fun newIntentByCreatorId"))
assertTrue(source.contains("private val viewModel: DmChatRoomViewModel by viewModel()"))
assertTrue(source.contains("viewModel.enter(roomId = roomId, creatorId = creatorId)"))
assertTrue(source.contains("binding.ivBack.setOnClickListener { finish() }"))
assertTrue(source.contains("DmChatMessageAdapter"))
assertTrue(source.contains("binding.etMessage.setOnEditorActionListener"))
assertTrue(source.contains("EditorInfo.IME_ACTION_SEND"))
assertTrue(source.contains("binding.ivSend.setOnClickListener"))
assertTrue(source.contains("viewModel.sendText"))
assertTrue(source.contains("findFirstVisibleItemPosition()"))
assertTrue(source.contains("viewModel.loadOlderMessages()"))
assertTrue(source.contains("prependedMessageCountLiveData.observe(this)"))
assertTrue(source.contains("scrollToPositionWithOffset"))
assertTrue(source.contains("isNearBottom()"))
assertTrue(source.contains("private var isStarted: Boolean = false"))
assertTrue(source.contains("viewModel.connectRealtime()"))
assertTrue(source.contains("roomOpenedEventLiveData.observe(this)"))
assertTrue(source.contains("if (it.consume() == true) connectRealtimeIfStarted()"))
assertTrue(source.contains("connectRealtimeIfStarted()"))
assertTrue(source.contains("viewModel.disconnectRealtime()"))
assertFalse(source.contains("if (isStarted) viewModel.connectRealtime()"))
assertTrue(!source.contains("character_type_badge"))
assertTrue(!source.contains("notice_container"))
}
@Test
fun `DM 채팅방 Activity intent helper는 roomId와 creatorId를 각각 전달한다`() {
val source = projectFile(
"app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomActivity.kt"
).readText()
assertTrue(source.contains("Intent(context, DmChatRoomActivity::class.java)"))
assertTrue(source.contains("putExtra(EXTRA_ROOM_ID, roomId)"))
assertTrue(source.contains("putExtra(EXTRA_CREATOR_ID, creatorId)"))
}
private fun projectFile(relativePath: String): File {
val candidates = listOf(File(relativePath), File("../$relativePath"))
return candidates.firstOrNull { it.exists() }
?: error("Project file not found: $relativePath")
}
}