feat: add express pickup orders

This commit is contained in:
王鹏
2026-07-07 15:42:31 +08:00
parent 40ea2cd9ff
commit 3646ee9971
12 changed files with 874 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
package com.linhelp.express;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
class ExpressFeeCalculatorTests {
@Test
void firstPackageCostsThreeYuan() {
assertThat(ExpressFeeCalculator.calculateCent(1)).isEqualTo(300);
}
@Test
void extraPackagesCostOneYuanEach() {
assertThat(ExpressFeeCalculator.calculateCent(3)).isEqualTo(500);
}
@Test
void packageCountMustBePositive() {
assertThatThrownBy(() -> ExpressFeeCalculator.calculateCent(0))
.hasMessageContaining("件数必须大于0");
}
}

View File

@@ -0,0 +1,79 @@
package com.linhelp.express;
import com.linhelp.common.enums.ExpressOrderStatus;
import com.linhelp.user.AddressRequest;
import com.linhelp.user.AddressResponse;
import com.linhelp.user.UserAddressService;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
class ExpressOrderServiceTests {
@Test
void confirmedExpressOrderMovesToPendingPickup() {
UserAddressService addressService = new UserAddressService();
AddressResponse address = addressService.create(1L, addressRequest());
ExpressOrderService expressOrderService = new ExpressOrderService(addressService);
ExpressOrderRequest request = expressRequest(address.getId());
request.setPackageCount(3);
ExpressOrderResponse order = expressOrderService.create(1L, request);
assertThat(order.getFeeCent()).isEqualTo(500);
expressOrderService.confirm(order.getId());
assertThat(expressOrderService.detail(order.getId()).getStatus()).isEqualTo(ExpressOrderStatus.PENDING_PICKUP);
}
@Test
void addressMustBelongToCurrentUser() {
UserAddressService addressService = new UserAddressService();
AddressResponse otherUserAddress = addressService.create(2L, addressRequest());
ExpressOrderService expressOrderService = new ExpressOrderService(addressService);
assertThatThrownBy(() -> expressOrderService.create(1L, expressRequest(otherUserAddress.getId())))
.hasMessageContaining("地址不存在");
}
@Test
void feeAdjustmentWritesLog() {
UserAddressService addressService = new UserAddressService();
AddressResponse address = addressService.create(1L, addressRequest());
ExpressOrderService expressOrderService = new ExpressOrderService(addressService);
ExpressOrderResponse order = expressOrderService.create(1L, expressRequest(address.getId()));
expressOrderService.adjustFee(order.getId(), 800, "大件加价");
ExpressOrderResponse detail = expressOrderService.detail(order.getId());
assertThat(detail.getFeeCent()).isEqualTo(800);
assertThat(detail.getLogs()).extracting(ExpressOrderLogResponse::getContent)
.anyMatch(content -> content.contains("大件加价"));
}
private ExpressOrderRequest expressRequest(Long addressId) {
ExpressOrderRequest request = new ExpressOrderRequest();
request.setTenantId(1L);
request.setCommunityId(1L);
request.setExpressCompany("顺丰");
request.setPickupCode("A-1234");
request.setPickupAddress("北门快递站");
request.setReceiverPhone("13800000000");
request.setAddressId(addressId);
request.setPackageCount(1);
return request;
}
private AddressRequest addressRequest() {
AddressRequest request = new AddressRequest();
request.setTenantId(1L);
request.setCommunityId(1L);
request.setContactName("张三");
request.setPhone("13800000000");
request.setBuilding("1栋");
request.setRoom("101");
request.setDetail("门口");
return request;
}
}