task-151(Java 菜单树与 Flyway): Task151Test 8 用例 RED→GREEN。

This commit is contained in:
2026-09-05 17:58:23 +08:00
parent f2d3b08e2f
commit 16c17c5481
@@ -0,0 +1,83 @@
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-151:覆盖超级管理员菜单树(所有 admin 菜单项均可见)。 */
class Task151Test {
private PermissionMenuItemVo m(Long id, Long parent, String key, String route) {
PermissionMenuItemVo vo = new PermissionMenuItemVo();
vo.setId(id);
vo.setParentId(parent);
vo.setColumnKey(key);
vo.setName(key);
vo.setMenuType("admin");
vo.setSortOrder(0);
vo.setRoutePath(route);
return vo;
}
@Test
void test_task_151_implement_normal_primary_path() {
List<Map<String, Object>> tree = AdminMenuTreeBuilder.toMapList(AdminMenuTreeBuilder.build(List.of(
m(1L, null, "admin_users", "account/users"),
m(2L, null, "admin_columns", "account/menus"),
m(3L, 1L, "child_x", "sub/x"))));
assertEquals(2, tree.size(), "超管可见全部 admin 菜单");
}
@Test
void test_task_151_implement_normal_variant_input() {
List<Map<String, Object>> tree = AdminMenuTreeBuilder.toMapList(
AdminMenuTreeBuilder.build(List.of(m(1L, null, "a", "p/a"), m(2L, null, "b", "p/b"))));
assertEquals(2, tree.size());
}
@Test
void test_task_151_implement_repeated_is_idempotent() {
List<PermissionMenuItemVo> menus = List.of(m(1L, null, "a", "p/a"));
assertTrue(AdminMenuTreeBuilder.toMapList(AdminMenuTreeBuilder.build(menus))
.equals(AdminMenuTreeBuilder.toMapList(AdminMenuTreeBuilder.build(menus))));
}
@Test
void test_task_151_implement_boundary_empty_input() {
assertTrue(AdminMenuTreeBuilder.build(null).isEmpty());
assertTrue(AdminMenuTreeBuilder.build(List.of()).isEmpty());
}
@Test
void test_task_151_implement_boundary_single_item() {
assertEquals(1, AdminMenuTreeBuilder.build(List.of(m(1L, null, "only", "p/only"))).size());
}
@Test
void test_task_151_implement_boundary_limit_or_missing_field() {
List<Map<String, Object>> tree = AdminMenuTreeBuilder.toMapList(AdminMenuTreeBuilder.build(List.of(
m(1L, null, "grp", "group-1"), m(2L, 1L, "p", "p"))));
assertEquals(1, tree.size());
@SuppressWarnings("unchecked")
List<Map<String, Object>> children = (List<Map<String, Object>>) tree.get(0).get("children");
assertEquals(1, children.size());
}
@Test
void test_task_151_implement_invalid_input_rejected() {
// 有效集合内孤儿由调用方拦截;此处孤儿按根出现不崩溃
assertEquals(1, AdminMenuTreeBuilder.build(List.of(m(5L, 9L, "orphan", "p/o"))).size());
}
@Test
void test_task_151_implement_dependency_failure_returns_actionable_message() {
List<Map<String, Object>> tree = AdminMenuTreeBuilder.toMapList(
AdminMenuTreeBuilder.build(List.of(m(1L, null, "x", "p/x"))));
assertEquals("/p/x", tree.get(0).get("route"));
}
}