fix: order lastleg delivery baseline for clean database

This commit is contained in:
2026-09-01 16:18:38 +08:00
parent a8f8ff2b6d
commit c319986738
2 changed files with 81 additions and 12 deletions
@@ -12,6 +12,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -36,6 +37,38 @@ class DeliverySchemaContractTest {
assertTrue(schema.contains("unique key uk_ll_delivery_outbound (customer_id,outbound_order_id)"));
}
@Test
void cleanDatabaseCreatesTheCompleteDeliveryTableBeforeEveryDependency() throws Exception {
String schema = Files.readString(Path.of("src/main/resources/db/lastleg.sql"), StandardCharsets.UTF_8)
.toLowerCase();
String createToken = "create table if not exists ll_delivery_order";
int create = schema.indexOf(createToken);
int firstReference = schema.indexOf("ll_delivery_order");
int createEnd = schema.indexOf(';', create);
assertTrue(create >= 0);
assertEquals(create + "create table if not exists ".length(), firstReference);
assertEquals(1, count(schema, createToken));
assertTrue(createEnd > create);
String definition = schema.substring(create, createEnd);
for (String column : new String[] {
"overseas_warehouse_name", "customer_name", "waybill_no", "delivery_method",
"carrier_name", "pickup_method", "loading_type", "vehicle_type", "vehicle_size",
"vehicle_plate", "driver_name", "driver_phone", "appointment_account", "seller_name",
"total_weight_kg", "total_volume_cbm", "planned_delivery_at", "dispatched_at",
"expected_arrival_at", "signed_at", "remark"
}) {
assertTrue(definition.contains(column), column);
}
assertTrue(schema.indexOf("alter table ll_delivery_order", createEnd) > createEnd);
String overseas = Files.readString(Path.of("..", "deploy", "sql", "海外区域统一增量-MySQL8.sql"),
StandardCharsets.UTF_8).toLowerCase();
assertTrue(overseas.contains("空库先执行 lastleg-service/src/main/resources/db/lastleg.sql 基线"));
assertFalse(overseas.contains(createToken));
assertFalse(overseas.contains("alter table ll_delivery_order"));
}
@Test
void deliveryPersistenceEntitiesUseSnowflakeIds() throws Exception {
for (Class<?> type : new Class<?>[] { OutboundOrder.class, OutboundPalletItem.class, DeliveryOrder.class }) {
@@ -55,4 +88,8 @@ class DeliverySchemaContractTest {
assertTrue(migration.contains("create table if not exists ll_outbound_pallet_item"));
assertTrue(migration.contains("create table if not exists ll_delivery_order"));
}
private static int count(String source, String token) {
return source.split(java.util.regex.Pattern.quote(token), -1).length - 1;
}
}