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) + } +}