This commit is contained in:
wujinliang
2026-09-18 09:16:10 +08:00
181 changed files with 5959 additions and 1939 deletions
@@ -30,8 +30,9 @@ class DomesticWarehouseOrderExportPermissionSqlContractTest {
}
assertThat(iamSeed).contains("WHERE id IN (5102019, 5102024, 5102025, 5102026, 5102027)");
assertThat(unified)
.contains("WHERE id IN (5102019, 5102024, 5102025, 5102026, 5102027)")
.contains("管理员或订单运营角色缺少订单导出与下载中心权限");
.contains("VALUES (4000001,5102026,0,CURRENT_TIMESTAMP(3))")
.contains("VALUES (4000003,5102026,0,CURRENT_TIMESTAMP(3))")
.doesNotContain("管理员或订单运营角色缺少订单导出与下载中心权限");
}
private static Path resolve(String relative) {
@@ -99,13 +99,12 @@ class OrderDeclarationUpdateContractTest {
Path iam = Files.exists(iamDirect) ? iamDirect : Path.of("..").resolve(iamDirect);
String iamSource = Files.readString(iam, StandardCharsets.UTF_8);
assertThat(source)
.contains("expected_arrival_at DATETIME(3) NULL COMMENT '客户申报预计到货时间'")
.contains("channel_changed TINYINT(1) NOT NULL DEFAULT 0 COMMENT '订单历史上是否由平台变更过渠道'")
.contains("CALL unified_assert_column('baiyue_order', 'ord_order', 'expected_arrival_at')")
.contains("CALL unified_assert_column('baiyue_order', 'ord_order', 'channel_changed')")
assertThat(source.toLowerCase())
.contains("expected_arrival_at datetime(3) default null comment '客户申报预计到货时间'")
.contains("channel_changed tinyint(1) not null default '0' comment '订单历史上是否由平台变更过渠道'")
.contains("platform:order:declaration:edit")
.contains("WHERE id IN (5102019, 5102024, 5102025, 5102026, 5102027)");
.contains("values (4000001,5102027,0,current_timestamp(3))")
.contains("values (4000003,5102027,0,current_timestamp(3))");
assertThat(iamSource)
.contains("platform:order:declaration:edit")
.contains("WHERE id IN (5102019, 5102024, 5102025, 5102026, 5102027)");
@@ -38,12 +38,15 @@ class InboundCodeSequenceSqlContractTest {
String baseline = new ClassPathResource("db/order.sql").getContentAsString(StandardCharsets.UTF_8);
String unified = Files.readString(resolveUnified(), StandardCharsets.UTF_8);
assertThat(baseline)
.contains("CREATE TABLE IF NOT EXISTS ord_inbound_code_daily_sequence");
for (String sql : java.util.List.of(baseline, unified)) {
assertThat(sql)
.contains("CREATE TABLE IF NOT EXISTS ord_inbound_code_daily_sequence")
.contains("business_date DATE NOT NULL")
.contains("current_value BIGINT UNSIGNED NOT NULL")
.contains("PRIMARY KEY (business_date)")
assertThat(sql.toLowerCase())
.contains("create table")
.contains("ord_inbound_code_daily_sequence")
.contains("business_date date not null")
.contains("current_value bigint unsigned not null")
.contains("primary key (business_date)")
.contains("按上海日期重新从1开始");
}
}
@@ -47,19 +47,22 @@ class OrderParentChildSqlContractTest {
}
@Test
void unifiedEntryContainsTheExactOrderBlockBeforeFirstleg() throws Exception {
void unifiedEntryContainsTheFinalOrderParentChildSchemaAndTriggers() throws Exception {
String unified = read(resolve("deploy/sql/头程数据库统一增量-MySQL8.sql"));
String module = read(resolveModule()).trim();
String marker = "-- 来源:order/src/main/resources/db/phase3-order-parent-child-schema.sql";
String next = "-- 来源:firstleg/src/main/resources/db/phase3-inbound-parent-child-schema.sql";
int start = unified.indexOf(marker);
int end = unified.indexOf(next, start + marker.length());
assertThat(start).isGreaterThanOrEqualTo(0);
assertThat(end).isGreaterThan(start);
assertThat(unified.substring(start + marker.length(), end).trim()).startsWith(module);
assertThat(unified.lastIndexOf("SELECT 'PASS' AS migration_status"))
.isGreaterThan(end);
assertThat(unified)
.contains("CREATE TABLE ord_order_fulfillment_split")
.contains("source_order_id bigint unsigned NOT NULL")
.contains("request_hash char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL")
.contains("UNIQUE KEY uk_order_split_child_role (tenant_id,child_order_id,split_role)")
.contains("KEY idx_order_split_source (tenant_id,source_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("CREATE TRIGGER trg_order_fulfillment_split_update")
.contains("订单履约分片来源、子片与角色不可修改")
.contains("SELECT 'PASS' AS initialization_status, 'CN' AS region")
.doesNotContain("phase3_order_add_column")
.doesNotContain("phase3_order_add_index");
}
private static Path resolve(String path) {
@@ -20,18 +20,17 @@ class OrderPickupSqlContractTest {
}
@Test
void unifiedScriptRelaxesInboundCodeBeforeClearingDraftsAndAddsPickupColumn() throws Exception {
void unifiedScriptCreatesTheFinalPickupColumnsWithoutMigrationSteps() throws Exception {
Path direct = Path.of("deploy/sql/头程数据库统一增量-MySQL8.sql");
Path path = Files.exists(direct) ? direct : Path.of("../deploy/sql/头程数据库统一增量-MySQL8.sql");
String sql = Files.readString(path);
int relax = sql.indexOf("ALTER TABLE baiyue_order.ord_order MODIFY COLUMN inbound_code VARCHAR(40) NULL");
int clearDraft = sql.indexOf("SET inbound_code = NULL");
assertThat(relax).isGreaterThanOrEqualTo(0).isLessThan(clearDraft);
String sql = Files.readString(path).toLowerCase();
assertThat(sql).contains(
"column_name = 'requested_pickup_at'",
"ALTER TABLE baiyue_order.ord_order ADD COLUMN requested_pickup_at DATETIME(3) NULL",
"CREATE PROCEDURE assert_submitted_order_inbound_code()",
"SIGNAL SQLSTATE '45000'");
assertThat(sql).doesNotContain("CONCAT('RK-', o.id)");
"create table ord_order",
"inbound_code varchar(40) default null",
"requested_pickup_at datetime(3) default null");
assertThat(sql)
.doesNotContain("alter table baiyue_order.ord_order modify column inbound_code")
.doesNotContain("set inbound_code = null")
.doesNotContain("concat('rk-', o.id)");
}
}