Files
hfb_sys/backend/internal/modules/order/pricing_insurance_test.go
T

97 lines
2.9 KiB
Go

package order
import (
"testing"
"hfb_sys/backend/internal/model"
"gorm.io/datatypes"
)
func TestCalculateInsuranceFeeCent(t *testing.T) {
tests := []struct {
name string
ownerCent int64
bps int
want int64
}{
{name: "普通赔付不收费", ownerCent: 10000, bps: 0, want: 0},
{name: "普通保险百分之八", ownerCent: 10000, bps: 800, want: 800},
{name: "极品保险百分之四", ownerCent: 10000, bps: 400, want: 400},
{name: "四舍五入到分", ownerCent: 12345, bps: 800, want: 988},
{name: "服务费不超过到手租金", ownerCent: 100, bps: 10000, want: 100},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := calculateInsuranceFeeCent(tt.ownerCent, tt.bps); got != tt.want {
t.Fatalf("calculateInsuranceFeeCent() = %d, want %d", got, tt.want)
}
})
}
}
func TestCalculateCheckoutSettlementDeductsPremiumInsuranceFee(t *testing.T) {
order := model.RentalOrder{
RentAmountCent: 38300,
OwnerRentAmountCent: 35300,
DepositAmountCent: 15000,
InsuranceFeeBps: 400,
AccountSnapshot: datatypes.JSON([]byte(`{
"haf_coin_amount": 100000000,
"asset_summary": {
"price_breakdown": {
"buyer_coin_base_price": 263,
"seller_coin_base_price": 233,
"consumable_price": 120
}
}
}`)),
}
settlement := calculateCheckoutSettlement(order, 12000, 100, 0)
if settlement.InsuranceFeeBps != 400 || settlement.InsuranceFeeCent != 932 {
t.Fatalf("保险费用快照不正确: bps=%d fee=%d", settlement.InsuranceFeeBps, settlement.InsuranceFeeCent)
}
if settlement.OwnerRentIncomeCent != 34368 {
t.Fatalf("号主净租金 = %d, want 34368", settlement.OwnerRentIncomeCent)
}
if settlement.PlatformFeeCent != 3932 {
t.Fatalf("平台收入 = %d, want 3932", settlement.PlatformFeeCent)
}
}
func TestCalculateCheckoutSettlementUsesActualPureCoinAsInsuranceBase(t *testing.T) {
order := model.RentalOrder{
RentAmountCent: 25000,
OwnerRentAmountCent: 25000,
DepositAmountCent: 15000,
InsuranceFeeBps: 800,
AccountSnapshot: datatypes.JSON([]byte(`{
"haf_coin_amount": 100000000,
"asset_summary": {
"price_breakdown": {
"buyer_ratio": 40,
"seller_ratio": 40,
"buyer_coin_base_price": 250,
"seller_coin_base_price": 250,
"consumable_price": 0
}
}
}`)),
}
settlement := calculateCheckoutSettlement(order, 5000, 50, 0)
if settlement.PureCoinAmountCent != 12500 {
t.Fatalf("实际纯币原价 = %d, want 12500", settlement.PureCoinAmountCent)
}
if settlement.InsuranceFeeCent != 1000 {
t.Fatalf("保险费用 = %d, want 1000", settlement.InsuranceFeeCent)
}
if settlement.ExtraItemAmountCent != 5000 {
t.Fatalf("额外物品 = %d, want 5000", settlement.ExtraItemAmountCent)
}
if settlement.OwnerRentIncomeCent != 16500 {
t.Fatalf("号主净租金 = %d, want 16500", settlement.OwnerRentIncomeCent)
}
}