作废链接和取消订单
This commit is contained in:
@@ -41,7 +41,7 @@ func TestDeliveryLinkGenerateAuthorizeAndRevoke(t *testing.T) {
|
||||
t.Fatalf("authorize delivery link: %v", err)
|
||||
}
|
||||
|
||||
if err := deliverySvc.RevokeDeliveryLink(merchantID, created.Order.OrderNo); err != nil {
|
||||
if err := deliverySvc.RevokeDeliveryLink(merchantID, 0, created.Order.OrderNo); err != nil {
|
||||
t.Fatalf("revoke delivery link: %v", err)
|
||||
}
|
||||
if _, err := deliverySvc.GetOrder(created.Order.OrderNo, DeliveryLinkAuth{Exp: link.Exp, Sign: link.Sign}); err == nil {
|
||||
@@ -61,7 +61,7 @@ func TestDeliveryLinkGenerateAuthorizeAndRevoke(t *testing.T) {
|
||||
t.Fatalf("delivery_link_revoked_at should be stored")
|
||||
}
|
||||
|
||||
restored, err := deliverySvc.RestoreDeliveryLink(merchantID, created.Order.OrderNo, "https://shop.example")
|
||||
restored, err := deliverySvc.RestoreDeliveryLink(merchantID, 0, created.Order.OrderNo, "https://shop.example")
|
||||
if err != nil {
|
||||
t.Fatalf("restore delivery link: %v", err)
|
||||
}
|
||||
@@ -78,6 +78,44 @@ func TestDeliveryLinkGenerateAuthorizeAndRevoke(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeliveryLinkRejectedAfterOrderCancelled(t *testing.T) {
|
||||
db := newServiceTestDB(t)
|
||||
merchantID, product := seedFulfillmentMerchant(t, db, "delivery-cancel", 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-cancel-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.CancelOrderByUser(merchantID, 1, created.Order.OrderNo, "测试取消"); err != nil {
|
||||
t.Fatalf("cancel order: %v", err)
|
||||
}
|
||||
// 取消后既有链接立即失效,无法再打开。
|
||||
if _, err := deliverySvc.GetOrder(created.Order.OrderNo, DeliveryLinkAuth{Exp: link.Exp, Sign: link.Sign}); err == nil {
|
||||
t.Fatalf("cancelled order link should be rejected")
|
||||
} else if sc, ok := err.(interface{ HTTPStatus() int }); !ok || sc.HTTPStatus() != 403 {
|
||||
t.Fatalf("expected 403 for cancelled order link, got %v", err)
|
||||
}
|
||||
// 取消后也不能再生成新链接或恢复链接。
|
||||
if _, err := deliverySvc.GetOrCreateDeliveryLink(merchantID, created.Order.OrderNo, "https://shop.example"); err == nil {
|
||||
t.Fatalf("cancelled order should not generate a new link")
|
||||
}
|
||||
if _, err := deliverySvc.RestoreDeliveryLink(merchantID, 1, created.Order.OrderNo, "https://shop.example"); err == nil {
|
||||
t.Fatalf("cancelled order should not restore a link")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeliveryGoodIDIncludesMedalAndCoinProducts(t *testing.T) {
|
||||
cases := map[string]string{
|
||||
"honor_medal_x2": "682ef39ca8f40c4234c59f45",
|
||||
|
||||
Reference in New Issue
Block a user