feat(fleet): enforce reviewed trips and original fee coverage for dispatch
This commit is contained in:
+21
-3
@@ -4,6 +4,7 @@ import com.baiyue.lastleg.masterdata.vehicle.application.VehicleApplicationServi
|
||||
import com.baiyue.lastleg.masterdata.vehicle.application.VehicleApplicationService.VehicleFailure;
|
||||
import com.baiyue.lastleg.masterdata.vehicle.application.model.VehicleModels;
|
||||
import com.baiyue.lastleg.masterdata.vehicle.application.port.out.VehicleRepository;
|
||||
import com.baiyue.lastleg.masterdata.vehicle.application.port.out.VehicleAssignmentGuard;
|
||||
import com.baiyue.lastleg.masterdata.vehicle.application.port.out.VehicleRepository.VehicleSnapshot;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -23,7 +24,7 @@ class VehicleApplicationServiceTest {
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
repository = mock(VehicleRepository.class);
|
||||
service = new VehicleApplicationService(repository);
|
||||
service = new VehicleApplicationService(repository, mock(VehicleAssignmentGuard.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -52,13 +53,30 @@ class VehicleApplicationServiceTest {
|
||||
failure -> assertThat(failure.kind()).isEqualTo(FailureKind.BAD_REQUEST));
|
||||
}
|
||||
|
||||
@Test void rejectsPartialOrNonPositiveCapacityWithoutGuessingFromModel() {
|
||||
var partial = new VehicleModels.Create("ABC-001", "大车30托", new BigDecimal("12.50"), 1000L,
|
||||
null, null, "OVERSEAS", "OWNED", "IN_SERVICE", null, 30, null, new BigDecimal("90"));
|
||||
assertThatThrownBy(() -> service.create("9", partial)).hasMessageContaining("同时填写");
|
||||
var zero = new VehicleModels.Create("ABC-001", "大车30托", new BigDecimal("12.50"), 1000L,
|
||||
null, null, "OVERSEAS", "OWNED", "IN_SERVICE", null, 30, BigDecimal.ZERO, new BigDecimal("90"));
|
||||
assertThatThrownBy(() -> service.create("9", zero)).hasMessageContaining("大于零");
|
||||
org.mockito.Mockito.verify(repository, org.mockito.Mockito.never()).create(org.mockito.ArgumentMatchers.any());
|
||||
}
|
||||
|
||||
@Test void exportUsesPlateAsBusinessIdentifierAndIncludesAllCapacityDimensions() {
|
||||
when(repository.list(org.mockito.ArgumentMatchers.any())).thenReturn(java.util.List.of(vehicle(3, 1000)));
|
||||
String csv = new String(service.exportCsv(new VehicleModels.Query(1, 20, null, null, null, null)), java.nio.charset.StandardCharsets.UTF_8);
|
||||
assertThat(csv).contains("最大托位,最大载重(kg),可用容积(m³)").contains("\"30\",\"18000\",\"90\"")
|
||||
.doesNotContain("车辆ID");
|
||||
}
|
||||
|
||||
private static VehicleModels.Update update(long version, long mileage) {
|
||||
return new VehicleModels.Update(version, "ABC-001", "Box Truck", new BigDecimal("12.50"), mileage,
|
||||
"Driver", "123", "OVERSEAS", "OWNED", null);
|
||||
"Driver", "123", "OVERSEAS", "OWNED", null, 30, new BigDecimal("18000"), new BigDecimal("90"));
|
||||
}
|
||||
|
||||
private static VehicleSnapshot vehicle(long version, long mileage) {
|
||||
return new VehicleSnapshot(1L, "ABC-001", "Box Truck", new BigDecimal("12.50"), mileage,
|
||||
"Driver", "123", "OVERSEAS", "OWNED", "IN_SERVICE", null, version, "9", null);
|
||||
"Driver", "123", "OVERSEAS", "OWNED", "IN_SERVICE", null, version, "9", null, 30, new BigDecimal("18000"), new BigDecimal("90"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user