fix(force-recharge): 补充强充配置缺失的接口和数据库字段
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m19s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m19s
- 订单管理:增加 payment_method 字段支持,合并代购订单逻辑 - 套餐系列分配:增加强充配置字段(enable_force_recharge、force_recharge_amount、force_recharge_trigger_type) - 数据库迁移:添加 force_recharge_trigger_type 字段 - 测试:更新订单服务测试用例 - OpenSpec:归档 fix-force-recharge-missing-interfaces 变更
This commit is contained in:
@@ -44,7 +44,10 @@ func setupOrderTestEnv(t *testing.T) *testEnv {
|
||||
orderItemStore := postgres.NewOrderItemStore(tx, rdb)
|
||||
walletStore := postgres.NewWalletStore(tx, rdb)
|
||||
|
||||
ctx := context.Background()
|
||||
ctx := middleware.SetUserContext(context.Background(), &middleware.UserContextInfo{
|
||||
UserID: 1,
|
||||
UserType: constants.UserTypePlatform,
|
||||
})
|
||||
|
||||
carrier := &model.Carrier{
|
||||
CarrierCode: "TEST_CARRIER_ORDER",
|
||||
@@ -151,9 +154,10 @@ func TestOrderService_Create(t *testing.T) {
|
||||
|
||||
t.Run("创建单卡订单成功", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
|
||||
resp, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
@@ -170,9 +174,10 @@ func TestOrderService_Create(t *testing.T) {
|
||||
|
||||
t.Run("创建设备订单成功", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeDevice,
|
||||
DeviceID: &env.device.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeDevice,
|
||||
DeviceID: &env.device.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
|
||||
resp, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
@@ -183,8 +188,9 @@ func TestOrderService_Create(t *testing.T) {
|
||||
|
||||
t.Run("单卡订单缺少卡ID", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
|
||||
_, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
@@ -196,8 +202,9 @@ func TestOrderService_Create(t *testing.T) {
|
||||
|
||||
t.Run("设备订单缺少设备ID", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeDevice,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeDevice,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
|
||||
_, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
@@ -206,15 +213,50 @@ func TestOrderService_Create(t *testing.T) {
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, errors.CodeInvalidParam, appErr.Code)
|
||||
})
|
||||
|
||||
t.Run("钱包支付创建订单", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
|
||||
resp, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, model.PaymentStatusPending, resp.PaymentStatus)
|
||||
assert.False(t, resp.IsPurchaseOnBehalf)
|
||||
})
|
||||
|
||||
t.Run("线下支付创建订单", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodOffline,
|
||||
}
|
||||
|
||||
platformCtx := middleware.SetUserContext(context.Background(), &middleware.UserContextInfo{
|
||||
UserID: 1,
|
||||
UserType: constants.UserTypePlatform,
|
||||
})
|
||||
|
||||
resp, err := env.svc.Create(platformCtx, req, "", 0)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, model.PaymentStatusPaid, resp.PaymentStatus)
|
||||
assert.True(t, resp.IsPurchaseOnBehalf)
|
||||
assert.NotNil(t, resp.PaidAt)
|
||||
})
|
||||
}
|
||||
|
||||
func TestOrderService_Get(t *testing.T) {
|
||||
env := setupOrderTestEnv(t)
|
||||
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
created, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -240,9 +282,10 @@ func TestOrderService_List(t *testing.T) {
|
||||
|
||||
for i := 0; i < 3; i++ {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
_, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -278,9 +321,10 @@ func TestOrderService_Cancel(t *testing.T) {
|
||||
env := setupOrderTestEnv(t)
|
||||
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
created, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -304,9 +348,10 @@ func TestOrderService_Cancel(t *testing.T) {
|
||||
|
||||
t.Run("无权操作", func(t *testing.T) {
|
||||
newReq := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
newOrder, err := env.svc.Create(env.ctx, newReq, model.BuyerTypeAgent, env.shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -324,9 +369,10 @@ func TestOrderService_WalletPay(t *testing.T) {
|
||||
|
||||
t.Run("钱包支付成功", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
created, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -351,9 +397,10 @@ func TestOrderService_WalletPay(t *testing.T) {
|
||||
|
||||
t.Run("无权操作", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
created, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -367,9 +414,10 @@ func TestOrderService_WalletPay(t *testing.T) {
|
||||
|
||||
t.Run("重复支付-幂等成功", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
created, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -383,9 +431,10 @@ func TestOrderService_WalletPay(t *testing.T) {
|
||||
|
||||
t.Run("已取消订单无法支付", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
created, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -406,9 +455,10 @@ func TestOrderService_HandlePaymentCallback(t *testing.T) {
|
||||
|
||||
t.Run("支付回调成功", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
created, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -424,9 +474,10 @@ func TestOrderService_HandlePaymentCallback(t *testing.T) {
|
||||
|
||||
t.Run("幂等处理-已支付订单", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &env.card.ID,
|
||||
PackageIDs: []uint{env.pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
created, err := env.svc.Create(env.ctx, req, model.BuyerTypeAgent, env.shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -463,7 +514,10 @@ func TestOrderService_IdempotencyAndConcurrency(t *testing.T) {
|
||||
orderItemStore := postgres.NewOrderItemStore(tx, rdb)
|
||||
walletStore := postgres.NewWalletStore(tx, rdb)
|
||||
|
||||
ctx := context.Background()
|
||||
ctx := middleware.SetUserContext(context.Background(), &middleware.UserContextInfo{
|
||||
UserID: 1,
|
||||
UserType: constants.UserTypePlatform,
|
||||
})
|
||||
|
||||
carrier := &model.Carrier{
|
||||
CarrierCode: "TEST_CARRIER_IDEM",
|
||||
@@ -546,9 +600,10 @@ func TestOrderService_IdempotencyAndConcurrency(t *testing.T) {
|
||||
|
||||
t.Run("串行幂等支付测试", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
created, err := orderSvc.Create(userCtx, req, model.BuyerTypeAgent, shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -574,9 +629,10 @@ func TestOrderService_IdempotencyAndConcurrency(t *testing.T) {
|
||||
|
||||
t.Run("串行回调幂等测试", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
created, err := orderSvc.Create(userCtx, req, model.BuyerTypeAgent, shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -598,9 +654,10 @@ func TestOrderService_IdempotencyAndConcurrency(t *testing.T) {
|
||||
|
||||
t.Run("已取消订单回调测试", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{pkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
created, err := orderSvc.Create(userCtx, req, model.BuyerTypeAgent, shop.ID)
|
||||
require.NoError(t, err)
|
||||
@@ -637,7 +694,10 @@ func TestOrderService_ForceRechargeValidation(t *testing.T) {
|
||||
orderItemStore := postgres.NewOrderItemStore(tx, rdb)
|
||||
walletStore := postgres.NewWalletStore(tx, rdb)
|
||||
|
||||
ctx := context.Background()
|
||||
ctx := middleware.SetUserContext(context.Background(), &middleware.UserContextInfo{
|
||||
UserID: 1,
|
||||
UserType: constants.UserTypePlatform,
|
||||
})
|
||||
|
||||
carrier := &model.Carrier{
|
||||
CarrierCode: "TEST_CARRIER_FR",
|
||||
@@ -728,9 +788,10 @@ func TestOrderService_ForceRechargeValidation(t *testing.T) {
|
||||
|
||||
t.Run("强充验证-金额不足拒绝", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{cheapPkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{cheapPkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
|
||||
_, err := orderSvc.Create(userCtx, req, model.BuyerTypeAgent, shop.ID)
|
||||
@@ -742,9 +803,10 @@ func TestOrderService_ForceRechargeValidation(t *testing.T) {
|
||||
|
||||
t.Run("强充验证-金额足够通过", func(t *testing.T) {
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{expensivePkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{expensivePkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
|
||||
resp, err := orderSvc.Create(userCtx, req, model.BuyerTypeAgent, shop.ID)
|
||||
@@ -766,9 +828,10 @@ func TestOrderService_ForceRechargeValidation(t *testing.T) {
|
||||
require.NoError(t, iotCardStore.Create(ctx, card2))
|
||||
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card2.ID,
|
||||
PackageIDs: []uint{cheapPkg.ID},
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card2.ID,
|
||||
PackageIDs: []uint{cheapPkg.ID},
|
||||
PaymentMethod: model.PaymentMethodWallet,
|
||||
}
|
||||
|
||||
resp, err := orderSvc.Create(userCtx, req, model.BuyerTypeAgent, shop.ID)
|
||||
@@ -793,7 +856,10 @@ func TestOrderService_GetPurchaseCheck(t *testing.T) {
|
||||
orderItemStore := postgres.NewOrderItemStore(tx, rdb)
|
||||
walletStore := postgres.NewWalletStore(tx, rdb)
|
||||
|
||||
ctx := context.Background()
|
||||
ctx := middleware.SetUserContext(context.Background(), &middleware.UserContextInfo{
|
||||
UserID: 1,
|
||||
UserType: constants.UserTypePlatform,
|
||||
})
|
||||
|
||||
carrier := &model.Carrier{
|
||||
CarrierCode: "TEST_CARRIER_PC",
|
||||
@@ -905,140 +971,6 @@ func TestOrderService_GetPurchaseCheck(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestOrderService_CreatePurchaseOnBehalf(t *testing.T) {
|
||||
tx := testutils.NewTestTransaction(t)
|
||||
rdb := testutils.GetTestRedis(t)
|
||||
testutils.CleanTestRedisKeys(t, rdb)
|
||||
|
||||
iotCardStore := postgres.NewIotCardStore(tx, rdb)
|
||||
deviceStore := postgres.NewDeviceStore(tx, rdb)
|
||||
packageStore := postgres.NewPackageStore(tx)
|
||||
seriesAllocationStore := postgres.NewShopSeriesAllocationStore(tx)
|
||||
packageSeriesStore := postgres.NewPackageSeriesStore(tx)
|
||||
carrierStore := postgres.NewCarrierStore(tx)
|
||||
shopStore := postgres.NewShopStore(tx, rdb)
|
||||
orderStore := postgres.NewOrderStore(tx, rdb)
|
||||
orderItemStore := postgres.NewOrderItemStore(tx, rdb)
|
||||
walletStore := postgres.NewWalletStore(tx, rdb)
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
carrier := &model.Carrier{
|
||||
CarrierCode: "TEST_CARRIER_POB",
|
||||
CarrierName: "测试运营商代购",
|
||||
CarrierType: constants.CarrierTypeCMCC,
|
||||
Status: constants.StatusEnabled,
|
||||
}
|
||||
require.NoError(t, carrierStore.Create(ctx, carrier))
|
||||
|
||||
shop := &model.Shop{
|
||||
ShopName: "测试店铺POB",
|
||||
ShopCode: "TEST_SHOP_POB",
|
||||
Level: 1,
|
||||
Status: constants.StatusEnabled,
|
||||
BaseModel: model.BaseModel{Creator: 1, Updater: 1},
|
||||
}
|
||||
require.NoError(t, shopStore.Create(ctx, shop))
|
||||
|
||||
series := &model.PackageSeries{
|
||||
SeriesCode: "TEST_SERIES_POB",
|
||||
SeriesName: "测试套餐系列代购",
|
||||
Description: "测试用",
|
||||
Status: constants.StatusEnabled,
|
||||
BaseModel: model.BaseModel{Creator: 1, Updater: 1},
|
||||
}
|
||||
require.NoError(t, packageSeriesStore.Create(ctx, series))
|
||||
|
||||
allocation := &model.ShopSeriesAllocation{
|
||||
ShopID: shop.ID,
|
||||
SeriesID: series.ID,
|
||||
AllocatorShopID: 0,
|
||||
BaseCommissionMode: model.CommissionModePercent,
|
||||
BaseCommissionValue: 100,
|
||||
Status: constants.StatusEnabled,
|
||||
BaseModel: model.BaseModel{Creator: 1, Updater: 1},
|
||||
}
|
||||
require.NoError(t, seriesAllocationStore.Create(ctx, allocation))
|
||||
|
||||
pkg := &model.Package{
|
||||
PackageCode: "TEST_PKG_POB",
|
||||
PackageName: "测试套餐代购",
|
||||
SeriesID: series.ID,
|
||||
PackageType: "formal",
|
||||
DurationMonths: 1,
|
||||
DataAmountMB: 1024,
|
||||
SuggestedRetailPrice: 10000,
|
||||
Status: constants.StatusEnabled,
|
||||
ShelfStatus: constants.ShelfStatusOn,
|
||||
BaseModel: model.BaseModel{Creator: 1, Updater: 1},
|
||||
}
|
||||
require.NoError(t, packageStore.Create(ctx, pkg))
|
||||
|
||||
shopIDPtr := &shop.ID
|
||||
card := &model.IotCard{
|
||||
ICCID: "89860000000000000POB",
|
||||
ShopID: shopIDPtr,
|
||||
CarrierID: carrier.ID,
|
||||
SeriesAllocationID: &allocation.ID,
|
||||
Status: constants.StatusEnabled,
|
||||
BaseModel: model.BaseModel{Creator: 1, Updater: 1},
|
||||
}
|
||||
require.NoError(t, iotCardStore.Create(ctx, card))
|
||||
|
||||
purchaseValidationSvc := purchase_validation.New(tx, iotCardStore, deviceStore, packageStore, seriesAllocationStore)
|
||||
logger := zap.NewNop()
|
||||
orderSvc := New(tx, orderStore, orderItemStore, walletStore, purchaseValidationSvc, nil, seriesAllocationStore, iotCardStore, deviceStore, nil, nil, logger)
|
||||
|
||||
t.Run("代购订单创建成功", func(t *testing.T) {
|
||||
req := &dto.CreatePurchaseOnBehalfRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{pkg.ID},
|
||||
}
|
||||
|
||||
resp, err := orderSvc.CreatePurchaseOnBehalf(ctx, req, 1)
|
||||
require.NoError(t, err)
|
||||
assert.NotZero(t, resp.ID)
|
||||
assert.Equal(t, model.PaymentStatusPaid, resp.PaymentStatus)
|
||||
assert.Equal(t, model.PaymentMethodOffline, resp.PaymentMethod)
|
||||
assert.Equal(t, model.BuyerTypeAgent, resp.BuyerType)
|
||||
assert.Equal(t, shop.ID, resp.BuyerID)
|
||||
assert.NotNil(t, resp.PaidAt)
|
||||
|
||||
expectedCostPrice := pkg.SuggestedRetailPrice - (pkg.SuggestedRetailPrice * allocation.BaseCommissionValue / 1000)
|
||||
assert.Equal(t, expectedCostPrice, resp.TotalAmount)
|
||||
|
||||
var usageCount int64
|
||||
err = tx.Model(&model.PackageUsage{}).Where("order_id = ?", resp.ID).Count(&usageCount).Error
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, int64(1), usageCount)
|
||||
})
|
||||
|
||||
t.Run("代购订单-资源未分配拒绝", func(t *testing.T) {
|
||||
cardNoShop := &model.IotCard{
|
||||
ICCID: "89860000000000NOSHOP",
|
||||
ShopID: nil,
|
||||
CarrierID: carrier.ID,
|
||||
SeriesAllocationID: &allocation.ID,
|
||||
Status: constants.StatusEnabled,
|
||||
BaseModel: model.BaseModel{Creator: 1, Updater: 1},
|
||||
}
|
||||
require.NoError(t, iotCardStore.Create(ctx, cardNoShop))
|
||||
|
||||
req := &dto.CreatePurchaseOnBehalfRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &cardNoShop.ID,
|
||||
PackageIDs: []uint{pkg.ID},
|
||||
}
|
||||
|
||||
_, err := orderSvc.CreatePurchaseOnBehalf(ctx, req, 1)
|
||||
require.Error(t, err)
|
||||
appErr, ok := err.(*errors.AppError)
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, errors.CodeInvalidParam, appErr.Code)
|
||||
})
|
||||
}
|
||||
|
||||
func TestOrderService_WalletPay_PurchaseOnBehalf(t *testing.T) {
|
||||
tx := testutils.NewTestTransaction(t)
|
||||
rdb := testutils.GetTestRedis(t)
|
||||
@@ -1055,7 +987,10 @@ func TestOrderService_WalletPay_PurchaseOnBehalf(t *testing.T) {
|
||||
orderItemStore := postgres.NewOrderItemStore(tx, rdb)
|
||||
walletStore := postgres.NewWalletStore(tx, rdb)
|
||||
|
||||
ctx := context.Background()
|
||||
ctx := middleware.SetUserContext(context.Background(), &middleware.UserContextInfo{
|
||||
UserID: 1,
|
||||
UserType: constants.UserTypePlatform,
|
||||
})
|
||||
|
||||
carrier := &model.Carrier{
|
||||
CarrierCode: "TEST_CARRIER_WP",
|
||||
@@ -1134,13 +1069,14 @@ func TestOrderService_WalletPay_PurchaseOnBehalf(t *testing.T) {
|
||||
orderSvc := New(tx, orderStore, orderItemStore, walletStore, purchaseValidationSvc, nil, seriesAllocationStore, iotCardStore, deviceStore, nil, nil, logger)
|
||||
|
||||
t.Run("代购订单无法进行钱包支付", func(t *testing.T) {
|
||||
req := &dto.CreatePurchaseOnBehalfRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{pkg.ID},
|
||||
req := &dto.CreateOrderRequest{
|
||||
OrderType: model.OrderTypeSingleCard,
|
||||
IotCardID: &card.ID,
|
||||
PackageIDs: []uint{pkg.ID},
|
||||
PaymentMethod: model.PaymentMethodOffline,
|
||||
}
|
||||
|
||||
created, err := orderSvc.CreatePurchaseOnBehalf(ctx, req, 1)
|
||||
created, err := orderSvc.Create(ctx, req, model.BuyerTypeAgent, shop.ID)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = orderSvc.WalletPay(ctx, created.ID, model.BuyerTypeAgent, shop.ID)
|
||||
|
||||
Reference in New Issue
Block a user