From 535f5d16cc9de86ce40b630198fa2e56d9bc96ab Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 11 Apr 2026 21:05:17 +0900 Subject: [PATCH] =?UTF-8?q?feat(agent-read):=20=EA=B4=80=EB=A6=AC=EC=9E=90?= =?UTF-8?q?=20=EC=97=90=EC=9D=B4=EC=A0=84=ED=8A=B8=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EA=B2=80=EC=83=89=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=EB=A5=BC=20=EC=B6=94=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agent/read/AdminAgentReadController.kt | 9 +++++++ .../AdminAgentReadControllerSecurityTest.kt | 27 +++++++++++++++++++ .../read/AdminAgentReadControllerTest.kt | 19 +++++++++++++ 3 files changed, 55 insertions(+) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadController.kt index 5b1360eb..94af2ff9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadController.kt @@ -1,5 +1,6 @@ package kr.co.vividnext.sodalive.admin.partner.agent.read +import kr.co.vividnext.sodalive.admin.member.AdminSimpleMemberResponse import kr.co.vividnext.sodalive.common.ApiResponse import org.springframework.data.domain.Pageable import org.springframework.security.access.prepost.PreAuthorize @@ -28,6 +29,14 @@ class AdminAgentReadController( service.searchAssignableCreators(searchWord = searchWord, offset = pageable.offset, limit = pageable.pageSize.toLong()) ) + @GetMapping("/search-by-nickname") + fun searchAgentByNickname( + @RequestParam(value = "search_word") searchWord: String, + @RequestParam(value = "size", required = false) size: Int? + ): ApiResponse> = ApiResponse.ok( + service.searchAgentByNickname(searchWord = searchWord, size = size ?: 20) + ) + @GetMapping("/{agentId}/creator/list") fun getAssignedCreators( @PathVariable agentId: Long, diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadControllerSecurityTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadControllerSecurityTest.kt index d6b1fa4d..87ab61b6 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadControllerSecurityTest.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadControllerSecurityTest.kt @@ -1,5 +1,6 @@ package kr.co.vividnext.sodalive.admin.partner.agent.read +import kr.co.vividnext.sodalive.admin.member.AdminSimpleMemberResponse import kr.co.vividnext.sodalive.common.CountryContext import kr.co.vividnext.sodalive.i18n.LangContext import kr.co.vividnext.sodalive.i18n.SodaMessageSource @@ -95,6 +96,32 @@ class AdminAgentReadControllerSecurityTest @Autowired constructor( println(result.response.contentAsString) } + @Test + @DisplayName("관리자 권한이면 에이전트 닉네임 검색에 성공한다") + fun shouldAllowAdminRoleForAgentNicknameSearch() { + Mockito.`when`(service.searchAgentByNickname(searchWord = "agent", size = 10)).thenReturn( + listOf( + AdminSimpleMemberResponse( + id = 11L, + nickname = "agent-a" + ) + ) + ) + + val result = mockMvc.perform( + get("/admin/partner/agent/search-by-nickname") + .param("search_word", "agent") + .param("size", "10") + .with(user("admin").roles("ADMIN")) + ) + .andExpect(status().isOk) + .andExpect(jsonPath("$.success").value(true)) + .andExpect(jsonPath("$.data[0].id").value(11L)) + .andReturn() + + println(result.response.contentAsString) + } + @Test @DisplayName("익명 사용자는 관리자 조회 API에 접근할 수 없다") fun shouldRejectAnonymousUser() { diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadControllerTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadControllerTest.kt index 241bd1b3..ff800e83 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadControllerTest.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/admin/partner/agent/read/AdminAgentReadControllerTest.kt @@ -1,5 +1,6 @@ package kr.co.vividnext.sodalive.admin.partner.agent.read +import kr.co.vividnext.sodalive.admin.member.AdminSimpleMemberResponse import kr.co.vividnext.sodalive.partner.agent.calculate.GetAgentChannelDonationSettlementByCreatorItem import kr.co.vividnext.sodalive.partner.agent.calculate.GetAgentChannelDonationSettlementByCreatorResponse import kr.co.vividnext.sodalive.partner.agent.calculate.GetAgentChannelDonationSettlementTotal @@ -76,6 +77,24 @@ class AdminAgentReadControllerTest { Mockito.verify(service).searchAssignableCreators(searchWord = "creator", offset = 0L, limit = 10L) } + @Test + @DisplayName("관리자 컨트롤러는 에이전트 닉네임 검색 파라미터를 서비스로 전달한다") + fun shouldForwardAgentNicknameSearchRequest() { + val body = listOf( + AdminSimpleMemberResponse( + id = 11L, + nickname = "agent-a" + ) + ) + Mockito.`when`(service.searchAgentByNickname(searchWord = "agent", size = 10)).thenReturn(body) + + val response = controller.searchAgentByNickname(searchWord = "agent", size = 10) + + assertEquals(true, response.success) + assertEquals(11L, response.data!!.first().id) + Mockito.verify(service).searchAgentByNickname(searchWord = "agent", size = 10) + } + @Test @DisplayName("관리자 컨트롤러는 소속 크리에이터 목록 조회 파라미터를 서비스로 전달한다") fun shouldForwardAssignedCreatorListRequest() {