59 lines
3.1 KiB
Java
59 lines
3.1 KiB
Java
package com.baiyue.lastleg.delivery;
|
|||
|
|
|
||
|
|
import com.baiyue.lastleg.delivery.entity.DeliveryOrder;
|
||
|
|
import com.baiyue.lastleg.delivery.entity.OutboundOrder;
|
||
|
|
import com.baiyue.lastleg.delivery.entity.OutboundPalletItem;
|
||
|
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||
|
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||
|
|
import org.junit.jupiter.api.Test;
|
||
|
|
|
||
|
|
import java.nio.charset.StandardCharsets;
|
||
|
|
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.assertNotNull;
|
||
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||
|
|
|
||
|
|
class DeliverySchemaContractTest {
|
||
|
|
@Test
|
||
|
|
void baselineDefinesOutboundPalletsAndDeliveryContracts() throws Exception {
|
||
|
|
String schema = Files.readString(Path.of("src/main/resources/db/lastleg.sql"), StandardCharsets.UTF_8)
|
||
|
|
.toLowerCase();
|
||
|
|
|
||
|
|
assertTrue(schema.contains("create table if not exists ll_outbound_order"));
|
||
|
|
assertTrue(schema.contains("status varchar(32) not null default 'wait_outbound'"));
|
||
|
|
assertTrue(schema.contains("unique key uk_ll_outbound_idempotency (customer_id,idempotency_key)"));
|
||
|
|
assertTrue(schema.contains("unique key uk_ll_outbound_dispatch (customer_id,dispatch_order_id)"));
|
||
|
|
assertTrue(schema.contains("create table if not exists ll_outbound_pallet_item"));
|
||
|
|
assertTrue(schema.contains("unique key uk_ll_outbound_pallet (customer_id,outbound_order_id,warehouse_pallet_id)"));
|
||
|
|
assertTrue(schema.contains("destination_warehouse_code varchar(128) null"));
|
||
|
|
assertTrue(schema.contains("order_refs varchar(2000) null"));
|
||
|
|
assertTrue(schema.contains("inbound_code varchar(128) null"));
|
||
|
|
assertTrue(schema.contains("create table if not exists ll_delivery_order"));
|
||
|
|
assertTrue(schema.contains("status varchar(32) not null default 'wait_delivery'"));
|
||
|
|
assertTrue(schema.contains("unique key uk_ll_delivery_idempotency (customer_id,idempotency_key)"));
|
||
|
|
assertTrue(schema.contains("unique key uk_ll_delivery_outbound (customer_id,outbound_order_id)"));
|
||
|
|
}
|
||
|
|
|
||
|
|
@Test
|
||
|
|
void deliveryPersistenceEntitiesUseSnowflakeIds() throws Exception {
|
||
|
|
for (Class<?> type : new Class<?>[] { OutboundOrder.class, OutboundPalletItem.class, DeliveryOrder.class }) {
|
||
|
|
TableId id = type.getDeclaredField("id").getAnnotation(TableId.class);
|
||
|
|
assertNotNull(id, type.getSimpleName());
|
||
|
|
assertEquals(IdType.ASSIGN_ID, id.type(), type.getSimpleName());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@Test
|
||
|
|
void incrementalMigrationAddsTransferTablesAndIsRerunnable() throws Exception {
|
||
|
|
String migration = Files.readString(Path.of("..", "scripts", "db", "incremental.sql"), StandardCharsets.UTF_8)
|
||
|
|
.toLowerCase();
|
||
|
|
|
||
|
|
assertTrue(migration.contains("2026-08-17 / 014"));
|
||
|
|
assertTrue(migration.contains("create table if not exists ll_outbound_order"));
|
||
|
|
assertTrue(migration.contains("create table if not exists ll_outbound_pallet_item"));
|
||
|
|
assertTrue(migration.contains("create table if not exists ll_delivery_order"));
|
||
|
|
}
|
||
|
|
}
|