package com.tourguide.modules.system.service; import com.tourguide.modules.system.entity.SystemMenu; import com.tourguide.modules.system.entity.SystemRole; import com.tourguide.modules.system.entity.SystemRoleMenu; import com.tourguide.modules.system.mapper.SystemMenuMapper; import com.tourguide.modules.system.mapper.SystemRoleMapper; import com.tourguide.modules.system.mapper.SystemRoleMenuMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.Arrays; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; class AdminPermissionServiceTest { private SystemRoleMapper roleMapper; private SystemMenuMapper menuMapper; private SystemRoleMenuMapper roleMenuMapper; private AdminPermissionService permissionService; @BeforeEach void setUp() { roleMapper = mock(SystemRoleMapper.class); menuMapper = mock(SystemMenuMapper.class); roleMenuMapper = mock(SystemRoleMenuMapper.class); permissionService = new AdminPermissionService(roleMapper, menuMapper, roleMenuMapper); } @Test void customRoleShouldOnlyReturnItsEnabledMenuCodes() { SystemRole role = role(4L, "CUSTOM_GUIDE"); when(roleMapper.selectOne(any())).thenReturn(role); when(roleMenuMapper.selectList(any())).thenReturn(Arrays.asList(relation(10L), relation(11L))); when(menuMapper.selectList(any())).thenReturn(Arrays.asList(menu("GUIDES"), menu("GUIDE_LIST"))); List menuCodes = permissionService.getMenuCodes("CUSTOM_GUIDE"); assertThat(menuCodes).containsExactly("GUIDES", "GUIDE_LIST"); } @Test void superAdminShouldReceiveAllEnabledMenuCodesWithoutRoleRelations() { when(roleMapper.selectOne(any())).thenReturn(role(1L, "ADMIN")); when(menuMapper.selectList(any())).thenReturn(Arrays.asList(menu("DASHBOARD"), menu("EMPLOYEE_LIST"))); List menuCodes = permissionService.getMenuCodes("ADMIN"); assertThat(menuCodes).containsExactly("DASHBOARD", "EMPLOYEE_LIST"); verify(roleMenuMapper, never()).selectList(any()); } private SystemRole role(Long id, String roleCode) { SystemRole role = new SystemRole(); role.setId(id); role.setRoleCode(roleCode); role.setStatus(1); return role; } private SystemRoleMenu relation(Long menuId) { SystemRoleMenu relation = new SystemRoleMenu(); relation.setMenuId(menuId); return relation; } private SystemMenu menu(String menuCode) { SystemMenu menu = new SystemMenu(); menu.setMenuCode(menuCode); return menu; } }