task-144(Java 菜单树与 Flyway): 实现 parent_id 树组装
组装器新增 groupChildrenById/递归 assemble(孤儿按根),currentUserMenus 改走统一 组装器 toMapList。 TDD: Task144Test 8 用例 RED→GREEN。
This commit is contained in:
+79
@@ -0,0 +1,79 @@
|
||||
package com.nanri.aiimage.modules.permission.service.support;
|
||||
|
||||
import com.nanri.aiimage.modules.permission.model.vo.PermissionMenuItemVo;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/** task-144:parent_id 树组装。 */
|
||||
class Task144Test {
|
||||
|
||||
private PermissionMenuItemVo m(Long id, Long parent, String key) {
|
||||
PermissionMenuItemVo vo = new PermissionMenuItemVo();
|
||||
vo.setId(id);
|
||||
vo.setParentId(parent);
|
||||
vo.setColumnKey(key);
|
||||
vo.setMenuType("admin");
|
||||
vo.setSortOrder(0);
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_144_implement_normal_primary_path() {
|
||||
Map<Long, List<PermissionMenuItemVo>> groups = AdminMenuTreeBuilder.groupChildrenById(
|
||||
List.of(m(1L, null, "root"), m(2L, 1L, "child")));
|
||||
assertEquals(1, groups.get(null).size());
|
||||
assertEquals(1, groups.get(1L).size());
|
||||
List<AdminMenuTreeBuilder.Node> tree = AdminMenuTreeBuilder.build(
|
||||
List.of(m(1L, null, "root"), m(2L, 1L, "child")));
|
||||
assertEquals(1, tree.get(0).children().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_144_implement_normal_variant_input() {
|
||||
List<AdminMenuTreeBuilder.Node> tree = AdminMenuTreeBuilder.build(
|
||||
List.of(m(1L, null, "a"), m(2L, 1L, "b"), m(3L, 2L, "c")));
|
||||
assertEquals("c", tree.get(0).children().get(0).children().get(0).key());
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_144_implement_repeated_is_idempotent() {
|
||||
List<PermissionMenuItemVo> menus = List.of(m(1L, null, "a"), m(2L, 1L, "b"));
|
||||
assertTrue(AdminMenuTreeBuilder.build(menus).equals(AdminMenuTreeBuilder.build(menus)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_144_implement_boundary_empty_input() {
|
||||
assertTrue(AdminMenuTreeBuilder.groupChildrenById(null).isEmpty());
|
||||
assertTrue(AdminMenuTreeBuilder.build(null).isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_144_implement_boundary_single_item() {
|
||||
assertEquals(1, AdminMenuTreeBuilder.build(List.of(m(9L, null, "solo"))).size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_144_implement_boundary_limit_or_missing_field() {
|
||||
// 父不在集合内当作根(不崩溃)
|
||||
List<AdminMenuTreeBuilder.Node> tree = AdminMenuTreeBuilder.build(List.of(m(2L, 99L, "orphan")));
|
||||
assertEquals(1, tree.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_144_implement_invalid_input_rejected() {
|
||||
assertTrue(AdminMenuTreeBuilder.groupChildrenById(List.of()).isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_144_implement_dependency_failure_returns_actionable_message() {
|
||||
// 纯组装;授权由权限服务先行算出,此处不查库。
|
||||
Map<Long, List<PermissionMenuItemVo>> g = AdminMenuTreeBuilder.groupChildrenById(
|
||||
List.of(m(1L, null, "root"), m(2L, 1L, "child")));
|
||||
assertEquals(2, g.size());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user