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

This commit is contained in:
2026-09-05 17:56:51 +08:00
parent 9b8423bb9b
commit d23fde1757
@@ -0,0 +1,80 @@
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.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
/** task-148:页面节点 route 输出(分组不带页面 route)。 */
class Task148Test {
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.setSortOrder(0);
vo.setRoutePath(route);
vo.setMenuType("admin");
return vo;
}
@Test
void test_task_148_implement_normal_primary_path() {
List<AdminMenuTreeBuilder.Node> tree = AdminMenuTreeBuilder.build(List.of(
m(1L, null, "grp", "group-1"), m(2L, 1L, "page", "records/history")));
List<Map<String, Object>> maps = AdminMenuTreeBuilder.toMapList(tree);
assertTrue(maps.get(0).get("key").equals("grp"));
assertFalse(maps.get(0).containsKey("route"), "分组虚拟 route 不输出为页面 route");
@SuppressWarnings("unchecked")
List<Map<String, Object>> children = (List<Map<String, Object>>) maps.get(0).get("children");
assertEquals("/records/history", children.get(0).get("route"));
}
@Test
void test_task_148_implement_normal_variant_input() {
assertEquals("/x/y", AdminMenuTreeBuilder.pageRouteOf(m(1L, null, "p", "x/y")));
}
@Test
void test_task_148_implement_repeated_is_idempotent() {
List<AdminMenuTreeBuilder.Node> tree = AdminMenuTreeBuilder.build(List.of(m(1L, null, "p", "a")));
assertEquals(AdminMenuTreeBuilder.toMapList(tree), AdminMenuTreeBuilder.toMapList(tree));
}
@Test
void test_task_148_implement_boundary_empty_input() {
assertTrue(AdminMenuTreeBuilder.toMapList(null).isEmpty());
assertTrue(AdminMenuTreeBuilder.toMapList(List.of()).isEmpty());
}
@Test
void test_task_148_implement_boundary_single_item() {
List<Map<String, Object>> maps = AdminMenuTreeBuilder.toMapList(
AdminMenuTreeBuilder.build(List.of(m(1L, null, "solo", "page/solo"))));
assertEquals("/page/solo", maps.get(0).get("route"));
}
@Test
void test_task_148_implement_boundary_limit_or_missing_field() {
List<Map<String, Object>> maps = AdminMenuTreeBuilder.toMapList(
AdminMenuTreeBuilder.build(List.of(m(1L, null, "solo", null))));
assertFalse(maps.get(0).containsKey("route"));
}
@Test
void test_task_148_implement_invalid_input_rejected() {
assertEquals("/ok", AdminMenuTreeBuilder.normalizeRoute("ok"));
}
@Test
void test_task_148_implement_dependency_failure_returns_actionable_message() {
assertTrue(AdminMenuTreeBuilder.isVirtualGroupRoute("group-g"));
}
}