修复平台代管订单流程
This commit is contained in:
@@ -169,6 +169,76 @@ func TestRepositoryCancelRestoresCheckoutDisputeStatus(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPlatformManagedArbitrationUsesOfflineSettlement(t *testing.T) {
|
||||
db := setupDisputeTestDB(t)
|
||||
repo := NewRepository(db)
|
||||
adminID := uint64(77)
|
||||
|
||||
owner, renter, order := createDisputeOrderFixture(t, db, model.RentalOrder{
|
||||
Status: "renting",
|
||||
HandoffStatus: "received",
|
||||
SettlementStatus: "unsettled",
|
||||
HandoffMode: "platform",
|
||||
SettlementMode: "platform_managed",
|
||||
ManagedAdminID: &adminID,
|
||||
RentAmountCent: 10000,
|
||||
OwnerRentAmountCent: 8000,
|
||||
PlatformFeeCent: 2000,
|
||||
OfflineSettlementStatus: "none",
|
||||
OfflineSettlementAmountCent: 0,
|
||||
})
|
||||
|
||||
created, err := repo.Create(t.Context(), renter.ID, order.ID, CreateRequest{
|
||||
Type: "cannot_login",
|
||||
Description: "外部上传账号需要客服处理",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("创建申诉失败: %v", err)
|
||||
}
|
||||
var ownerNotificationCount int64
|
||||
if err := db.Model(&model.Notification{}).Where("user_id = ?", owner.ID).Count(&ownerNotificationCount).Error; err != nil {
|
||||
t.Fatalf("统计号主通知失败: %v", err)
|
||||
}
|
||||
if ownerNotificationCount != 0 {
|
||||
t.Fatalf("owner notification count = %d, want 0", ownerNotificationCount)
|
||||
}
|
||||
var adminNotificationCount int64
|
||||
if err := db.Model(&model.AdminNotification{}).Where("admin_user_id = ?", adminID).Count(&adminNotificationCount).Error; err != nil {
|
||||
t.Fatalf("统计客服通知失败: %v", err)
|
||||
}
|
||||
if adminNotificationCount == 0 {
|
||||
t.Fatal("platform managed dispute should notify managed admin")
|
||||
}
|
||||
|
||||
if _, err := repo.Arbitrate(t.Context(), adminID, created.ID, ArbitrateRequest{
|
||||
Result: "release_deposit",
|
||||
Remark: "确认租金给卖家,线下结算",
|
||||
}, AuditMeta{}); err != nil {
|
||||
t.Fatalf("仲裁失败: %v", err)
|
||||
}
|
||||
|
||||
var saved model.RentalOrder
|
||||
if err := db.First(&saved, order.ID).Error; err != nil {
|
||||
t.Fatalf("读取订单失败: %v", err)
|
||||
}
|
||||
if saved.OfflineSettlementStatus != "pending" {
|
||||
t.Fatalf("offline settlement status = %q, want pending", saved.OfflineSettlementStatus)
|
||||
}
|
||||
if saved.OfflineSettlementAmountCent != 8000 {
|
||||
t.Fatalf("offline settlement amount = %d, want 8000", saved.OfflineSettlementAmountCent)
|
||||
}
|
||||
if saved.OwnerSettledAt != nil {
|
||||
t.Fatalf("owner settled at = %#v, want nil before offline settlement", saved.OwnerSettledAt)
|
||||
}
|
||||
var ownerLedgerCount int64
|
||||
if err := db.Model(&model.WalletLedger{}).Where("user_id = ?", owner.ID).Count(&ownerLedgerCount).Error; err != nil {
|
||||
t.Fatalf("统计钱包流水失败: %v", err)
|
||||
}
|
||||
if ownerLedgerCount != 0 {
|
||||
t.Fatalf("owner wallet ledger count = %d, want 0", ownerLedgerCount)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildArbitrationSettlementSkipsFrozenReleaseWhenNoFrozenBalance(t *testing.T) {
|
||||
order := model.RentalOrder{
|
||||
ID: 11,
|
||||
|
||||
Reference in New Issue
Block a user