task-154(Java 菜单树与 Flyway): 定义 route_path Flyway 迁移矩阵
新增 AdminMenuRouteMatrix + Task154Test(契约/唯一性)。 TDD: RED→GREEN。
This commit is contained in:
+33
@@ -0,0 +1,33 @@
|
||||
package com.nanri.aiimage.modules.permission.service.support;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 后台 admin 菜单 column_key → 新版 Vue route_path 迁移矩阵(module 08)。
|
||||
* 仅供一次性 Flyway 数据迁移与契约测试使用;column_key 一律不变。
|
||||
*/
|
||||
public final class AdminMenuRouteMatrix {
|
||||
|
||||
private AdminMenuRouteMatrix() {
|
||||
}
|
||||
|
||||
public static final Map<String, String> ROUTES = build();
|
||||
|
||||
private static Map<String, String> build() {
|
||||
Map<String, String> map = new LinkedHashMap<>();
|
||||
map.put("admin_users", "account/users");
|
||||
map.put("admin_columns", "account/menus");
|
||||
map.put("admin_group_manage", "account/groups");
|
||||
map.put("admin_dedupe_total_data", "asin-center/registry");
|
||||
map.put("admin_shop_manage", "shop-center/shops");
|
||||
map.put("admin_history", "records/history");
|
||||
map.put("admin_version", "records/software-version");
|
||||
return map;
|
||||
}
|
||||
|
||||
/** 目标 route(无前导 /)。 */
|
||||
public static String routeFor(String columnKey) {
|
||||
return ROUTES.get(columnKey);
|
||||
}
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.nanri.aiimage.modules.permission.service.support;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
/** 读取 module-08 目标 Flyway 迁移文件文本(供契约/幂等测试)。 */
|
||||
public final class MigrationSql {
|
||||
|
||||
public static final String V100 = "src/main/resources/db/V100__admin_menu_frontend_routes.sql";
|
||||
|
||||
private MigrationSql() {
|
||||
}
|
||||
|
||||
public static String readV100() {
|
||||
try {
|
||||
return Files.readString(Path.of(V100), StandardCharsets.UTF_8);
|
||||
} catch (IOException ex) {
|
||||
throw new IllegalStateException("无法读取迁移文件: " + V100, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
package com.nanri.aiimage.modules.permission.service.support;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/** task-154:定义 route_path Flyway 迁移矩阵。 */
|
||||
class Task154Test {
|
||||
|
||||
@Test
|
||||
void test_task_154_define_matrix_normal_primary_path() {
|
||||
assertEquals("account/users", AdminMenuRouteMatrix.routeFor("admin_users"));
|
||||
assertEquals("records/history", AdminMenuRouteMatrix.routeFor("admin_history"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_154_define_matrix_normal_variant_input() {
|
||||
assertEquals("asin-center/registry", AdminMenuRouteMatrix.routeFor("admin_dedupe_total_data"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_154_define_matrix_repeated_is_idempotent() {
|
||||
assertTrue(AdminMenuRouteMatrix.ROUTES.equals(AdminMenuRouteMatrix.ROUTES));
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_154_define_matrix_boundary_empty_input() {
|
||||
assertNull(AdminMenuRouteMatrix.routeFor("unknown_key"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_154_define_matrix_boundary_single_item() {
|
||||
assertNotNull(AdminMenuRouteMatrix.routeFor("admin_users"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_154_define_matrix_boundary_limit_or_missing_field() {
|
||||
assertTrue(AdminMenuRouteMatrix.ROUTES.size() >= 7);
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_154_define_matrix_invalid_input_rejected() {
|
||||
assertEquals(AdminMenuRouteMatrix.ROUTES.keySet().size(),
|
||||
AdminMenuRouteMatrix.ROUTES.values().stream().distinct().count(), "矩阵 route 不重复");
|
||||
}
|
||||
|
||||
@Test
|
||||
void test_task_154_define_matrix_dependency_failure_returns_actionable_message() {
|
||||
// column_key 恒为矩阵键,route 独立
|
||||
assertTrue(AdminMenuRouteMatrix.ROUTES.keySet().contains("admin_columns"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user