package order import ( "testing" "hfb_sys/backend/internal/model" "gorm.io/datatypes" ) func TestCalculateCheckoutSettlementRefundsUnusedRent(t *testing.T) { order := model.RentalOrder{ RentAmount: 383, OwnerRentAmount: 353, DepositAmount: 150, 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, 7, 90, 0) if settlement.ActualRentAmount != 244 { t.Fatalf("ActualRentAmount = %.2f, want 244.00", settlement.ActualRentAmount) } if settlement.OwnerRentIncome != 217 { t.Fatalf("OwnerRentIncome = %.2f, want 217.00", settlement.OwnerRentIncome) } if settlement.PlatformFee != 27 { t.Fatalf("PlatformFee = %.2f, want 27.00", settlement.PlatformFee) } if settlement.RentRefund != 139 { t.Fatalf("RentRefund = %.2f, want 139.00", settlement.RentRefund) } if settlement.DepositRefund != 150 { t.Fatalf("DepositRefund = %.2f, want 150.00", settlement.DepositRefund) } if settlement.RenterRefund != 289 { t.Fatalf("RenterRefund = %.2f, want 289.00", settlement.RenterRefund) } } func TestCalculateCheckoutSettlementUsesBuyerAndSellerRatiosSeparately(t *testing.T) { order := model.RentalOrder{ RentAmount: 383, OwnerRentAmount: 353, DepositAmount: 150, 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, 0, 50, 0) if settlement.ActualRentAmount != 132 { t.Fatalf("租客侧实际租金 = %.2f, want 132.00", settlement.ActualRentAmount) } if settlement.OwnerRentIncome != 117 { t.Fatalf("卖家侧租金收入 = %.2f, want 117.00", settlement.OwnerRentIncome) } if settlement.PlatformFee != 15 { t.Fatalf("平台差价 = %.2f, want 15.00", settlement.PlatformFee) } } func TestCalculateCheckoutSettlementAddsDepositCompensation(t *testing.T) { order := model.RentalOrder{ RentAmount: 383, OwnerRentAmount: 353, DepositAmount: 150, 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, 120, 100, 30) if settlement.ActualRentAmount != 383 { t.Fatalf("ActualRentAmount = %.2f, want 383.00", settlement.ActualRentAmount) } if settlement.OwnerRentIncome != 353 { t.Fatalf("OwnerRentIncome = %.2f, want 353.00", settlement.OwnerRentIncome) } if settlement.DepositCompensation != 30 { t.Fatalf("DepositCompensation = %.2f, want 30.00", settlement.DepositCompensation) } if settlement.OwnerIncome != 383 { t.Fatalf("OwnerIncome = %.2f, want 383.00", settlement.OwnerIncome) } if settlement.RenterRefund != 120 { t.Fatalf("RenterRefund = %.2f, want 120.00", settlement.RenterRefund) } }