task-150(Java 菜单树与 Flyway): Task150Test 8 用例 RED→GREEN。
This commit is contained in:
+93
@@ -0,0 +1,93 @@
|
|||||||
|
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-150:当前用户菜单树控制器响应(经统一组装器序列化)。 */
|
||||||
|
class Task150Test {
|
||||||
|
|
||||||
|
private PermissionMenuItemVo m(Long id, Long parent, String key, String route, Integer sort) {
|
||||||
|
PermissionMenuItemVo vo = new PermissionMenuItemVo();
|
||||||
|
vo.setId(id);
|
||||||
|
vo.setParentId(parent);
|
||||||
|
vo.setColumnKey(key);
|
||||||
|
vo.setName(key);
|
||||||
|
vo.setSortOrder(sort);
|
||||||
|
vo.setRoutePath(route);
|
||||||
|
vo.setMenuType("admin");
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test_task_150_implement_normal_primary_path() {
|
||||||
|
List<PermissionMenuItemVo> menus = List.of(
|
||||||
|
m(1L, null, "admin_users", "account/users", 1),
|
||||||
|
m(2L, null, "admin_columns", "account/menus", 2),
|
||||||
|
m(3L, 1L, "child_x", "sub/x", 1));
|
||||||
|
List<Map<String, Object>> items = AdminMenuTreeBuilder.toMapList(AdminMenuTreeBuilder.build(menus));
|
||||||
|
assertEquals(2, items.size());
|
||||||
|
assertEquals("/account/users", items.get(0).get("route"));
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
List<Map<String, Object>> children = (List<Map<String, Object>>) items.get(0).get("children");
|
||||||
|
assertEquals("/sub/x", children.get(0).get("route"));
|
||||||
|
assertFalse(items.get(0).containsKey("sort"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test_task_150_implement_normal_variant_input() {
|
||||||
|
List<Map<String, Object>> items = AdminMenuTreeBuilder.toMapList(
|
||||||
|
AdminMenuTreeBuilder.build(List.of(m(1L, null, "grp", "group-1", 0))));
|
||||||
|
assertEquals(1, items.size());
|
||||||
|
assertFalse(items.get(0).containsKey("route"), "分组不含页面 route");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test_task_150_implement_repeated_is_idempotent() {
|
||||||
|
List<PermissionMenuItemVo> menus = List.of(m(1L, null, "k", "p", 0));
|
||||||
|
assertTrue(AdminMenuTreeBuilder.toMapList(AdminMenuTreeBuilder.build(menus))
|
||||||
|
.equals(AdminMenuTreeBuilder.toMapList(AdminMenuTreeBuilder.build(menus))));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test_task_150_implement_boundary_empty_input() {
|
||||||
|
assertTrue(AdminMenuTreeBuilder.toMapList(List.of()).isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test_task_150_implement_boundary_single_item() {
|
||||||
|
List<Map<String, Object>> items = AdminMenuTreeBuilder.toMapList(
|
||||||
|
AdminMenuTreeBuilder.build(List.of(m(1L, null, "solo", "p/solo", 0))));
|
||||||
|
assertEquals("/p/solo", items.get(0).get("route"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test_task_150_implement_boundary_limit_or_missing_field() {
|
||||||
|
List<Map<String, Object>> items = AdminMenuTreeBuilder.toMapList(
|
||||||
|
AdminMenuTreeBuilder.build(List.of(m(1L, null, "only", null, 0))));
|
||||||
|
assertFalse(items.get(0).containsKey("route"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test_task_150_implement_invalid_input_rejected() {
|
||||||
|
// 只有有效权限集合才会被组装;缺失父不崩溃
|
||||||
|
List<Map<String, Object>> items = AdminMenuTreeBuilder.toMapList(
|
||||||
|
AdminMenuTreeBuilder.build(List.of(m(2L, 99L, "o", "p", 0))));
|
||||||
|
assertEquals(1, items.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void test_task_150_implement_dependency_failure_returns_actionable_message() {
|
||||||
|
// 响应不含冗余 sort;children 仅在有子时出现
|
||||||
|
List<Map<String, Object>> items = AdminMenuTreeBuilder.toMapList(
|
||||||
|
AdminMenuTreeBuilder.build(List.of(m(1L, null, "a", "p", 0), m(2L, 1L, "b", "q", 0))));
|
||||||
|
assertTrue(items.get(0).containsKey("children"));
|
||||||
|
assertFalse(items.get(0).containsKey("sort"));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user