优化:已交付订单保留复制/打开发货链接,去掉作废操作
- 已交付订单仍可复用未过期链接查看兑换结果,但不再生成/续期新链接 - 商户后台已交付订单仅显示复制/打开,已作废/已过期单独标识 - 发货中/已取消订单不展示链接操作,避免无效按钮
This commit is contained in:
@@ -116,6 +116,69 @@ func TestDeliveryLinkRejectedAfterOrderCancelled(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeliveryLinkAfterDeliveredReusesButNeverGenerates(t *testing.T) {
|
||||
db := newServiceTestDB(t)
|
||||
merchantID, product := seedFulfillmentMerchant(t, db, "delivery-done", 5000, 5, 100)
|
||||
fulfillmentSvc := NewFulfillmentService(db, nil)
|
||||
deliverySvc := NewDeliveryService(fulfillmentSvc, "https://bff.example", "dlc", "https://shop.example", "link-secret", 60)
|
||||
|
||||
created, err := fulfillmentSvc.CreateOrder(CreateFulfillmentOrderInput{
|
||||
MerchantID: merchantID,
|
||||
APIClientID: 1,
|
||||
ClientOrderNo: "delivery-done-001",
|
||||
SKU: product.SKU,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("create order: %v", err)
|
||||
}
|
||||
link, err := deliverySvc.GetOrCreateDeliveryLink(merchantID, created.Order.OrderNo, "https://shop.example")
|
||||
if err != nil {
|
||||
t.Fatalf("get delivery link: %v", err)
|
||||
}
|
||||
if _, err := fulfillmentSvc.UpdateFulfillment(FulfillmentUpdateInput{
|
||||
MerchantID: merchantID,
|
||||
APIClientID: 1,
|
||||
OrderNo: created.Order.OrderNo,
|
||||
Status: model.OrderStatusDelivered,
|
||||
}); err != nil {
|
||||
t.Fatalf("mark delivered: %v", err)
|
||||
}
|
||||
// 已交付订单仍可复用未过期的既有链接(查看兑换结果),但不会生成新链接。
|
||||
reused, err := deliverySvc.GetOrCreateDeliveryLink(merchantID, created.Order.OrderNo, "https://shop.example")
|
||||
if err != nil {
|
||||
t.Fatalf("delivered order should reuse existing link: %v", err)
|
||||
}
|
||||
if reused.DeliveryURL != link.DeliveryURL || reused.Exp != link.Exp {
|
||||
t.Fatalf("reused link should match original, got %+v", reused)
|
||||
}
|
||||
// 买家侧仍可通过既有链接只读查看交付结果。
|
||||
if _, err := deliverySvc.GetOrder(created.Order.OrderNo, DeliveryLinkAuth{Exp: link.Exp, Sign: link.Sign}); err != nil {
|
||||
t.Fatalf("delivered order link should stay readable for the buyer: %v", err)
|
||||
}
|
||||
|
||||
// 从未生成过链接的已交付订单,不能再获取新链接。
|
||||
second, err := fulfillmentSvc.CreateOrder(CreateFulfillmentOrderInput{
|
||||
MerchantID: merchantID,
|
||||
APIClientID: 1,
|
||||
ClientOrderNo: "delivery-done-002",
|
||||
SKU: product.SKU,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("create second order: %v", err)
|
||||
}
|
||||
if _, err := fulfillmentSvc.UpdateFulfillment(FulfillmentUpdateInput{
|
||||
MerchantID: merchantID,
|
||||
APIClientID: 1,
|
||||
OrderNo: second.Order.OrderNo,
|
||||
Status: model.OrderStatusDelivered,
|
||||
}); err != nil {
|
||||
t.Fatalf("mark second delivered: %v", err)
|
||||
}
|
||||
if _, err := deliverySvc.GetOrCreateDeliveryLink(merchantID, second.Order.OrderNo, "https://shop.example"); err == nil {
|
||||
t.Fatalf("delivered order without existing link should not generate a new one")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeliveryGoodIDIncludesMedalAndCoinProducts(t *testing.T) {
|
||||
cases := map[string]string{
|
||||
"honor_medal_x2": "682ef39ca8f40c4234c59f45",
|
||||
|
||||
Reference in New Issue
Block a user