feat: add delivery assignment and rider APIs
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
package com.linhelp.delivery;
|
||||
|
||||
import com.linhelp.common.enums.DeliveryMethod;
|
||||
import com.linhelp.common.enums.DeliveryTaskStatus;
|
||||
import com.linhelp.common.enums.GoodsOrderStatus;
|
||||
import com.linhelp.order.CreateGoodsOrderItemRequest;
|
||||
import com.linhelp.order.CreateGoodsOrderRequest;
|
||||
import com.linhelp.order.GoodsOrderResponse;
|
||||
import com.linhelp.order.GoodsOrderService;
|
||||
import com.linhelp.product.ProductService;
|
||||
import com.linhelp.product.ProductSkuResponse;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class RiderTaskServiceTests {
|
||||
@Test
|
||||
void riderOnlySeesOwnTasks() {
|
||||
TestFixture fixture = new TestFixture();
|
||||
GoodsOrderResponse order = fixture.preparedDeliveryOrder();
|
||||
DeliveryUserResponse firstRider = fixture.rider(3L, "骑手一号");
|
||||
DeliveryUserResponse secondRider = fixture.rider(4L, "骑手二号");
|
||||
|
||||
fixture.assignmentService.assignGoodsOrder(order.getId(), firstRider.getId());
|
||||
|
||||
assertThat(fixture.riderTaskService.listTasks(firstRider.getId())).hasSize(1);
|
||||
assertThat(fixture.riderTaskService.listTasks(secondRider.getId())).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void startingGoodsOrderTaskMovesGoodsOrderToDelivering() {
|
||||
TestFixture fixture = new TestFixture();
|
||||
GoodsOrderResponse order = fixture.preparedDeliveryOrder();
|
||||
DeliveryUserResponse rider = fixture.rider(3L, "骑手一号");
|
||||
DeliveryOrderResponse task = fixture.assignmentService.assignGoodsOrder(order.getId(), rider.getId());
|
||||
|
||||
DeliveryOrderResponse started = fixture.riderTaskService.start(rider.getId(), task.getId());
|
||||
|
||||
assertThat(started.getStatus()).isEqualTo(DeliveryTaskStatus.DELIVERING);
|
||||
assertThat(fixture.goodsOrderService.detail(order.getId()).getStatus()).isEqualTo(GoodsOrderStatus.DELIVERING);
|
||||
}
|
||||
|
||||
@Test
|
||||
void deliveredTaskStoresPhotoUrl() {
|
||||
TestFixture fixture = new TestFixture();
|
||||
GoodsOrderResponse order = fixture.preparedDeliveryOrder();
|
||||
DeliveryUserResponse rider = fixture.rider(3L, "骑手一号");
|
||||
DeliveryOrderResponse task = fixture.assignmentService.assignGoodsOrder(order.getId(), rider.getId());
|
||||
fixture.riderTaskService.start(rider.getId(), task.getId());
|
||||
|
||||
DeliveryOrderResponse delivered = fixture.riderTaskService.delivered(rider.getId(), task.getId(), "https://img.test/done.jpg");
|
||||
|
||||
assertThat(delivered.getStatus()).isEqualTo(DeliveryTaskStatus.DELIVERED);
|
||||
assertThat(delivered.getDeliveredPhotoUrl()).isEqualTo("https://img.test/done.jpg");
|
||||
}
|
||||
|
||||
private static class TestFixture {
|
||||
private final ProductService productService = new ProductService();
|
||||
private final GoodsOrderService goodsOrderService = new GoodsOrderService(productService);
|
||||
private final DeliveryUserService deliveryUserService = new DeliveryUserService();
|
||||
private final DeliveryAssignmentService assignmentService =
|
||||
new DeliveryAssignmentService(deliveryUserService, goodsOrderService, null);
|
||||
private final RiderTaskService riderTaskService =
|
||||
new RiderTaskService(assignmentService, goodsOrderService, null);
|
||||
|
||||
private GoodsOrderResponse preparedDeliveryOrder() {
|
||||
ProductSkuResponse sku = productService.createDemoSku(1L, 1L, 1L, "500g", 990, 5);
|
||||
CreateGoodsOrderRequest request = new CreateGoodsOrderRequest();
|
||||
request.setTenantId(1L);
|
||||
request.setCommunityId(1L);
|
||||
request.setMerchantId(1L);
|
||||
request.setAddressId(1L);
|
||||
request.setDeliveryMethod(DeliveryMethod.IMMEDIATE);
|
||||
request.setItems(Collections.singletonList(new CreateGoodsOrderItemRequest(1L, sku.getId(), 1)));
|
||||
GoodsOrderResponse order = goodsOrderService.create(1L, request);
|
||||
goodsOrderService.confirm(order.getId());
|
||||
return goodsOrderService.markPrepared(order.getId());
|
||||
}
|
||||
|
||||
private DeliveryUserResponse rider(Long userId, String name) {
|
||||
DeliveryUserRequest request = new DeliveryUserRequest();
|
||||
request.setTenantId(1L);
|
||||
request.setCommunityId(1L);
|
||||
request.setUserId(userId);
|
||||
request.setName(name);
|
||||
request.setPhone("13900000000");
|
||||
return deliveryUserService.create(request);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user