68 lines
4.3 KiB
Java
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"));
|
|
}
|
|
}
|
|
}
|