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) } } }