diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/menu/MenuService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/menu/MenuService.kt index 957b7bb8..77455f1f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/menu/MenuService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/menu/MenuService.kt @@ -1,6 +1,7 @@ package kr.co.vividnext.sodalive.menu import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.member.MemberRole import org.springframework.stereotype.Service @Service @@ -8,6 +9,20 @@ class MenuService( private val repository: MenuRepository ) { fun getMenus(member: Member): List { - return repository.getMenu(member.role) + val menus = repository.getMenu(member.role) + if (member.role != MemberRole.ADMIN) return menus + + return menus + giftManagementMenu + } + + private companion object { + val giftManagementMenu = GetMenuResponse( + title = "선물함 관리", + items = listOf( + GetMenuResponse(title = "선물함 리스트", route = "/gift/list"), + GetMenuResponse(title = "선물 카테고리", route = "/gift/category"), + GetMenuResponse(title = "선물 사이즈", route = "/gift/size") + ) + ) } } diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/menu/MenuServiceTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/menu/MenuServiceTest.kt new file mode 100644 index 00000000..8f143b43 --- /dev/null +++ b/src/test/kotlin/kr/co/vividnext/sodalive/menu/MenuServiceTest.kt @@ -0,0 +1,57 @@ +package kr.co.vividnext.sodalive.menu + +import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.member.MemberRole +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test +import org.mockito.Mockito + +class MenuServiceTest { + private val repository = Mockito.mock(MenuRepository::class.java) + private val service = MenuService(repository) + + @Test + @DisplayName("관리자 메뉴 마지막에 선물함 관리 메뉴를 추가한다") + fun shouldAppendGiftMenuForAdmin() { + Mockito.`when`(repository.getMenu(MemberRole.ADMIN)).thenReturn( + listOf(GetMenuResponse(title = "회원 관리", route = "/member/list")) + ) + + val menus = service.getMenus(member(MemberRole.ADMIN)) + + assertEquals("회원 관리", menus[0].title) + val giftMenu = menus.last() + assertEquals("선물함 관리", giftMenu.title) + assertNull(giftMenu.route) + assertEquals( + listOf("선물함 리스트", "선물 카테고리", "선물 사이즈"), + giftMenu.items?.map { it.title } + ) + assertEquals( + listOf("/gift/list", "/gift/category", "/gift/size"), + giftMenu.items?.map { it.route } + ) + } + + @Test + @DisplayName("관리자가 아니면 선물함 관리 메뉴를 추가하지 않는다") + fun shouldNotAppendGiftMenuForNonAdmin() { + Mockito.`when`(repository.getMenu(MemberRole.CONTENT_MANAGER)).thenReturn( + listOf(GetMenuResponse(title = "콘텐츠 리스트", route = "/content/list")) + ) + + val menus = service.getMenus(member(MemberRole.CONTENT_MANAGER)) + + assertEquals(1, menus.size) + assertEquals("콘텐츠 리스트", menus[0].title) + } + + private fun member(role: MemberRole) = Member( + email = "${role.name.lowercase()}@test.com", + password = "password", + nickname = role.name.lowercase(), + role = role + ) +}