diff --git a/backend-java/src/test/java/com/nanri/aiimage/modules/permission/service/support/Task146Test.java b/backend-java/src/test/java/com/nanri/aiimage/modules/permission/service/support/Task146Test.java new file mode 100644 index 00000000..8f955f9c --- /dev/null +++ b/backend-java/src/test/java/com/nanri/aiimage/modules/permission/service/support/Task146Test.java @@ -0,0 +1,67 @@ +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.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** task-146:空父节点/脏数据处理(孤儿检测)。 */ +class Task146Test { + + private PermissionMenuItemVo m(Long id, Long parent) { + PermissionMenuItemVo vo = new PermissionMenuItemVo(); + vo.setId(id); + vo.setParentId(parent); + vo.setColumnKey("k" + id); + vo.setMenuType("admin"); + return vo; + } + + @Test + void test_task_146_implement_normal_primary_path() { + assertFalse(AdminMenuTreeBuilder.hasOrphanParent(List.of(m(1L, null), m(2L, 1L)))); + } + + @Test + void test_task_146_implement_normal_variant_input() { + assertTrue(AdminMenuTreeBuilder.hasOrphanParent(List.of(m(1L, null), m(2L, 99L)))); + } + + @Test + void test_task_146_implement_repeated_is_idempotent() { + List menus = List.of(m(1L, null), m(2L, 99L)); + assertTrue(AdminMenuTreeBuilder.hasOrphanParent(menus) == AdminMenuTreeBuilder.hasOrphanParent(menus)); + } + + @Test + void test_task_146_implement_boundary_empty_input() { + assertFalse(AdminMenuTreeBuilder.hasOrphanParent(null)); + assertFalse(AdminMenuTreeBuilder.hasOrphanParent(List.of())); + } + + @Test + void test_task_146_implement_boundary_single_item() { + assertFalse(AdminMenuTreeBuilder.hasOrphanParent(List.of(m(1L, null)))); + } + + @Test + void test_task_146_implement_boundary_limit_or_missing_field() { + // null 项忽略 + assertFalse(AdminMenuTreeBuilder.hasOrphanParent(Arrays.asList((PermissionMenuItemVo) null))); + } + + @Test + void test_task_146_implement_invalid_input_rejected() { + assertTrue(AdminMenuTreeBuilder.hasOrphanParent(List.of(m(1L, null), m(2L, 3L), m(3L, 4L)))); + } + + @Test + void test_task_146_implement_dependency_failure_returns_actionable_message() { + // 发现脏数据可由调用方记录并阻止上线 + assertTrue(AdminMenuTreeBuilder.hasOrphanParent(List.of(m(1L, 8L)))); + } +}