退款纠纷分配
This commit is contained in:
@@ -261,3 +261,78 @@ func TestBuildArbitrationHandoffContent(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 复现线上单:预收 94.7(号主 66.7 + 平台 28),部分退 50 时,号主不应吃掉平台加价。
|
||||
func TestPartialRefundReservesPlatformFee(t *testing.T) {
|
||||
order := model.RentalOrder{
|
||||
ID: 30,
|
||||
OrderNo: "RO-ARBIT-PARTIAL-001",
|
||||
RenterID: 9233,
|
||||
OwnerID: 7463,
|
||||
RentAmountCent: 9470,
|
||||
OwnerRentAmountCent: 6670,
|
||||
DepositAmountCent: 0,
|
||||
}
|
||||
|
||||
settlement, err := buildArbitrationSettlement(order, ArbitrateRequest{
|
||||
Result: "partial_refund",
|
||||
AmountCent: 5000,
|
||||
Remark: "没打完 号主登录不上",
|
||||
}, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("buildArbitrationSettlement() error = %v", err)
|
||||
}
|
||||
if settlement.RenterRefundAmountCent != 5000 {
|
||||
t.Fatalf("RenterRefundAmountCent = %d, want 5000", settlement.RenterRefundAmountCent)
|
||||
}
|
||||
|
||||
// 未退租金 44.7:平台按比例预留 round(28 * 44.7/94.7)=13.22 → 号主 31.48
|
||||
wantOwner := partialRefundOwnerIncomeCent(9470, 6670, 0, 5000)
|
||||
if settlement.OwnerIncomeAmountCent != wantOwner {
|
||||
t.Fatalf("OwnerIncomeAmountCent = %d, want %d", settlement.OwnerIncomeAmountCent, wantOwner)
|
||||
}
|
||||
if settlement.OwnerIncomeAmountCent >= 4470 {
|
||||
t.Fatalf("号主收入 %d 不应吞掉整笔剩余 4470(含平台费)", settlement.OwnerIncomeAmountCent)
|
||||
}
|
||||
platformKeep := 9470 - settlement.RenterRefundAmountCent - settlement.OwnerIncomeAmountCent
|
||||
if platformKeep <= 0 {
|
||||
t.Fatalf("平台留存 = %d, 部分退款后应保留平台加价份额", platformKeep)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPartialRefundFullRentRetainedGivesOwnerFullOwnerRent(t *testing.T) {
|
||||
// 只退押金:号主拿满预收号主租金,平台留满预收平台费
|
||||
order := model.RentalOrder{
|
||||
RentAmountCent: 9470,
|
||||
OwnerRentAmountCent: 6670,
|
||||
DepositAmountCent: 20000,
|
||||
}
|
||||
settlement, err := buildArbitrationSettlement(order, ArbitrateRequest{
|
||||
Result: "partial_refund",
|
||||
AmountCent: 20000,
|
||||
}, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("buildArbitrationSettlement() error = %v", err)
|
||||
}
|
||||
if settlement.OwnerIncomeAmountCent != 6670 {
|
||||
t.Fatalf("OwnerIncomeAmountCent = %d, want 6670", settlement.OwnerIncomeAmountCent)
|
||||
}
|
||||
if settlement.RenterRefundAmountCent != 20000 {
|
||||
t.Fatalf("RenterRefundAmountCent = %d, want 20000", settlement.RenterRefundAmountCent)
|
||||
}
|
||||
platformKeep := 9470 + 20000 - settlement.RenterRefundAmountCent - settlement.OwnerIncomeAmountCent
|
||||
if platformKeep != 2800 {
|
||||
t.Fatalf("platformKeep = %d, want 2800", platformKeep)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPartialRefundOwnerIncomeCentUnit(t *testing.T) {
|
||||
// 无平台费时,未退租金全部给号主
|
||||
if got := partialRefundOwnerIncomeCent(10000, 10000, 0, 3000); got != 7000 {
|
||||
t.Fatalf("no platform fee: got %d, want 7000", got)
|
||||
}
|
||||
// 全额退:号主 0
|
||||
if got := partialRefundOwnerIncomeCent(9470, 6670, 0, 9470); got != 0 {
|
||||
t.Fatalf("full refund: got %d, want 0", got)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user