68 lines
3.8 KiB
Java
68 lines
3.8 KiB
Java
package com.baiyue.lastleg.trucking;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
class UsTruckOrderSchemaContractTest {
|
|
@Test
|
|
void baselineContainsOrderAndImmutableHistoryTables() throws Exception {
|
|
String sql;
|
|
try (var input = getClass().getResourceAsStream("/db/lastleg.sql")) {
|
|
sql = new String(input.readAllBytes(), StandardCharsets.UTF_8);
|
|
}
|
|
assertTrue(sql.contains("CREATE TABLE IF NOT EXISTS ll_us_truck_order"));
|
|
assertTrue(sql.contains("CREATE TABLE IF NOT EXISTS ll_us_truck_order_status_history"));
|
|
assertTrue(sql.contains("CREATE TABLE IF NOT EXISTS ll_us_truck_order_pallet"));
|
|
assertTrue(sql.contains("pallet_count INT NOT NULL DEFAULT 0"));
|
|
assertTrue(sql.contains("received_pallet_count INT NOT NULL DEFAULT 0"));
|
|
assertTrue(sql.contains("allocated_pallet_count INT NOT NULL DEFAULT 0"));
|
|
assertTrue(sql.contains("CREATE TABLE IF NOT EXISTS ll_us_truck_order_operation"));
|
|
assertTrue(sql.contains("UNIQUE KEY uk_ll_us_truck_operation_key(customer_id,order_id,idempotency_key)"));
|
|
assertTrue(sql.contains("operation_type VARCHAR(64) NOT NULL"));
|
|
assertTrue(sql.contains("idempotency_key VARCHAR(255) NULL COMMENT '操作幂等键'"));
|
|
assertTrue(sql.contains("UNIQUE KEY uk_ll_us_truck_order_key(customer_id,idempotency_key)"));
|
|
assertTrue(sql.contains("KEY idx_ll_us_truck_history(customer_id,order_id,created_at)"));
|
|
}
|
|
|
|
@Test
|
|
void unifiedInitializationContainsOperationLedgerAndHistoryColumns() throws Exception {
|
|
String sql = Files.readString(Path.of("..", "deploy", "sql", "海外区域统一增量-MySQL8.sql"),
|
|
StandardCharsets.UTF_8);
|
|
String lower = sql.toLowerCase();
|
|
String normalized = lower.replaceAll("\\s+", "");
|
|
assertTrue(lower.contains("create table ll_us_truck_order_operation"));
|
|
assertTrue(normalized.contains("uk_ll_us_truck_operation_key(customer_id,order_id,idempotency_key)"));
|
|
String history = tableBlock(lower, "ll_us_truck_order_status_history");
|
|
assertTrue(history.contains("operation_type varchar(64)"));
|
|
assertTrue(history.contains("idempotency_key varchar(255)"));
|
|
org.junit.jupiter.api.Assertions.assertFalse(lower.contains("alter table ll_us_truck_order_status_history"));
|
|
}
|
|
|
|
private static String tableBlock(String sql, String table) {
|
|
int start = sql.indexOf("create table " + table + " (");
|
|
int end = sql.indexOf(';', start);
|
|
return start < 0 || end < 0 ? "" : sql.substring(start, end);
|
|
}
|
|
|
|
@Test
|
|
void newTruckDemandFieldsExistAndRemovedInputsAreAbsentInBothBaselines() throws Exception {
|
|
String baseline;
|
|
try (var input = getClass().getResourceAsStream("/db/lastleg.sql")) {
|
|
baseline = new String(input.readAllBytes(), StandardCharsets.UTF_8);
|
|
}
|
|
String unified = Files.readString(Path.of("..", "deploy", "sql", "海外区域统一增量-MySQL8.sql"), StandardCharsets.UTF_8);
|
|
for (String sql : java.util.List.of(baseline, unified)) {
|
|
String normalized = sql.toLowerCase().replace("create table if not exists", "create table");
|
|
String block = tableBlock(normalized, "ll_us_truck_order");
|
|
for (String column : java.util.List.of("vehicle_type", "origin_contact_name", "origin_contact_phone", "destination_contact_name", "destination_contact_phone", "pickup_at", "delivery_at")) assertTrue(block.contains(column));
|
|
for (String removed : java.util.List.of("transport_type", "container_type", "requested_date")) org.junit.jupiter.api.Assertions.assertFalse(block.contains(removed));
|
|
|
|
}
|
|
}
|
|
}
|