From 5cb69bfa6ecaddaaeb4627eb63523b18ce4794ce Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 27 Jun 2026 02:34:56 +0900 Subject: [PATCH] =?UTF-8?q?fix(chat):=20=EB=B9=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=B1=84=ED=8C=85=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=EC=9D=84=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 --- .../chat/controller/ChatRoomListController.kt | 4 +- .../v2/chat/ChatRoomListControllerTest.kt | 56 +++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/test/kotlin/kr/co/vividnext/sodalive/v2/chat/ChatRoomListControllerTest.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/chat/controller/ChatRoomListController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/chat/controller/ChatRoomListController.kt index cabb5a45..15a6ab59 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/v2/chat/controller/ChatRoomListController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/chat/controller/ChatRoomListController.kt @@ -1,8 +1,8 @@ package kr.co.vividnext.sodalive.v2.chat.controller import kr.co.vividnext.sodalive.common.ApiResponse -import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.v2.chat.dto.ChatRoomListPageResponse import kr.co.vividnext.sodalive.v2.chat.service.ChatRoomListService import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.web.bind.annotation.GetMapping @@ -22,7 +22,7 @@ class ChatRoomListController( @RequestParam(required = false) cursor: String?, @RequestParam(defaultValue = "30") limit: Int ) = run { - if (member == null) throw SodaException(messageKey = "common.error.bad_credentials") + if (member == null) return@run ApiResponse.ok(ChatRoomListPageResponse(emptyList(), false, null)) ApiResponse.ok(service.getRooms(member, filter, cursor, limit)) } } diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/v2/chat/ChatRoomListControllerTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/v2/chat/ChatRoomListControllerTest.kt new file mode 100644 index 00000000..6af6d61f --- /dev/null +++ b/src/test/kotlin/kr/co/vividnext/sodalive/v2/chat/ChatRoomListControllerTest.kt @@ -0,0 +1,56 @@ +package kr.co.vividnext.sodalive.v2.chat + +import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.v2.chat.controller.ChatRoomListController +import kr.co.vividnext.sodalive.v2.chat.dto.ChatRoomListItemResponse +import kr.co.vividnext.sodalive.v2.chat.dto.ChatRoomListPageResponse +import kr.co.vividnext.sodalive.v2.chat.service.ChatRoomListService +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertFalse +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test +import org.mockito.Mockito + +class ChatRoomListControllerTest { + private lateinit var service: ChatRoomListService + private lateinit var controller: ChatRoomListController + + @BeforeEach + fun setUp() { + service = Mockito.mock(ChatRoomListService::class.java) + controller = ChatRoomListController(service) + } + + @Test + @DisplayName("채팅 리스트 조회는 비로그인 사용자에게 빈 목록을 반환한다") + fun shouldReturnEmptyRoomsForAnonymousUser() { + val response = controller.getRooms(member = null, filter = "ALL", cursor = null, limit = 30) + + assertTrue(response.success) + assertEquals(emptyList(), response.data?.rooms) + assertFalse(response.data?.hasMore ?: true) + assertNull(response.data?.nextCursor) + Mockito.verifyNoInteractions(service) + } + + @Test + @DisplayName("채팅 리스트 조회는 로그인 사용자의 요청을 서비스에 위임한다") + fun shouldDelegateAuthenticatedRequestToService() { + val member = Member(password = "pw", nickname = "user").apply { id = 1L } + val serviceResponse = ChatRoomListPageResponse( + rooms = emptyList(), + hasMore = false, + nextCursor = null + ) + Mockito.`when`(service.getRooms(member, "DM", "cursor", 10)).thenReturn(serviceResponse) + + val response = controller.getRooms(member = member, filter = "DM", cursor = "cursor", limit = 10) + + assertTrue(response.success) + assertEquals(serviceResponse, response.data) + Mockito.verify(service).getRooms(member, "DM", "cursor", 10) + } +}