71 lines
2.1 KiB
Go
71 lines
2.1 KiB
Go
package pickup
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"hfb_sys/backend/internal/model"
|
|
|
|
"gorm.io/datatypes"
|
|
)
|
|
|
|
func TestBuildPickupPriceSnapshotSplitsOwnerPrice(t *testing.T) {
|
|
raw, err := json.Marshal(map[string]any{
|
|
"price_breakdown": map[string]any{
|
|
"seller_coin_base_price": 233,
|
|
"seller_total_price": 353,
|
|
"platform_markup_amount": 30,
|
|
"consumable_price": 120,
|
|
"seller_ratio": 42.9,
|
|
"buyer_ratio": 35.1,
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("构造资产快照失败: %v", err)
|
|
}
|
|
|
|
snapshot := buildPickupPriceSnapshot(
|
|
model.RentalListing{PriceCent: 38300},
|
|
model.GameAccount{HafCoinAmount: 100000000, AssetSummary: datatypes.JSON(raw)},
|
|
)
|
|
|
|
assertInt64(t, "网站售价", snapshot.ListingPriceCent, 38300)
|
|
assertInt64(t, "号主纯比价格", snapshot.OwnerPurePriceCent, 23300)
|
|
assertInt64(t, "额外物品价格", snapshot.OwnerExtraItemPriceCent, 12000)
|
|
assertInt64(t, "号主总价", snapshot.OwnerTotalPriceCent, 35300)
|
|
assertInt64(t, "兼容号主价", snapshot.OwnerPriceCent, 35300)
|
|
assertInt64(t, "网站加价", snapshot.WebsiteProfitCent, 3000)
|
|
if snapshot.SellerRatio != 42.9 || snapshot.BuyerRatio != 35.1 {
|
|
t.Fatalf("比例 = %.2f/%.2f, want 42.90/35.10", snapshot.SellerRatio, snapshot.BuyerRatio)
|
|
}
|
|
}
|
|
|
|
func TestBuildPickupPriceSnapshotFallsBackToSplitSum(t *testing.T) {
|
|
raw, err := json.Marshal(map[string]any{
|
|
"price_breakdown": map[string]any{
|
|
"seller_coin_base_price": 200,
|
|
"consumable_price": 50,
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("构造资产快照失败: %v", err)
|
|
}
|
|
|
|
snapshot := buildPickupPriceSnapshot(
|
|
model.RentalListing{PriceCent: 30000},
|
|
model.GameAccount{AssetSummary: datatypes.JSON(raw)},
|
|
)
|
|
|
|
assertInt64(t, "拆分合计总价", snapshot.OwnerTotalPriceCent, 25000)
|
|
assertInt64(t, "纯比价格", snapshot.OwnerPurePriceCent, 20000)
|
|
assertInt64(t, "额外物品价格", snapshot.OwnerExtraItemPriceCent, 5000)
|
|
assertInt64(t, "网站加价兜底", snapshot.WebsiteProfitCent, 5000)
|
|
}
|
|
|
|
func assertInt64(t *testing.T, name string, got, want int64) {
|
|
t.Helper()
|
|
if got != want {
|
|
t.Fatalf("%s = %d, want %d", name, got, want)
|
|
}
|
|
}
|