f995a868e4
rafactor: payment
92 lines
2.9 KiB
Go
92 lines
2.9 KiB
Go
package controller
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/QuantumNous/new-api/common"
|
|
"github.com/QuantumNous/new-api/setting"
|
|
"github.com/QuantumNous/new-api/setting/operation_setting"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestFormatWaffoPancakeAmount_UsesDisplayPriceString(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
amount float64
|
|
expected string
|
|
}{
|
|
{name: "whole amount", amount: 29, expected: "29.00"},
|
|
{name: "decimal amount", amount: 29.9, expected: "29.90"},
|
|
{name: "round half up to cents", amount: 29.999, expected: "30.00"},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
require.Equal(t, tc.expected, formatWaffoPancakeAmount(tc.amount))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGetWaffoPancakePayMoney(t *testing.T) {
|
|
originalUnitPrice := setting.WaffoPancakeUnitPrice
|
|
originalQuotaDisplayType := operation_setting.GetGeneralSetting().QuotaDisplayType
|
|
originalDiscounts := make(map[int]float64, len(operation_setting.GetPaymentSetting().AmountDiscount))
|
|
for k, v := range operation_setting.GetPaymentSetting().AmountDiscount {
|
|
originalDiscounts[k] = v
|
|
}
|
|
originalTopupGroupRatio := common.TopupGroupRatio2JSONString()
|
|
|
|
t.Cleanup(func() {
|
|
setting.WaffoPancakeUnitPrice = originalUnitPrice
|
|
operation_setting.GetGeneralSetting().QuotaDisplayType = originalQuotaDisplayType
|
|
operation_setting.GetPaymentSetting().AmountDiscount = originalDiscounts
|
|
require.NoError(t, common.UpdateTopupGroupRatioByJSONString(originalTopupGroupRatio))
|
|
})
|
|
|
|
setting.WaffoPancakeUnitPrice = 2.5
|
|
operation_setting.GetPaymentSetting().AmountDiscount = map[int]float64{
|
|
10: 0.8,
|
|
int(common.QuotaPerUnit * 3): 0.5,
|
|
20: 0,
|
|
}
|
|
require.NoError(t, common.UpdateTopupGroupRatioByJSONString(`{"default":1,"vip":1.2}`))
|
|
|
|
testCases := []struct {
|
|
name string
|
|
amount int64
|
|
group string
|
|
quotaDisplayType string
|
|
expected float64
|
|
}{
|
|
{
|
|
name: "currency display applies unit price group ratio and discount",
|
|
amount: 10,
|
|
group: "vip",
|
|
quotaDisplayType: operation_setting.QuotaDisplayTypeUSD,
|
|
expected: 24,
|
|
},
|
|
{
|
|
name: "tokens display converts quota to display units before pricing",
|
|
amount: int64(common.QuotaPerUnit * 3),
|
|
group: "vip",
|
|
quotaDisplayType: operation_setting.QuotaDisplayTypeTokens,
|
|
expected: 4.5,
|
|
},
|
|
{
|
|
name: "non-positive discount falls back to no discount",
|
|
amount: 20,
|
|
group: "default",
|
|
quotaDisplayType: operation_setting.QuotaDisplayTypeUSD,
|
|
expected: 50,
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
operation_setting.GetGeneralSetting().QuotaDisplayType = tc.quotaDisplayType
|
|
actual := getWaffoPancakePayMoney(tc.amount, tc.group)
|
|
require.InDelta(t, tc.expected, actual, 0.000001)
|
|
})
|
|
}
|
|
}
|