|
@@ -8,10 +8,7 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUp
|
|
|
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
|
|
|
import cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper;
|
|
|
import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum;
|
|
|
-import cn.iocoder.yudao.module.system.mq.producer.permission.MenuProducer;
|
|
|
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
|
|
|
-import com.google.common.collect.LinkedListMultimap;
|
|
|
-import com.google.common.collect.Multimap;
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
|
|
import org.springframework.context.annotation.Import;
|
|
@@ -26,8 +23,6 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServic
|
|
|
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
|
|
|
import static cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO.ID_ROOT;
|
|
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
|
|
-import static java.util.Arrays.asList;
|
|
|
-import static java.util.Collections.singletonList;
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
|
|
import static org.mockito.ArgumentMatchers.argThat;
|
|
@@ -46,35 +41,12 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
|
|
@MockBean
|
|
|
private PermissionService permissionService;
|
|
|
@MockBean
|
|
|
- private MenuProducer menuProducer;
|
|
|
- @MockBean
|
|
|
private TenantService tenantService;
|
|
|
|
|
|
- @Test
|
|
|
- public void testInitLocalCache_success() {
|
|
|
- MenuDO menuDO1 = randomPojo(MenuDO.class);
|
|
|
- menuMapper.insert(menuDO1);
|
|
|
- MenuDO menuDO2 = randomPojo(MenuDO.class);
|
|
|
- menuMapper.insert(menuDO2);
|
|
|
-
|
|
|
- // 调用
|
|
|
- menuService.initLocalCache();
|
|
|
- // 校验 menuCache 缓存
|
|
|
- Map<Long, MenuDO> menuCache = menuService.getMenuCache();
|
|
|
- assertEquals(2, menuCache.size());
|
|
|
- assertPojoEquals(menuDO1, menuCache.get(menuDO1.getId()));
|
|
|
- assertPojoEquals(menuDO2, menuCache.get(menuDO2.getId()));
|
|
|
- // 校验 permissionMenuCache 缓存
|
|
|
- Multimap<String, MenuDO> permissionMenuCache = menuService.getPermissionMenuCache();
|
|
|
- assertEquals(2, permissionMenuCache.size());
|
|
|
- assertPojoEquals(menuDO1, permissionMenuCache.get(menuDO1.getPermission()));
|
|
|
- assertPojoEquals(menuDO2, permissionMenuCache.get(menuDO2.getPermission()));
|
|
|
- }
|
|
|
-
|
|
|
@Test
|
|
|
public void testCreateMenu_success() {
|
|
|
// mock 数据(构造父菜单)
|
|
|
- MenuDO menuDO = createMenuDO(MenuTypeEnum.MENU,
|
|
|
+ MenuDO menuDO = buildMenuDO(MenuTypeEnum.MENU,
|
|
|
"parent", 0L);
|
|
|
menuMapper.insert(menuDO);
|
|
|
Long parentId = menuDO.getId();
|
|
@@ -89,14 +61,12 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
|
|
// 校验记录的属性是否正确
|
|
|
MenuDO dbMenu = menuMapper.selectById(menuId);
|
|
|
assertPojoEquals(reqVO, dbMenu);
|
|
|
- // 校验调用
|
|
|
- verify(menuProducer).sendMenuRefreshMessage();
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
public void testUpdateMenu_success() {
|
|
|
// mock 数据(构造父子菜单)
|
|
|
- MenuDO sonMenuDO = initParentAndSonMenu();
|
|
|
+ MenuDO sonMenuDO = createParentAndSonMenu();
|
|
|
Long sonId = sonMenuDO.getId();
|
|
|
// 准备参数
|
|
|
MenuUpdateReqVO reqVO = randomPojo(MenuUpdateReqVO.class, o -> {
|
|
@@ -111,8 +81,6 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
|
|
// 校验记录的属性是否正确
|
|
|
MenuDO dbMenu = menuMapper.selectById(sonId);
|
|
|
assertPojoEquals(reqVO, dbMenu);
|
|
|
- // 校验调用
|
|
|
- verify(menuProducer).sendMenuRefreshMessage();
|
|
|
}
|
|
|
|
|
|
@Test
|
|
@@ -137,7 +105,6 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
|
|
MenuDO dbMenuDO = menuMapper.selectById(id);
|
|
|
assertNull(dbMenuDO);
|
|
|
verify(permissionService).processMenuDeleted(id);
|
|
|
- verify(menuProducer).sendMenuRefreshMessage();
|
|
|
}
|
|
|
|
|
|
@Test
|
|
@@ -149,7 +116,7 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
|
|
@Test
|
|
|
public void testDeleteMenu_existChildren() {
|
|
|
// mock 数据(构造父子菜单)
|
|
|
- MenuDO sonMenu = initParentAndSonMenu();
|
|
|
+ MenuDO sonMenu = createParentAndSonMenu();
|
|
|
// 准备参数
|
|
|
Long parentId = sonMenu.getParentId();
|
|
|
|
|
@@ -218,85 +185,6 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
|
|
assertPojoEquals(menu100, result.get(0));
|
|
|
}
|
|
|
|
|
|
- @Test
|
|
|
- public void testListMenusFromCache_withoutId() {
|
|
|
- // mock 缓存
|
|
|
- Map<Long, MenuDO> menuCache = new HashMap<>();
|
|
|
- // 可被匹配
|
|
|
- MenuDO menuDO = randomPojo(MenuDO.class, o -> o.setId(1L)
|
|
|
- .setType(MenuTypeEnum.MENU.getType()).setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
|
|
- menuCache.put(menuDO.getId(), menuDO);
|
|
|
- // 测试 type 不匹配
|
|
|
- menuCache.put(3L, randomPojo(MenuDO.class, o -> o.setId(3L)
|
|
|
- .setType(MenuTypeEnum.BUTTON.getType()).setStatus(CommonStatusEnum.ENABLE.getStatus())));
|
|
|
- // 测试 status 不匹配
|
|
|
- menuCache.put(4L, randomPojo(MenuDO.class, o -> o.setId(4L)
|
|
|
- .setType(MenuTypeEnum.MENU.getType()).setStatus(CommonStatusEnum.DISABLE.getStatus())));
|
|
|
- menuService.setMenuCache(menuCache);
|
|
|
- // 准备参数
|
|
|
- Collection<Integer> menuTypes = singletonList(MenuTypeEnum.MENU.getType());
|
|
|
- Collection<Integer> menusStatuses = singletonList(CommonStatusEnum.ENABLE.getStatus());
|
|
|
-
|
|
|
- // 调用
|
|
|
- List<MenuDO> list = menuService.getMenuListFromCache(menuTypes, menusStatuses);
|
|
|
- // 断言
|
|
|
- assertEquals(1, list.size());
|
|
|
- assertPojoEquals(menuDO, list.get(0));
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testListMenusFromCache_withId() {
|
|
|
- // mock 缓存
|
|
|
- Map<Long, MenuDO> menuCache = new HashMap<>();
|
|
|
- // 可被匹配
|
|
|
- MenuDO menuDO = randomPojo(MenuDO.class, o -> o.setId(1L)
|
|
|
- .setType(MenuTypeEnum.MENU.getType()).setStatus(CommonStatusEnum.ENABLE.getStatus()));
|
|
|
- menuCache.put(menuDO.getId(), menuDO);
|
|
|
- // 测试 id 不匹配
|
|
|
- menuCache.put(2L, randomPojo(MenuDO.class, o -> o.setId(2L)
|
|
|
- .setType(MenuTypeEnum.MENU.getType()).setStatus(CommonStatusEnum.ENABLE.getStatus())));
|
|
|
- // 测试 type 不匹配
|
|
|
- menuCache.put(3L, randomPojo(MenuDO.class, o -> o.setId(3L)
|
|
|
- .setType(MenuTypeEnum.BUTTON.getType()).setStatus(CommonStatusEnum.ENABLE.getStatus())));
|
|
|
- // 测试 status 不匹配
|
|
|
- menuCache.put(4L, randomPojo(MenuDO.class, o -> o.setId(4L)
|
|
|
- .setType(MenuTypeEnum.MENU.getType()).setStatus(CommonStatusEnum.DISABLE.getStatus())));
|
|
|
- menuService.setMenuCache(menuCache);
|
|
|
- // 准备参数
|
|
|
- Collection<Long> menuIds = asList(1L, 3L, 4L);
|
|
|
- Collection<Integer> menuTypes = singletonList(MenuTypeEnum.MENU.getType());
|
|
|
- Collection<Integer> menusStatuses = singletonList(CommonStatusEnum.ENABLE.getStatus());
|
|
|
-
|
|
|
- // 调用
|
|
|
- List<MenuDO> list = menuService.getMenuListFromCache(menuIds, menuTypes, menusStatuses);
|
|
|
- // 断言
|
|
|
- assertEquals(1, list.size());
|
|
|
- assertPojoEquals(menuDO, list.get(0));
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testGetMenuListByPermissionFromCache() {
|
|
|
- // mock 缓存
|
|
|
- Multimap<String, MenuDO> permissionMenuCache = LinkedListMultimap.create();
|
|
|
- // 可被匹配
|
|
|
- MenuDO menuDO01 = randomPojo(MenuDO.class, o -> o.setId(1L).setPermission("123"));
|
|
|
- permissionMenuCache.put(menuDO01.getPermission(), menuDO01);
|
|
|
- MenuDO menuDO02 = randomPojo(MenuDO.class, o -> o.setId(2L).setPermission("123"));
|
|
|
- permissionMenuCache.put(menuDO02.getPermission(), menuDO02);
|
|
|
- // 不可匹配
|
|
|
- permissionMenuCache.put("456", randomPojo(MenuDO.class, o -> o.setId(3L).setPermission("456")));
|
|
|
- menuService.setPermissionMenuCache(permissionMenuCache);
|
|
|
- // 准备参数
|
|
|
- String permission = "123";
|
|
|
-
|
|
|
- // 调用
|
|
|
- List<MenuDO> list = menuService.getMenuListByPermissionFromCache(permission);
|
|
|
- // 断言
|
|
|
- assertEquals(2, list.size());
|
|
|
- assertPojoEquals(menuDO01, list.get(0));
|
|
|
- assertPojoEquals(menuDO02, list.get(1));
|
|
|
- }
|
|
|
-
|
|
|
@Test
|
|
|
public void testGetMenu() {
|
|
|
// mock 数据
|
|
@@ -314,7 +202,7 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
|
|
@Test
|
|
|
public void testValidateParentMenu_success() {
|
|
|
// mock 数据
|
|
|
- MenuDO menuDO = createMenuDO(MenuTypeEnum.MENU, "parent", 0L);
|
|
|
+ MenuDO menuDO = buildMenuDO(MenuTypeEnum.MENU, "parent", 0L);
|
|
|
menuMapper.insert(menuDO);
|
|
|
// 准备参数
|
|
|
Long parentId = menuDO.getId();
|
|
@@ -340,7 +228,7 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
|
|
@Test
|
|
|
public void testValidateParentMenu_parentTypeError() {
|
|
|
// mock 数据
|
|
|
- MenuDO menuDO = createMenuDO(MenuTypeEnum.BUTTON, "parent", 0L);
|
|
|
+ MenuDO menuDO = buildMenuDO(MenuTypeEnum.BUTTON, "parent", 0L);
|
|
|
menuMapper.insert(menuDO);
|
|
|
// 准备参数
|
|
|
Long parentId = menuDO.getId();
|
|
@@ -353,7 +241,7 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
|
|
@Test
|
|
|
public void testValidateMenu_success() {
|
|
|
// mock 父子菜单
|
|
|
- MenuDO sonMenu = initParentAndSonMenu();
|
|
|
+ MenuDO sonMenu = createParentAndSonMenu();
|
|
|
// 准备参数
|
|
|
Long parentId = sonMenu.getParentId();
|
|
|
Long otherSonMenuId = randomLongId();
|
|
@@ -366,7 +254,7 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
|
|
@Test
|
|
|
public void testValidateMenu_sonMenuNameDuplicate() {
|
|
|
// mock 父子菜单
|
|
|
- MenuDO sonMenu = initParentAndSonMenu();
|
|
|
+ MenuDO sonMenu = createParentAndSonMenu();
|
|
|
// 准备参数
|
|
|
Long parentId = sonMenu.getParentId();
|
|
|
Long otherSonMenuId = randomLongId();
|
|
@@ -380,26 +268,26 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
|
|
// ====================== 初始化方法 ======================
|
|
|
|
|
|
/**
|
|
|
- * 构造父子菜单,返回子菜单
|
|
|
+ * 插入父子菜单,返回子菜单
|
|
|
*
|
|
|
* @return 子菜单
|
|
|
*/
|
|
|
- private MenuDO initParentAndSonMenu() {
|
|
|
+ private MenuDO createParentAndSonMenu() {
|
|
|
// 构造父子菜单
|
|
|
- MenuDO parentMenuDO = createMenuDO(MenuTypeEnum.MENU, "parent", ID_ROOT);
|
|
|
+ MenuDO parentMenuDO = buildMenuDO(MenuTypeEnum.MENU, "parent", ID_ROOT);
|
|
|
menuMapper.insert(parentMenuDO);
|
|
|
// 构建子菜单
|
|
|
- MenuDO sonMenuDO = createMenuDO(MenuTypeEnum.MENU, "testSonName",
|
|
|
+ MenuDO sonMenuDO = buildMenuDO(MenuTypeEnum.MENU, "testSonName",
|
|
|
parentMenuDO.getParentId());
|
|
|
menuMapper.insert(sonMenuDO);
|
|
|
return sonMenuDO;
|
|
|
}
|
|
|
|
|
|
- private MenuDO createMenuDO(MenuTypeEnum type, String name, Long parentId) {
|
|
|
- return createMenuDO(type, name, parentId, randomCommonStatus());
|
|
|
+ private MenuDO buildMenuDO(MenuTypeEnum type, String name, Long parentId) {
|
|
|
+ return buildMenuDO(type, name, parentId, randomCommonStatus());
|
|
|
}
|
|
|
|
|
|
- private MenuDO createMenuDO(MenuTypeEnum type, String name, Long parentId, Integer status) {
|
|
|
+ private MenuDO buildMenuDO(MenuTypeEnum type, String name, Long parentId, Integer status) {
|
|
|
return randomPojo(MenuDO.class, o -> o.setId(null).setName(name).setParentId(parentId)
|
|
|
.setType(type.getType()).setStatus(status));
|
|
|
}
|