Files
baiyue-firstleg/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/TailPlanCommandOpenApiContractTest.java
T

68 lines
4.3 KiB
Java

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 previewDocumentsTheOriginalResourceRetrySeparatelyFromItsCurrentSnapshot() throws Exception {
try (var stream = getClass().getClassLoader().getResourceAsStream("openapi/overseas-business-v1.yaml")) {
java.util.Map<?, ?> document = new org.yaml.snakeyaml.Yaml().load(stream);
var components = (java.util.Map<?, ?>) document.get("components");
var schemas = (java.util.Map<?, ?>) components.get("schemas");
var preview = (java.util.Map<?, ?>) schemas.get("ContainerInboundPlanPreview");
var properties = (java.util.Map<?, ?>) preview.get("properties");
var retry = (java.util.Map<?, ?>) properties.get("resourceRetry");
org.junit.jupiter.api.Assertions.assertEquals(true, retry.get("nullable"));
org.junit.jupiter.api.Assertions.assertEquals(java.util.List.of("idempotencyKey", "snapshotVersion", "snapshotHash"), retry.get("required"));
assertTrue(properties.containsKey("snapshotVersion") && properties.containsKey("snapshotHash"));
}
}
@Test
void platformPreviewUsesTheCoordinatorThatCanRestorePendingResources() {
var controller = new com.baiyue.lastleg.inboundplan.controller.InboundPlanController();
var coordinator = org.mockito.Mockito.mock(com.baiyue.lastleg.inboundplan.service.ContainerInboundPlanConversionCoordinator.class);
var principal = org.mockito.Mockito.mock(com.baiyue.common.security.AuthenticatedUser.class);
var expected = org.mockito.Mockito.mock(com.baiyue.lastleg.inboundplan.dto.ContainerInboundPlanPreviewResponse.class);
org.springframework.test.util.ReflectionTestUtils.setField(controller, "containerConversion", coordinator);
org.mockito.Mockito.when(principal.tenantId()).thenReturn(0L);
org.mockito.Mockito.when(principal.appCode()).thenReturn("PLATFORM");
org.mockito.Mockito.when(coordinator.preview("BOOKING-1")).thenReturn(expected);
org.junit.jupiter.api.Assertions.assertSame(expected, controller.previewContainer(principal, "BOOKING-1").data());
}
@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"));
}
}
}