This commit is contained in:
2026-09-16 11:14:32 +08:00
parent a098c4377c
commit a975b07968
@@ -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+"')");}
}