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); } } }