test(order): guard cross-role fulfillment split uniqueness
This commit is contained in:
@@ -17,16 +17,35 @@ class OrderParentChildSqlContractTest {
|
||||
assertThat(sql)
|
||||
.contains("source_order_id BIGINT UNSIGNED NOT NULL")
|
||||
.contains("KEY idx_order_split_source (tenant_id,source_order_id,split_role)")
|
||||
.contains("DROP INDEX uk_order_split_child")
|
||||
.contains("uk_order_split_child_role")
|
||||
.contains("UNIQUE KEY `uk_order_split_child_role` (`tenant_id`,`child_order_id`,`split_role`)")
|
||||
.contains("NEW.split_role='LOADED' AND NEW.child_order_id<>NEW.source_order_id")
|
||||
.contains("实装台账必须由来源订单自身承接")
|
||||
.contains("订单履约分片来源、子片与角色不可修改")
|
||||
.contains("MODIFY source_order_id BIGINT UNSIGNED NOT NULL")
|
||||
.contains("MODIFY request_hash CHAR(64) NOT NULL")
|
||||
.contains("UPDATE ord_order_fulfillment_split")
|
||||
.contains("SHA2(CONCAT('LEGACY:', tenant_id, ':', id), 256)");
|
||||
assertThat(sql).doesNotContain("UNIQUE KEY uk_order_split_child (tenant_id,child_order_id)");
|
||||
assertThat(sql.lastIndexOf("DROP PROCEDURE IF EXISTS phase3_order_add_column"))
|
||||
.isGreaterThan(sql.lastIndexOf("CALL phase3_order_add_column"));
|
||||
assertThat(sql.lastIndexOf("DROP PROCEDURE IF EXISTS phase3_order_add_index"))
|
||||
.isGreaterThan(sql.lastIndexOf("CALL phase3_order_add_index"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void baselineAllowsOneChildAcrossDifferentRolesButRejectsDuplicateRole() throws Exception {
|
||||
String baseline = read(resolve("order/src/main/resources/db/order.sql"));
|
||||
|
||||
assertThat(baseline)
|
||||
.contains("UNIQUE KEY uk_order_split_child_role (tenant_id, child_order_id, split_role)")
|
||||
.contains("CREATE TRIGGER trg_order_fulfillment_split_insert")
|
||||
.contains("NEW.split_role='LOADED' AND NEW.child_order_id<>NEW.source_order_id")
|
||||
.contains("NEW.split_role='REMAINDER'")
|
||||
.doesNotContain("UNIQUE KEY uk_order_split_child (tenant_id, child_order_id)");
|
||||
}
|
||||
|
||||
@Test
|
||||
void unifiedEntryContainsTheExactOrderBlockBeforeFirstleg() throws Exception {
|
||||
String unified = read(resolve("deploy/sql/头程数据库统一增量-MySQL8.sql"));
|
||||
|
||||
@@ -36,10 +36,14 @@ class OrderFulfillmentSplitContractTest {
|
||||
.contains("source_order_id BIGINT UNSIGNED NOT NULL")
|
||||
.contains("MODIFY source_order_id BIGINT UNSIGNED NOT NULL")
|
||||
.contains("MODIFY request_hash CHAR(64) NOT NULL")
|
||||
.contains("idx_order_split_source");
|
||||
.contains("idx_order_split_source")
|
||||
.contains("uk_order_split_child_role")
|
||||
.contains("NEW.split_role='LOADED' AND NEW.child_order_id<>NEW.source_order_id");
|
||||
assertThat(baseline)
|
||||
.contains("source_order_id BIGINT UNSIGNED NOT NULL")
|
||||
.contains("KEY idx_order_split_source (tenant_id, source_order_id, split_role)");
|
||||
.contains("KEY idx_order_split_source (tenant_id, source_order_id, split_role)")
|
||||
.contains("UNIQUE KEY uk_order_split_child_role (tenant_id, child_order_id, split_role)")
|
||||
.doesNotContain("UNIQUE KEY uk_order_split_child (tenant_id, child_order_id)");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user