|
@@ -189,9 +189,8 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
assertEquals("NORMAL", saved.getValue().getDeliveryType());
|
|
assertEquals("NORMAL", saved.getValue().getDeliveryType());
|
|
|
assertEquals("DOCUMENT", saved.getValue().getPackageType());
|
|
assertEquals("DOCUMENT", saved.getValue().getPackageType());
|
|
|
assertEquals(1, saved.getValue().getQuantity());
|
|
assertEquals(1, saved.getValue().getQuantity());
|
|
|
- assertEquals(new BigDecimal("3.00"), saved.getValue().getTotalWeightKg());
|
|
|
|
|
|
|
+ assertEquals("UP_TO_5_KG", saved.getValue().getWeightRange());
|
|
|
assertEquals("30 x 20 x 10 cm", saved.getValue().getSpecification());
|
|
assertEquals("30 x 20 x 10 cm", saved.getValue().getSpecification());
|
|
|
- assertEquals("SMALL", saved.getValue().getPackageSize());
|
|
|
|
|
assertEquals(88L, saved.getValue().getReceiverUserId());
|
|
assertEquals(88L, saved.getValue().getReceiverUserId());
|
|
|
assertEquals(1L, saved.getValue().getPricingId());
|
|
assertEquals(1L, saved.getValue().getPricingId());
|
|
|
assertEquals("00:00", saved.getValue().getPricingStartTime());
|
|
assertEquals("00:00", saved.getValue().getPricingStartTime());
|
|
@@ -213,6 +212,7 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
void userListOnlyFiltersByOwnerAndReturnsCardFields() {
|
|
void userListOnlyFiltersByOwnerAndReturnsCardFields() {
|
|
|
Fixture fixture = new Fixture();
|
|
Fixture fixture = new Fixture();
|
|
|
FlashDeliveryOrder order = order(10L, "COMPLETED");
|
|
FlashDeliveryOrder order = order(10L, "COMPLETED");
|
|
|
|
|
+ order.setWeightRange("OVER_5_TO_10_KG");
|
|
|
Page<FlashDeliveryOrder> source = new Page<>(1, 10, 1);
|
|
Page<FlashDeliveryOrder> source = new Page<>(1, 10, 1);
|
|
|
source.setRecords(List.of(order));
|
|
source.setRecords(List.of(order));
|
|
|
when(fixture.orderMapper.selectPage(any(com.baomidou.mybatisplus.core.metadata.IPage.class),
|
|
when(fixture.orderMapper.selectPage(any(com.baomidou.mybatisplus.core.metadata.IPage.class),
|
|
@@ -230,6 +230,7 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
assertFalse(sql.contains("service_type"));
|
|
assertFalse(sql.contains("service_type"));
|
|
|
assertTrue(parameters.contains(7L));
|
|
assertTrue(parameters.contains(7L));
|
|
|
assertEquals("pickup road", result.getRecords().get(0).getPickupAddress());
|
|
assertEquals("pickup road", result.getRecords().get(0).getPickupAddress());
|
|
|
|
|
+ assertEquals("OVER_5_TO_10_KG", result.getRecords().get(0).getWeightRange());
|
|
|
assertEquals(112L, result.getRecords().get(0).getAmount());
|
|
assertEquals(112L, result.getRecords().get(0).getAmount());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -297,6 +298,7 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
Fixture fixture = new Fixture();
|
|
Fixture fixture = new Fixture();
|
|
|
rider(fixture, 8L);
|
|
rider(fixture, 8L);
|
|
|
FlashDeliveryOrder order = order(10L, "WAITING_ACCEPTANCE");
|
|
FlashDeliveryOrder order = order(10L, "WAITING_ACCEPTANCE");
|
|
|
|
|
+ order.setWeightRange("OVER_10_TO_15_KG");
|
|
|
Page<FlashDeliveryOrder> source = new Page<>(1, 10, 1);
|
|
Page<FlashDeliveryOrder> source = new Page<>(1, 10, 1);
|
|
|
source.setRecords(List.of(order));
|
|
source.setRecords(List.of(order));
|
|
|
when(fixture.orderMapper.selectPage(any(com.baomidou.mybatisplus.core.metadata.IPage.class),
|
|
when(fixture.orderMapper.selectPage(any(com.baomidou.mybatisplus.core.metadata.IPage.class),
|
|
@@ -317,6 +319,7 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
assertEquals(168L, result.getHighestOrderAmount());
|
|
assertEquals(168L, result.getHighestOrderAmount());
|
|
|
assertEquals("pickup road", result.getRecords().get(0).getPickupAddress());
|
|
assertEquals("pickup road", result.getRecords().get(0).getPickupAddress());
|
|
|
assertEquals("delivery road", result.getRecords().get(0).getDeliveryAddress());
|
|
assertEquals("delivery road", result.getRecords().get(0).getDeliveryAddress());
|
|
|
|
|
+ assertEquals("OVER_10_TO_15_KG", result.getRecords().get(0).getWeightRange());
|
|
|
assertTrue(result.getRecords().get(0).getPickupDistanceMeters() > 0);
|
|
assertTrue(result.getRecords().get(0).getPickupDistanceMeters() > 0);
|
|
|
assertTrue(result.getRecords().get(0).getPinRequired());
|
|
assertTrue(result.getRecords().get(0).getPinRequired());
|
|
|
ArgumentCaptor<com.baomidou.mybatisplus.core.conditions.query.QueryWrapper> query =
|
|
ArgumentCaptor<com.baomidou.mybatisplus.core.conditions.query.QueryWrapper> query =
|
|
@@ -470,6 +473,7 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
Fixture fixture = new Fixture();
|
|
Fixture fixture = new Fixture();
|
|
|
rider(fixture, 8L);
|
|
rider(fixture, 8L);
|
|
|
FlashDeliveryOrder order = order(10L, "WAITING_ACCEPTANCE");
|
|
FlashDeliveryOrder order = order(10L, "WAITING_ACCEPTANCE");
|
|
|
|
|
+ order.setWeightRange("OVER_15_TO_20_KG");
|
|
|
when(fixture.orderMapper.selectById(10L)).thenReturn(order);
|
|
when(fixture.orderMapper.selectById(10L)).thenReturn(order);
|
|
|
|
|
|
|
|
var result = fixture.service.riderDetail(8L, 10L);
|
|
var result = fixture.service.riderDetail(8L, 10L);
|
|
@@ -479,6 +483,7 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
assertEquals("pickup door", result.getPickup().getAddressDetail());
|
|
assertEquals("pickup door", result.getPickup().getAddressDetail());
|
|
|
assertEquals("delivery road", result.getDelivery().getAddress());
|
|
assertEquals("delivery road", result.getDelivery().getAddress());
|
|
|
assertEquals("delivery door", result.getDelivery().getAddressDetail());
|
|
assertEquals("delivery door", result.getDelivery().getAddressDetail());
|
|
|
|
|
+ assertEquals("OVER_15_TO_20_KG", result.getWeightRange());
|
|
|
assertNull(result.getPickup().getName());
|
|
assertNull(result.getPickup().getName());
|
|
|
assertNull(result.getPickup().getPhone());
|
|
assertNull(result.getPickup().getPhone());
|
|
|
assertNull(result.getPickup().getLongitude());
|
|
assertNull(result.getPickup().getLongitude());
|
|
@@ -501,6 +506,7 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
Fixture fixture = new Fixture();
|
|
Fixture fixture = new Fixture();
|
|
|
FlashDeliveryOrder order = order(10L, ACCEPTED);
|
|
FlashDeliveryOrder order = order(10L, ACCEPTED);
|
|
|
order.setRiderId(null);
|
|
order.setRiderId(null);
|
|
|
|
|
+ order.setWeightRange("OVER_5_TO_10_KG");
|
|
|
when(fixture.orderMapper.selectById(10L)).thenReturn(order);
|
|
when(fixture.orderMapper.selectById(10L)).thenReturn(order);
|
|
|
when(fixture.imageMapper.selectList(any(Wrapper.class))).thenReturn(List.of(
|
|
when(fixture.imageMapper.selectList(any(Wrapper.class))).thenReturn(List.of(
|
|
|
image("SENDER", "https://example.com/sender.jpg"),
|
|
image("SENDER", "https://example.com/sender.jpg"),
|
|
@@ -514,6 +520,7 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
assertEquals(List.of("https://example.com/pickup.jpg"), result.getPickupImageUrls());
|
|
assertEquals(List.of("https://example.com/pickup.jpg"), result.getPickupImageUrls());
|
|
|
assertEquals(List.of("https://example.com/delivery.jpg"), result.getDeliveryImageUrls());
|
|
assertEquals(List.of("https://example.com/delivery.jpg"), result.getDeliveryImageUrls());
|
|
|
assertEquals("4821", result.getDeliveryPinCode());
|
|
assertEquals("4821", result.getDeliveryPinCode());
|
|
|
|
|
+ assertEquals("OVER_5_TO_10_KG", result.getWeightRange());
|
|
|
verify(fixture.logMapper, never()).selectList(any());
|
|
verify(fixture.logMapper, never()).selectList(any());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -823,9 +830,60 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
assertThrows(ServiceException.class, () -> fixture.service.quote(invalidQuantity));
|
|
assertThrows(ServiceException.class, () -> fixture.service.quote(invalidQuantity));
|
|
|
|
|
|
|
|
request = request();
|
|
request = request();
|
|
|
- request.setTotalWeightKg(new BigDecimal("20.01"));
|
|
|
|
|
- FlashDeliveryQuoteRequest overweight = request;
|
|
|
|
|
- assertThrows(ServiceException.class, () -> fixture.service.quote(overweight));
|
|
|
|
|
|
|
+ request.setWeightRange("SMALL");
|
|
|
|
|
+ FlashDeliveryQuoteRequest oldWeightRange = request;
|
|
|
|
|
+ assertThrows(ServiceException.class, () -> fixture.service.quote(oldWeightRange));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void quoteAcceptsAllFourWeightRanges() {
|
|
|
|
|
+ Fixture fixture = new Fixture();
|
|
|
|
|
+ when(fixture.pricingMapper.selectAtTime(anyString())).thenReturn(List.of(pricing()));
|
|
|
|
|
+ when(fixture.routeService.calculate(any(), any())).thenReturn(new RouteDistance(3200, 600, "ROUTE"));
|
|
|
|
|
+
|
|
|
|
|
+ for (String weightRange : List.of("UP_TO_5_KG", "OVER_5_TO_10_KG",
|
|
|
|
|
+ "OVER_10_TO_15_KG", "OVER_15_TO_20_KG")) {
|
|
|
|
|
+ FlashDeliveryQuoteRequest request = request();
|
|
|
|
|
+ request.setWeightRange(weightRange);
|
|
|
|
|
+ var quote = assertDoesNotThrow(() -> fixture.service.quote(request), weightRange);
|
|
|
|
|
+ assertEquals(90L, quote.getAmount(), weightRange);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void createPersistsAndReturnsEveryWeightRange() {
|
|
|
|
|
+ for (String weightRange : List.of("UP_TO_5_KG", "OVER_5_TO_10_KG",
|
|
|
|
|
+ "OVER_10_TO_15_KG", "OVER_15_TO_20_KG")) {
|
|
|
|
|
+ Fixture fixture = new Fixture();
|
|
|
|
|
+ when(fixture.pricingMapper.selectAtTime(anyString())).thenReturn(List.of(pricing()));
|
|
|
|
|
+ when(fixture.routeService.calculate(any(), any())).thenReturn(new RouteDistance(3200, 600, "ROUTE"));
|
|
|
|
|
+ doAnswer(invocation -> {
|
|
|
|
|
+ FlashDeliveryOrder order = invocation.getArgument(0);
|
|
|
|
|
+ order.setId(99L);
|
|
|
|
|
+ return 1;
|
|
|
|
|
+ }).when(fixture.orderMapper).insert(any(FlashDeliveryOrder.class));
|
|
|
|
|
+ when(fixture.imageMapper.selectList(any(Wrapper.class))).thenReturn(List.of());
|
|
|
|
|
+ when(fixture.logMapper.selectList(any(Wrapper.class))).thenReturn(List.of());
|
|
|
|
|
+ FlashDeliveryCreateRequest request = createRequest();
|
|
|
|
|
+ request.setWeightRange(weightRange);
|
|
|
|
|
+
|
|
|
|
|
+ var result = fixture.service.create(7L, request);
|
|
|
|
|
+
|
|
|
|
|
+ ArgumentCaptor<FlashDeliveryOrder> saved = ArgumentCaptor.forClass(FlashDeliveryOrder.class);
|
|
|
|
|
+ verify(fixture.orderMapper).insert(saved.capture());
|
|
|
|
|
+ assertEquals(weightRange, saved.getValue().getWeightRange());
|
|
|
|
|
+ assertEquals(weightRange, result.getWeightRange());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void quoteRejectsMissingAndUnknownWeightRanges() {
|
|
|
|
|
+ Fixture fixture = new Fixture();
|
|
|
|
|
+ for (String weightRange : new String[]{null, "", "SMALL", "OVER_20_KG"}) {
|
|
|
|
|
+ FlashDeliveryQuoteRequest request = request();
|
|
|
|
|
+ request.setWeightRange(weightRange);
|
|
|
|
|
+ assertThrows(ServiceException.class, () -> fixture.service.quote(request), String.valueOf(weightRange));
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private FlashDeliveryQuoteRequest request() {
|
|
private FlashDeliveryQuoteRequest request() {
|
|
@@ -834,7 +892,7 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
request.setDeliveryType("NORMAL");
|
|
request.setDeliveryType("NORMAL");
|
|
|
request.setPackageType("DOCUMENT");
|
|
request.setPackageType("DOCUMENT");
|
|
|
request.setQuantity(1);
|
|
request.setQuantity(1);
|
|
|
- request.setTotalWeightKg(new BigDecimal("3.00"));
|
|
|
|
|
|
|
+ request.setWeightRange("UP_TO_5_KG");
|
|
|
request.setSpecification("30 x 20 x 10 cm");
|
|
request.setSpecification("30 x 20 x 10 cm");
|
|
|
request.setTipAmount(0L);
|
|
request.setTipAmount(0L);
|
|
|
request.setDeliveryMode("NOW");
|
|
request.setDeliveryMode("NOW");
|
|
@@ -851,7 +909,7 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
request.setDeliveryType(quote.getDeliveryType());
|
|
request.setDeliveryType(quote.getDeliveryType());
|
|
|
request.setPackageType(quote.getPackageType());
|
|
request.setPackageType(quote.getPackageType());
|
|
|
request.setQuantity(quote.getQuantity());
|
|
request.setQuantity(quote.getQuantity());
|
|
|
- request.setTotalWeightKg(quote.getTotalWeightKg());
|
|
|
|
|
|
|
+ request.setWeightRange(quote.getWeightRange());
|
|
|
request.setSpecification(quote.getSpecification());
|
|
request.setSpecification(quote.getSpecification());
|
|
|
request.setTipAmount(quote.getTipAmount());
|
|
request.setTipAmount(quote.getTipAmount());
|
|
|
request.setPickup(quote.getPickup());
|
|
request.setPickup(quote.getPickup());
|
|
@@ -949,8 +1007,7 @@ class FlashDeliveryApplicationServiceTest {
|
|
|
order.setStatus(status);
|
|
order.setStatus(status);
|
|
|
order.setPackageType("DOCUMENT");
|
|
order.setPackageType("DOCUMENT");
|
|
|
order.setQuantity(1);
|
|
order.setQuantity(1);
|
|
|
- order.setTotalWeightKg(new BigDecimal("3.00"));
|
|
|
|
|
- order.setPackageSize("SMALL");
|
|
|
|
|
|
|
+ order.setWeightRange("UP_TO_5_KG");
|
|
|
order.setDeliveryMode("NOW");
|
|
order.setDeliveryMode("NOW");
|
|
|
order.setPinRequired(true);
|
|
order.setPinRequired(true);
|
|
|
order.setDeliveryPinCode("4821");
|
|
order.setDeliveryPinCode("4821");
|