diff --git a/firstleg/src/test/java/com/baiyue/firstleg/controller/PlatformSmartLoadingControllerContractTest.java b/firstleg/src/test/java/com/baiyue/firstleg/controller/PlatformSmartLoadingControllerContractTest.java index 0a904edec..26134c175 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/controller/PlatformSmartLoadingControllerContractTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/controller/PlatformSmartLoadingControllerContractTest.java @@ -5,7 +5,10 @@ import com.baiyue.firstleg.dto.SmartLoadingDtos.*; import org.junit.jupiter.api.Test; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; +import org.yaml.snakeyaml.Yaml; import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; class PlatformSmartLoadingControllerContractTest { @@ -98,13 +101,35 @@ class PlatformSmartLoadingControllerContractTest { .contains("回到 IN_PROGRESS") .contains("COMPLETED 永久拒绝增量"); } - @Test void planContractEmbedsColoadGroupsWithoutPerInboundFanout() throws Exception { + @Test void planContractEmbedsColoadGroupsAndPalletMembersWithoutPerInboundFanout() throws Exception { String yaml=java.nio.file.Files.readString(java.nio.file.Path.of("src/main/resources/openapi/firstleg-v1.yaml")); - assertThat(yaml) - .contains("required: [id, planNo, status, bookingId, version, canAssign, canEdit, finalCompletionStatus, coLoadGroups, items]") - .contains("SmartLoadingPlanCoLoadGroup:") - .contains("required: [groupId, groupNo, lockedPlanId, memberOrderCount, inboundFragmentCount, fullPackageCount, memberInboundIds]") - .contains("调用方不得按 inboundId 扇出重建"); + Map document=new Yaml().load(yaml); + Map schemas=(Map)((Map)document.get("components")).get("schemas"); + Map plan=(Map)schemas.get("SmartLoadingPlan"); + assertThat((List)plan.get("required")).extracting(Object::toString) + .containsExactlyInAnyOrder("id","planNo","status","bookingId","version","canAssign","canEdit", + "finalCompletionStatus","coLoadGroups","palletMembers","items"); + Map properties=(Map)plan.get("properties"); + Map groups=(Map)properties.get("coLoadGroups"); + assertThat(groups.get("type")).isEqualTo("array"); + assertThat(((Map)groups.get("items")).get("$ref")) + .isEqualTo("#/components/schemas/SmartLoadingPlanCoLoadGroup"); + assertThat(groups.get("description").toString()).contains("调用方不得按 inboundId 扇出重建"); + Map group=(Map)schemas.get("SmartLoadingPlanCoLoadGroup"); + assertThat((List)group.get("required")).extracting(Object::toString) + .containsExactlyInAnyOrder("groupId","groupNo","lockedPlanId","memberOrderCount", + "inboundFragmentCount","fullPackageCount","memberInboundIds"); + Map pallets=(Map)properties.get("palletMembers"); + assertThat(pallets.get("type")).isEqualTo("array"); + assertThat(((Map)pallets.get("items")).get("$ref")) + .isEqualTo("#/components/schemas/SmartLoadingPlanPalletMembers"); + Map pallet=(Map)schemas.get("SmartLoadingPlanPalletMembers"); + assertThat((List)pallet.get("required")).extracting(Object::toString) + .containsExactlyInAnyOrder("palletId","members"); + Map members=(Map)((Map)pallet.get("properties")).get("members"); + assertThat(members.get("type")).isEqualTo("array"); + assertThat(((Map)members.get("items")).get("$ref")) + .isEqualTo("#/components/schemas/SmartLoadingCandidateGroupMember"); } private void authority(String method,String permission,Class...types)throws Exception{Method m=PlatformSmartLoadingController.class.getDeclaredMethod(method,types);assertThat(m.getAnnotation(PreAuthorize.class).value()).isEqualTo("hasAuthority('"+permission+"')");} }