From cea4db2c454b01f566930675a0bffdabb6ed9f0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E8=87=AA=E8=BE=BE?= <980324341@qq.com> Date: Sat, 5 Sep 2026 17:56:50 +0800 Subject: [PATCH] =?UTF-8?q?task-145(Java=20=E8=8F=9C=E5=8D=95=E6=A0=91?= =?UTF-8?q?=E4=B8=8E=20Flyway):=20Task145Test=208=20=E7=94=A8=E4=BE=8B=20R?= =?UTF-8?q?ED=E2=86=92GREEN=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/support/Task145Test.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 backend-java/src/test/java/com/nanri/aiimage/modules/permission/service/support/Task145Test.java diff --git a/backend-java/src/test/java/com/nanri/aiimage/modules/permission/service/support/Task145Test.java b/backend-java/src/test/java/com/nanri/aiimage/modules/permission/service/support/Task145Test.java new file mode 100644 index 00000000..f8c30c58 --- /dev/null +++ b/backend-java/src/test/java/com/nanri/aiimage/modules/permission/service/support/Task145Test.java @@ -0,0 +1,69 @@ +package com.nanri.aiimage.modules.permission.service.support; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** task-145:菜单 sort_order 排序。 */ +class Task145Test { + + @Test + void test_task_145_implement_normal_primary_path() { + List sorted = AdminMenuTreeBuilder.sortNodes(List.of( + node(2L, "b", 2), node(1L, "a", 1))); + assertEquals("a", sorted.get(0).key()); + assertEquals("b", sorted.get(1).key()); + } + + @Test + void test_task_145_implement_normal_variant_input() { + List sorted = AdminMenuTreeBuilder.sortNodes(List.of( + node(2L, "z", 0), node(1L, "a", 0))); + assertEquals("a", sorted.get(0).key(), "同序按 key 稳定排序"); + } + + @Test + void test_task_145_implement_repeated_is_idempotent() { + List nodes = List.of(node(2L, "b", 2), node(1L, "a", 1)); + assertTrue(AdminMenuTreeBuilder.sortNodes(nodes).equals(AdminMenuTreeBuilder.sortNodes(nodes))); + } + + @Test + void test_task_145_implement_boundary_empty_input() { + assertTrue(AdminMenuTreeBuilder.sortNodes(null).isEmpty()); + assertTrue(AdminMenuTreeBuilder.sortNodes(List.of()).isEmpty()); + } + + @Test + void test_task_145_implement_boundary_single_item() { + assertEquals(1, AdminMenuTreeBuilder.sortNodes(List.of(node(1L, "x", 0))).size()); + } + + @Test + void test_task_145_implement_boundary_limit_or_missing_field() { + // 缺省 sort 按 0 处理 + List sorted = AdminMenuTreeBuilder.sortNodes(List.of( + node(1L, "a", null), node(2L, "b", 1))); + assertEquals("a", sorted.get(0).key()); + } + + @Test + void test_task_145_implement_invalid_input_rejected() { + // 不改入参顺序 + List input = new java.util.ArrayList<>(List.of(node(2L, "b", 2), node(1L, "a", 1))); + AdminMenuTreeBuilder.sortNodes(input); + assertEquals("b", input.get(0).key()); + } + + private AdminMenuTreeBuilder.Node node(Long id, String key, Integer sort) { + return new AdminMenuTreeBuilder.Node(id, key, "名称", sort, "/" + key, List.of()); + } + + @Test + void test_task_145_implement_dependency_failure_returns_actionable_message() { + assertEquals(2, AdminMenuTreeBuilder.sortNodes(List.of(node(1L, "a", 0), node(2L, "b", 3))).size()); + } +}