package com.baiyue.lastleg.inboundplan; import com.baiyue.lastleg.inboundplan.dto.ManualInboundPlanRequest; import org.junit.jupiter.api.Test; import java.nio.charset.StandardCharsets; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; class TailPlanCommandOpenApiContractTest { @Test void exposesOnlyLatestManualPlanHoldAndEightRowNodeContracts() throws Exception { try (var stream = getClass().getClassLoader() .getResourceAsStream("openapi/overseas-business-v1.yaml")) { assertTrue(stream != null); String api = new String(stream.readAllBytes(), StandardCharsets.UTF_8); assertTrue(api.contains("/api/platform/v1/last-leg/inbound-plans/manual:")); assertFalse(api.contains("/api/platform/v1/last-leg/inbound-plans/convert:")); assertFalse(api.contains("plannedWarehouseId")); assertFalse(api.contains("plannedWarehouseCode")); assertFalse(api.contains("plannedWarehouseName")); int manualSchemaStart = api.indexOf(" ManualInboundPlanRequest:"); int manualSchemaEnd = api.indexOf("\n PageMetadata:", manualSchemaStart); assertTrue(manualSchemaStart >= 0 && manualSchemaEnd > manualSchemaStart); assertFalse(api.substring(manualSchemaStart, manualSchemaEnd).contains("inboundCode")); assertFalse(api.substring(manualSchemaStart, manualSchemaEnd).contains("plannedArrivalDate")); assertFalse(java.util.Arrays.stream(ManualInboundPlanRequest.class.getRecordComponents()) .anyMatch(component -> java.util.Set.of("inboundCode", "plannedArrivalDate") .contains(component.getName()))); assertTrue(api.contains("/api/platform/v1/last-leg/orders/{id}/hold:")); assertFalse(api.contains("/api/platform/v1/last-leg/orders/{id}/detained:")); assertTrue(api.contains("/api/platform/v1/last-leg/orders/{id}/manual-nodes:")); assertTrue(api.contains("minItems: 8")); assertTrue(api.contains("maxItems: 8")); assertTrue(api.contains("ACTUAL_ARRIVAL_WAITING_UNLOAD")); } } }