This commit is contained in:
2026-08-22 10:20:38 +08:00
parent af8724dd70
commit 1f2c4cd8bb
7 changed files with 179 additions and 13 deletions
@@ -13,6 +13,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import java.util.Arrays;
import java.util.Set;
@@ -66,18 +67,24 @@ class Phase4BrowserApiBoundaryTest {
}
@Test
void smartDispatchIsIndependentlyEnabledWithOnlyCandidateAndPreArrangeEndpoints() {
void smartDispatchOnlyExposesCandidatePreArrangeAndDraftLifecycleEndpoints() {
ConditionalOnProperty condition = SmartDispatchController.class.getAnnotation(ConditionalOnProperty.class);
assertTrue(condition != null);
assertTrue(Arrays.asList(condition.name()).contains("lastleg.smart-dispatch-api.enabled"));
assertFalse(condition.matchIfMissing());
assertTrue(Arrays.stream(SmartDispatchController.class.getDeclaredMethods())
.filter(method -> method.isAnnotationPresent(GetMapping.class)).count() == 1);
.filter(method -> method.isAnnotationPresent(GetMapping.class)).count() == 2);
assertTrue(Arrays.stream(SmartDispatchController.class.getDeclaredMethods())
.filter(method -> method.isAnnotationPresent(PostMapping.class)).count() == 1);
.filter(method -> method.isAnnotationPresent(PostMapping.class)).count() == 6);
assertTrue(Arrays.stream(SmartDispatchController.class.getDeclaredMethods())
.filter(method -> method.isAnnotationPresent(DeleteMapping.class)).count() == 1);
assertTrue(Arrays.stream(SmartDispatchController.class.getDeclaredMethods())
.filter(method -> method.isAnnotationPresent(DeleteMapping.class))
.allMatch(method -> Arrays.asList(method.getAnnotation(DeleteMapping.class).value())
.contains("/drafts/{draftToken}/containers/{containerId}")));
assertFalse(Arrays.stream(SmartDispatchController.class.getDeclaredMethods())
.flatMap(method -> Arrays.stream(method.getAnnotations()))
.anyMatch(annotation -> Set.of("PutMapping", "DeleteMapping", "PatchMapping")
.anyMatch(annotation -> Set.of("PutMapping", "PatchMapping")
.contains(annotation.annotationType().getSimpleName())));
}
@@ -21,7 +21,7 @@ class DispatchCandidateMapperContractTest {
@Test
void candidateQueriesKeepRecordConstructorColumnOrder() throws Exception {
assertConstructorColumnOrder(DispatchCandidateMapper.class.getMethod("available",
String.class, List.class, String.class, String.class, String.class));
String.class, List.class, String.class, String.class, String.class, String.class));
assertConstructorColumnOrder(DispatchCandidateMapper.class.getMethod("lockSelected",
String.class, List.class));
}
@@ -19,6 +19,13 @@ class SmartDispatchOpenApiContractTest {
assertTrue(yaml.contains("/api/platform/v1/last-leg/dispatches/draft-locks/lock:"));
assertTrue(yaml.contains("/api/platform/v1/last-leg/dispatches/draft-locks/unlock:"));
assertTrue(yaml.contains("/api/platform/v1/last-leg/dispatches/draft-locks/release:"));
assertTrue(yaml.contains("/api/platform/v1/last-leg/dispatches/drafts:"));
assertTrue(yaml.contains("/api/platform/v1/last-leg/dispatches/drafts/snapshot:"));
assertTrue(yaml.contains("/api/platform/v1/last-leg/dispatches/drafts/containers:"));
assertTrue(yaml.contains("/api/platform/v1/last-leg/dispatches/drafts/{draftToken}/containers/{containerId}:"));
assertTrue(yaml.contains("draftContainerId:"));
assertTrue(yaml.contains("SmartDispatchDraftContainer:"));
assertTrue(yaml.contains("SmartDispatchDraft:"));
assertTrue(yaml.contains("platform:overseas-warehouse:inbound-order:list"));
assertTrue(yaml.contains("platform:overseas-warehouse:inbound-order:smart-dispatch"));
assertTrue(yaml.contains("SmartDispatchPreArrange"));