package com.baiyue.lastleg.transfer; 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.assertTrue; class WarehouseTransferSchemaContractTest { @Test void baselineAndIncrementalContainTransferAndHistoricalOrderBindingTables() throws Exception { String baseline = Files.readString(Path.of("src", "main", "resources", "db", "lastleg.sql"), StandardCharsets.UTF_8).toLowerCase(); String migration = Files.readString(Path.of("..", "scripts", "db", "incremental.sql"), StandardCharsets.UTF_8).toLowerCase(); String deployment = Files.readString(Path.of("..", "deploy", "sql", "海外区域统一增量-MySQL8.sql"), StandardCharsets.UTF_8).toLowerCase(); for (String table : new String[]{"ll_warehouse_transfer_order", "ll_warehouse_transfer_source_order", "ll_warehouse_transfer_item", "ll_warehouse_transfer_inventory_allocation", "ll_warehouse_transfer_receipt"}) { assertTrue(baseline.contains("create table if not exists " + table)); assertTrue(migration.contains("create table if not exists " + table)); } assertTrue(migration.contains("information_schema.statistics")); assertTrue(migration.contains("uk_ll_wh_transfer_source")); assertTrue(migration.contains("uk_ll_wh_transfer_active_position")); assertTrue(migration.contains("uk_ll_wh_transfer_receipt_source")); assertTrue(baseline.contains("pickup_contact_name varchar(128) null")); assertTrue(baseline.contains("pickup_contact_phone varchar(64) null")); assertTrue(migration.contains("column_name='pickup_contact_name'")); assertTrue(migration.contains("column_name='pickup_contact_phone'")); assertTrue(baseline.contains("create table if not exists ll_warehouse_transfer_measurement_photo")); assertTrue(migration.contains("create table if not exists ll_warehouse_transfer_measurement_photo")); assertTrue(baseline.contains("received_package_count int null comment 'pda实际入库箱数'")); assertTrue(migration.contains("column_name='received_package_count'")); assertTrue(migration.contains("o.current_status='inbound_completed'")); for (String field : new String[]{"pickup_contact_name", "review_decision", "destination_type", "destination_binding_idempotency_key", "private_destination_address", "private_destination_postal_code", "draft_idempotency_key", "bind_idempotency_key"}) { assertTrue(deployment.contains(field), () -> "deployment SQL must include " + field); } for (String table : new String[]{"ll_warehouse_transfer_measurement_photo", "ll_inbound_plan_line", "ll_inbound_plan_pallet", "ll_dispatch_item", "ll_delivery_order"}) { assertTrue(deployment.contains(table), () -> "deployment SQL must include " + table); } assertTrue(deployment.contains("assert_relabel_transfer_latest_schema_ready")); assertTrue(deployment.contains("贴标申请与仓储转运最新表结构已完整部署")); } }