提交
This commit is contained in:
+67
@@ -0,0 +1,67 @@
|
||||
package com.baiyue.lastleg.dispatch.service;
|
||||
|
||||
import com.baiyue.lastleg.dispatch.entity.DispatchAggregate;
|
||||
import com.baiyue.lastleg.dispatch.entity.DispatchItem;
|
||||
import com.baiyue.lastleg.dispatch.repository.DispatchAggregateRepository;
|
||||
import com.baiyue.lastleg.dispatch.port.DispatchContracts.LoadingMeasurement;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
/** 混排仓内出库允许未知实测,但已知容量超限仍必须拒绝。 */
|
||||
class DispatchMixedCapacityTest {
|
||||
/** 仓内九箱已核平时,缺少重量体积不应额外要求异地货补测。 */
|
||||
@Test void unknownMeasurementsDoNotBlockWarehouseLoading() {
|
||||
var f=new Fixture(null,null);
|
||||
assertThatCode(()->f.service.requireRemoteCapacity(f.row,f.measured(null,null,1))).doesNotThrowAnyException();
|
||||
}
|
||||
/** 部分未知不能掩盖已知重量已超载。 */
|
||||
@Test void knownWeightStillBlocksWithUnknownVolume() {
|
||||
var f=new Fixture("600",null);
|
||||
assertThatThrownBy(()->f.service.requireRemoteCapacity(f.row,f.measured("401",null,1))).hasMessageContaining("超过本车容量");
|
||||
}
|
||||
/** 部分未知不能掩盖已知体积已超载。 */
|
||||
@Test void knownVolumeStillBlocksWithUnknownWeight() {
|
||||
var f=new Fixture(null,"30");
|
||||
assertThatThrownBy(()->f.service.requireRemoteCapacity(f.row,f.measured(null,"21",1))).hasMessageContaining("超过本车容量");
|
||||
}
|
||||
/** 无重量体积依据时,明确的托位上限仍然有效。 */
|
||||
@Test void palletSpacesRemainLimited() {
|
||||
var f=new Fixture(null,null);
|
||||
assertThatThrownBy(()->f.service.requireRemoteCapacity(f.row,f.measured(null,null,10))).hasMessageContaining("超过本车容量");
|
||||
}
|
||||
/** 已知占用恰好达到容量时允许确认。 */
|
||||
@Test void exactKnownCapacityIsAllowed() {
|
||||
var f=new Fixture("600","30");
|
||||
assertThatCode(()->f.service.requireRemoteCapacity(f.row,f.measured("400","20",9))).doesNotThrowAnyException();
|
||||
}
|
||||
/** 隔离容量校验,异地身份及货量均由正式依赖返回。 */
|
||||
private static class Fixture {
|
||||
final DispatchAggregateService service=mock(DispatchAggregateService.class,CALLS_REAL_METHODS);
|
||||
final DispatchAggregate row=new DispatchAggregate();
|
||||
/** 构造一条异地取货来源与车辆真实容量,不制造未知实测。 */
|
||||
Fixture(String weight,String volume) {
|
||||
var repository=mock(DispatchAggregateRepository.class);
|
||||
var facts=mock(DispatchLooseboardFacts.class);
|
||||
ReflectionTestUtils.setField(service,"repository",repository);
|
||||
ReflectionTestUtils.setField(service,"looseboardFacts",facts);
|
||||
ReflectionTestUtils.setField(service,"json",new ObjectMapper());
|
||||
row.setId(1L);
|
||||
row.setResourcesJson("{\"vehicle\":{\"capacity\":{\"palletSpaces\":10,\"maxLoadKg\":1000,\"maxVolumeCbm\":50}}}");
|
||||
var remote=new DispatchItem();remote.setId(2L);
|
||||
remote.setGrossWeightKg(weight==null?null:new BigDecimal(weight));
|
||||
remote.setVolumeCbm(volume==null?null:new BigDecimal(volume));
|
||||
when(facts.remoteItemIds(1L)).thenReturn(Set.of(2L));
|
||||
when(repository.cargo(1L)).thenReturn(List.of(remote));
|
||||
}
|
||||
/** 保留仓内原始可空测量值供校验使用。 */
|
||||
List<LoadingMeasurement> measured(String weight,String volume,int spaces) {
|
||||
return List.of(new LoadingMeasurement(3L,spaces,weight==null?null:new BigDecimal(weight),volume==null?null:new BigDecimal(volume),1));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user