102 lines
2.8 KiB
Go
102 lines
2.8 KiB
Go
package dispute
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"hfb_sys/backend/internal/model"
|
|
)
|
|
|
|
func TestBuildArbitrationSettlementSkipsFrozenReleaseWhenNoFrozenBalance(t *testing.T) {
|
|
order := model.RentalOrder{
|
|
ID: 11,
|
|
OrderNo: "RO202606080001",
|
|
RenterID: 101,
|
|
OwnerID: 202,
|
|
RentAmountCent: 20000,
|
|
OwnerRentAmountCent: 18000,
|
|
DepositAmountCent: 10000,
|
|
}
|
|
|
|
settlement, err := buildArbitrationSettlement(order, ArbitrateRequest{
|
|
Result: "release_deposit",
|
|
Remark: "测试裁决",
|
|
}, 0)
|
|
if err != nil {
|
|
t.Fatalf("buildArbitrationSettlement() error = %v", err)
|
|
}
|
|
|
|
for _, entry := range settlement.Entries {
|
|
if entry.BizType == "arbitration_release_frozen" {
|
|
t.Fatalf("不应在无冻结余额时生成解冻流水: %+v", entry)
|
|
}
|
|
}
|
|
if settlement.OwnerIncomeAmountCent != 18000 {
|
|
t.Fatalf("OwnerIncomeAmountCent = %d, want 18000", settlement.OwnerIncomeAmountCent)
|
|
}
|
|
if settlement.RenterRefundAmountCent != 10000 {
|
|
t.Fatalf("RenterRefundAmountCent = %d, want 10000", settlement.RenterRefundAmountCent)
|
|
}
|
|
for _, entry := range settlement.Entries {
|
|
if entry.UserID == order.RenterID && entry.BizType == "arbitration_renter_refund" {
|
|
t.Fatalf("外部支付订单不应生成租客钱包退款流水: %+v", entry)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestBuildArbitrationSettlementLimitsFrozenReleaseToExistingBalance(t *testing.T) {
|
|
order := model.RentalOrder{
|
|
ID: 12,
|
|
OrderNo: "RO202606080002",
|
|
RenterID: 101,
|
|
OwnerID: 202,
|
|
RentAmountCent: 20000,
|
|
OwnerRentAmountCent: 18000,
|
|
DepositAmountCent: 10000,
|
|
}
|
|
|
|
settlement, err := buildArbitrationSettlement(order, ArbitrateRequest{
|
|
Result: "order_close",
|
|
Remark: "测试裁决",
|
|
}, 12000)
|
|
if err != nil {
|
|
t.Fatalf("buildArbitrationSettlement() error = %v", err)
|
|
}
|
|
|
|
releaseEntryCount := 0
|
|
for _, entry := range settlement.Entries {
|
|
if entry.BizType != "arbitration_release_frozen" {
|
|
continue
|
|
}
|
|
releaseEntryCount++
|
|
if entry.AmountCent != 12000 {
|
|
t.Fatalf("release frozen amount cent = %d, want 12000", entry.AmountCent)
|
|
}
|
|
}
|
|
if releaseEntryCount != 1 {
|
|
t.Fatalf("release frozen entry count = %d, want 1", releaseEntryCount)
|
|
}
|
|
}
|
|
|
|
func TestBuildArbitrationHandoffContent(t *testing.T) {
|
|
content := buildArbitrationHandoffContent(ArbitrateRequest{
|
|
Result: "partial_refund",
|
|
Remark: "账号异常,退还部分租金。",
|
|
}, arbitrationSettlement{
|
|
RenterRefundAmountCent: 8000,
|
|
OwnerIncomeAmountCent: 12000,
|
|
})
|
|
|
|
wantParts := []string{
|
|
"客服仲裁结果:部分退款",
|
|
"处理说明:账号异常,退还部分租金。",
|
|
"退款给租客:¥80.0",
|
|
"结算给号主:¥120.0",
|
|
}
|
|
for _, part := range wantParts {
|
|
if !strings.Contains(content, part) {
|
|
t.Fatalf("handoff content = %q, want include %q", content, part)
|
|
}
|
|
}
|
|
}
|