fix(sql): make domestic migration replay-safe

This commit is contained in:
2026-09-10 20:19:11 +08:00
parent 2b73245c96
commit 69e80a736e
5 changed files with 154 additions and 30 deletions
@@ -115,6 +115,9 @@ class CustomerDimensionConfigSqlContractTest {
.contains("r.role_code = 'ORDER_OPERATOR'")
.contains("index_name = 'uk_customer_dimension_config_tenant_box'")
.contains("客户四箱规尺寸配置字段不完整")
.contains("客户默认计费规则初始化幂等字段未创建")
.contains("index_name = 'idx_charge_rule_initialization'")
.contains("客户默认计费规则初始化索引未完整创建")
.contains("客户尺寸计算配置权限码、固定ID或父节点不正确");
}
@@ -188,7 +188,8 @@ class Phase3FinalUnifiedSqlContractTest {
assertThat(sql)
.contains("CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_fee_detail', 'supplier_id'")
.contains("CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_fee_detail', 'supplier_name'")
.contains("CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_fee_detail', 'supplier_category'");
.contains("CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_fee_detail', 'supplier_category'")
.contains("CALL queue_column_comment('baiyue_firstleg', 'fl_carrier_schedule_node_fact', 'container_booking_id'");
assertThat(sql.indexOf("CALL apply_queued_comments();",
sql.indexOf("-- END GENERATED NINE-SCHEMA COMMENT UPGRADE CALLS")))
.isGreaterThan(sql.indexOf("-- END GENERATED NINE-SCHEMA COMMENT UPGRADE CALLS"));
@@ -18,14 +18,14 @@ import static org.assertj.core.api.Assertions.assertThat;
class SmartLoadingSqlContractTest {
private static final Pattern PERMISSION_PATTERN = Pattern.compile("'((?:platform:firstleg:)[^']+)'");
private static final Set<String> PHASE3_PERMISSIONS = Set.of(
"platform:firstleg:container:list", "platform:firstleg:container:view",
"platform:firstleg:container:list",
"platform:firstleg:container:create", "platform:firstleg:container:edit",
"platform:firstleg:smart-loading:list",
"platform:firstleg:smart-loading:assign", "platform:firstleg:smart-loading:delete",
"platform:firstleg:preload:list",
"platform:firstleg:preload:view", "platform:firstleg:preload:edit",
"platform:firstleg:preload:edit",
"platform:firstleg:preload:complete", "platform:firstleg:preload:confirm",
"platform:firstleg:loading-list:list", "platform:firstleg:loading-list:view");
"platform:firstleg:loading-list:list");
@Test
@DisplayName("平台聚合与客户明细边界及原型快照字段完整")
@@ -193,7 +193,7 @@ class SmartLoadingSqlContractTest {
}
@Test
@DisplayName("模块脚本和统一脚本均校验14项权限与两个角色28项授权")
@DisplayName("模块脚本和统一脚本均校验11项权限与两个角色22项授权")
void shouldAssertCompletePermissionGrants() throws Exception {
assertPermissionContract(migration());
assertPermissionContract(unifiedMigration());
@@ -238,6 +238,8 @@ class SmartLoadingSqlContractTest {
.doesNotContain("WITHDRAWN");
assertLoadingCompletionTrigger(migration());
assertLoadingCompletionTrigger(unifiedMigration());
assertThat(unifiedMigration().indexOf("CALL phase3_add_container_channel_group()"))
.isLessThan(unifiedMigration().indexOf("CREATE TRIGGER trg_container_booking_before_update"));
}
private static void assertLoadingCompletionTrigger(String sql) {
@@ -266,6 +268,8 @@ class SmartLoadingSqlContractTest {
assertThat(migration())
.contains("CREATE TABLE IF NOT EXISTS fl_loading_pick_task")
.contains("CALL migrate_legacy_loading_pick_task()")
.contains("source_total_columns = 13 AND source_current_columns = 13")
.contains("index_name = 'uk_loading_pick_task_booking'")
.contains("RENAME TABLE fl_loading_pick_task TO fl_inbound_loading_pick_task")
.contains("CREATE TABLE IF NOT EXISTS fl_loading_pick_item")
.contains("CREATE TABLE IF NOT EXISTS fl_loading_pick_history")
@@ -371,7 +375,7 @@ class SmartLoadingSqlContractTest {
int assertionStart = sql.lastIndexOf("IF (SELECT COUNT(DISTINCT CONCAT", message);
String assertion = sql.substring(assertionStart, message);
assertThat(permissions(assertion)).isEqualTo(PHASE3_PERMISSIONS);
assertThat(assertion).contains("<> 28 THEN");
assertThat(assertion).contains("<> 22 THEN");
}
private static Set<String> permissions(String sql) {