装柜回归测试

This commit is contained in:
2026-08-10 11:30:14 +08:00
parent 047f267d4f
commit 037527b4cb
14 changed files with 341 additions and 22 deletions
@@ -2,18 +2,30 @@ package com.baiyue.firstleg;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.cloud.openfeign.EnableFeignClients;
import static org.assertj.core.api.Assertions.assertThat;
class BaiyueFirstlegApplicationContractTest {
@Test
void scansAllFirstlegMapperPackagesIncludingOceanBooking() {
void scansAllFirstlegMapperPackagesIncludingCustoms() {
MapperScan scan = BaiyueFirstlegApplication.class.getAnnotation(MapperScan.class);
assertThat(scan.basePackages())
.contains("com.baiyue.firstleg.mapper")
.contains("com.baiyue.firstleg.split.mapper")
.contains("com.baiyue.firstleg.loading.mapper")
.contains("com.baiyue.firstleg.oceanbooking.mapper");
.contains("com.baiyue.firstleg.loading.bridge.mapper")
.contains("com.baiyue.firstleg.oceanbooking.mapper")
.contains("com.baiyue.firstleg.outbound.dispatch.mapper")
.contains("com.baiyue.firstleg.portschedule.mapper")
.contains("com.baiyue.firstleg.customs.mapper");
}
@Test
void scansAllFirstlegFeignClientPackagesIncludingCustoms() {
EnableFeignClients clients = BaiyueFirstlegApplication.class.getAnnotation(EnableFeignClients.class);
assertThat(clients.basePackages()).containsExactly("com.baiyue.firstleg");
}
}
@@ -16,6 +16,8 @@ class PdaConvergenceOpenApiContractTest {
.contains("/api/platform/v1/first-leg/pda-loading/tasks:")
.contains("/tasks/{taskId}/claim:")
.contains("/tasks/{taskId}/assign:")
.contains("/tasks/{taskId}/items/{itemId}/claim:")
.contains("/tasks/{taskId}/items/{itemId}/assign:")
.contains("/tasks/{taskId}/items/{itemId}/pick:")
.contains("/tasks/{taskId}/items/{itemId}/partial:")
.contains("/tasks/{taskId}/items/{itemId}/skip:")
@@ -18,8 +18,10 @@ class PdaConvergenceSqlContractTest {
.getContentAsString(StandardCharsets.UTF_8);
assertThat(sql)
.contains("CREATE TABLE IF NOT EXISTS fl_loading_pick_assignment")
.contains("CREATE TABLE IF NOT EXISTS fl_loading_pick_item_assignment")
.contains("CREATE TABLE IF NOT EXISTS fl_loading_pick_review")
.contains("CREATE TABLE IF NOT EXISTS fl_loading_pick_operation")
.contains("'ITEM_CLAIM', 'ITEM_ASSIGN'")
.contains("UNIQUE KEY uk_loading_pick_operation_id")
.contains("trg_loading_pick_review_before_update")
.contains("trg_loading_pick_operation_before_delete")
@@ -3,11 +3,13 @@ package com.baiyue.firstleg.service;
import com.baiyue.common.core.exception.BizException;
import com.baiyue.firstleg.dto.LoadingPickDtos.PartialPickRequest;
import com.baiyue.firstleg.dto.LoadingPickDtos.PickRequest;
import com.baiyue.firstleg.dto.LoadingPickDtos.ClaimRequest;
import com.baiyue.firstleg.dto.LoadingPickDtos.ReviewRequest;
import com.baiyue.firstleg.dto.LoadingPickDtos.SkipRequest;
import com.baiyue.firstleg.entity.LoadingPickAssignmentEntity;
import com.baiyue.firstleg.entity.LoadingPickHistoryEntity;
import com.baiyue.firstleg.entity.LoadingPickItemEntity;
import com.baiyue.firstleg.entity.LoadingPickItemAssignmentEntity;
import com.baiyue.firstleg.entity.LoadingPickOperationEntity;
import com.baiyue.firstleg.entity.LoadingPickTaskEntity;
import com.baiyue.firstleg.repository.LoadingPickRepository;
@@ -110,6 +112,47 @@ class LoadingPickServiceTest {
verify(settlementService, never()).settle(20L, 9L, "operator");
}
@Test
void permitsItemAssigneeWithoutCabinetAssignee() {
LoadingPickTaskEntity task = task();
LoadingPickItemEntity item = item();
when(repository.history("item-owner-pick")).thenReturn(null);
when(repository.task(20L)).thenReturn(task);
when(repository.taskForUpdate(20L)).thenReturn(task);
when(repository.item(20L, 30L, 101L)).thenReturn(item);
when(repository.itemAssignment(30L)).thenReturn(itemAssignment(9L, "operator"));
when(repository.pick(30L, 2, "MANUAL", "[]", 0, 101L)).thenReturn(1);
when(repository.touchTask(20L, 0)).thenReturn(1);
when(repository.items(20L, 101L)).thenReturn(List.of(item));
service.pick(20L, 30L, new PickRequest(101L, 2, List.of(), 0, "item-owner-pick"),
9L, "operator");
}
@Test
void permitsTwoWorkersToClaimDifferentItemsInOneCabinet() {
LoadingPickTaskEntity task = task();
LoadingPickItemEntity first = item();
LoadingPickItemEntity second = item();
second.setId(31L);
when(repository.taskForUpdate(20L)).thenReturn(task);
when(repository.task(20L)).thenReturn(task);
when(repository.item(20L, 30L)).thenReturn(first);
when(repository.item(20L, 31L)).thenReturn(second);
when(repository.itemAssignment(30L)).thenReturn(null);
when(repository.itemAssignment(31L)).thenReturn(null);
when(repository.createItemAssignment(30L, 9L, "worker-a", 9L, "worker-a", "CLAIMED")).thenReturn(1);
when(repository.createItemAssignment(31L, 10L, "worker-b", 10L, "worker-b", "CLAIMED")).thenReturn(1);
when(repository.items(20L)).thenReturn(List.of(first, second));
service.claimItem(20L, 30L, new ClaimRequest(0, "claim-a"), 9L, "worker-a");
service.claimItem(20L, 31L, new ClaimRequest(0, "claim-b"), 10L, "worker-b");
verify(repository).createItemAssignment(30L, 9L, "worker-a", 9L, "worker-a", "CLAIMED");
verify(repository).createItemAssignment(31L, 10L, "worker-b", 10L, "worker-b", "CLAIMED");
}
@Test
void reviewSettlesResolvedItemsAndCompletesPlan() {
LoadingPickTaskEntity task = task();
@@ -187,4 +230,13 @@ class LoadingPickServiceTest {
assignment.setVersion(0);
return assignment;
}
private static LoadingPickItemAssignmentEntity itemAssignment(long assigneeId, String assigneeName) {
LoadingPickItemAssignmentEntity assignment = new LoadingPickItemAssignmentEntity();
assignment.setPickItemId(30L);
assignment.setAssigneeId(assigneeId);
assignment.setAssigneeName(assigneeName);
assignment.setVersion(0);
return assignment;
}
}