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)