From 236b874e82808011c3b1694ac8dfdf80404e5cf6 Mon Sep 17 00:00:00 2001 From: klaus Date: Wed, 17 Jun 2026 13:52:38 +0900 Subject: [PATCH] =?UTF-8?q?fix(dm):=20creatorId=20=EB=B0=A9=20=EC=97=B4?= =?UTF-8?q?=EA=B8=B0=20thread=EB=A5=BC=20=EB=B3=B4=EC=A0=95=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2/main/chat/dm/DmChatRoomViewModel.kt | 1 + .../main/chat/dm/DmChatRoomViewModelTest.kt | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModel.kt index 692fa16e..baf6a728 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModel.kt @@ -280,6 +280,7 @@ class DmChatRoomViewModel( val data = response.requireData() repository.openRoom(token = authToken(), roomId = data.roomId) } + .observeOn(AndroidSchedulers.mainThread()) .subscribe( { handleOpenRoomResult(it) }, { handleError(it) } diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModelTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModelTest.kt index 4a298fcc..d598b1be 100644 --- a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModelTest.kt +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModelTest.kt @@ -113,6 +113,25 @@ class DmChatRoomViewModelTest { assertEquals(12L, state.roomId) } + @Test + fun `creatorId 진입은 openRoom 결과 처리 전에 main thread로 다시 전환한다`() { + val source = projectFile( + "app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/DmChatRoomViewModel.kt" + ).readText() + val createRoomAndOpenSource = source + .substringAfter("private fun createRoomAndOpen") + .substringBefore("private fun openRoom") + .filterNot { it.isWhitespace() } + + assertTrue( + "CreateOrGetRoom 이후 OpenRoom 결과는 LiveData 갱신 전 main thread로 재전환되어야 한다.", + createRoomAndOpenSource.contains( + ".flatMap{response->valdata=response.requireData()repository.openRoom(token=authToken(),roomId=data.roomId)}" + + ".observeOn(AndroidSchedulers.mainThread()).subscribe(" + ) + ) + } + @Test fun `유효하지 않은 진입 값은 종료 이벤트를 발행한다`() { viewModel.enter(roomId = 0L, creatorId = 0L)