feat(menu): 관리자 선물함 메뉴를 추가한다

This commit is contained in:
2026-09-30 19:08:15 +09:00
parent 15ce9aab41
commit a95c91d31f
2 changed files with 73 additions and 1 deletions
@@ -1,6 +1,7 @@
package kr.co.vividnext.sodalive.menu package kr.co.vividnext.sodalive.menu
import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.member.MemberRole
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
@Service @Service
@@ -8,6 +9,20 @@ class MenuService(
private val repository: MenuRepository private val repository: MenuRepository
) { ) {
fun getMenus(member: Member): List<GetMenuResponse> { fun getMenus(member: Member): List<GetMenuResponse> {
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")
)
)
} }
} }
@@ -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
)
}