支持客服主动发起申诉
This commit is contained in:
@@ -169,6 +169,58 @@ func TestRepositoryCancelRestoresCheckoutDisputeStatus(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAdminCreateByOrderCreatesAdminInitiatedDispute(t *testing.T) {
|
||||
db := setupDisputeTestDB(t)
|
||||
repo := NewRepository(db)
|
||||
adminID := uint64(88)
|
||||
owner, renter, order := createDisputeOrderFixture(t, db, model.RentalOrder{
|
||||
Status: "renting",
|
||||
HandoffStatus: "received",
|
||||
SettlementStatus: "unsettled",
|
||||
})
|
||||
|
||||
created, err := repo.AdminCreateByOrder(t.Context(), adminID, order.ID, AdminCreateRequest{
|
||||
Type: "cannot_login",
|
||||
TargetRole: "owner",
|
||||
Description: "客服核查后主动发起申诉",
|
||||
}, AuditMeta{})
|
||||
if err != nil {
|
||||
t.Fatalf("后台发起申诉失败: %v", err)
|
||||
}
|
||||
if created.InitiatorType != disputeInitiatorAdmin || created.InitiatorAdminID == nil || *created.InitiatorAdminID != adminID {
|
||||
t.Fatalf("发起方 = %s/%v, want admin/%d", created.InitiatorType, created.InitiatorAdminID, adminID)
|
||||
}
|
||||
if created.InitiatorID != 0 || created.TargetUserID != owner.ID {
|
||||
t.Fatalf("initiator/target = %d/%d, want 0/%d", created.InitiatorID, created.TargetUserID, owner.ID)
|
||||
}
|
||||
|
||||
var saved model.RentalOrder
|
||||
if err := db.First(&saved, order.ID).Error; err != nil {
|
||||
t.Fatalf("读取订单失败: %v", err)
|
||||
}
|
||||
if saved.Status != "disputing" || saved.HandoffStatus != "received" || saved.SettlementStatus != "unsettled" {
|
||||
t.Fatalf("订单状态 = %s/%s/%s, want disputing/received/unsettled", saved.Status, saved.HandoffStatus, saved.SettlementStatus)
|
||||
}
|
||||
|
||||
if _, err := repo.FindForUser(t.Context(), renter.ID, created.ID); err != nil {
|
||||
t.Fatalf("租客应能看到客服发起的申诉: %v", err)
|
||||
}
|
||||
if _, err := repo.FindForUser(t.Context(), owner.ID, created.ID); err != nil {
|
||||
t.Fatalf("号主应能看到客服发起的申诉: %v", err)
|
||||
}
|
||||
if _, err := repo.CancelByOrder(t.Context(), renter.ID, order.ID); err == nil {
|
||||
t.Fatal("客服发起的申诉不应允许租客取消")
|
||||
}
|
||||
|
||||
var record model.HandoffRecord
|
||||
if err := db.Where("order_id = ? AND type = ?", order.ID, "admin_dispute_opened").First(&record).Error; err != nil {
|
||||
t.Fatalf("读取客服发起申诉记录失败: %v", err)
|
||||
}
|
||||
if record.FromUserID != adminID || record.ToUserID != owner.ID {
|
||||
t.Fatalf("record from/to = %d/%d, want %d/%d", record.FromUserID, record.ToUserID, adminID, owner.ID)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPlatformManagedArbitrationUsesOfflineSettlement(t *testing.T) {
|
||||
db := setupDisputeTestDB(t)
|
||||
repo := NewRepository(db)
|
||||
|
||||
Reference in New Issue
Block a user