|
- package ratio_setting
-
- import (
- "testing"
-
- "github.com/QuantumNous/new-api/types"
- "github.com/stretchr/testify/require"
- )
-
- func TestModelDisplayPricingRoundTripNormalizeAndSort(t *testing.T) {
- require.NoError(t, UpdateModelDisplayPricingByJSONString(`{}`))
-
- jsonStr := `{
- "kling-video": [
- {"specification":"1080p","official_supplier_tip":"1080P","price":0.58333,"unit":"second","sort_order":3},
- {"specification":"768p-6s","official_supplier_tip":"768P 6s","price":0.33333,"unit":"second","sort_order":1,"discount_rate":0.8},
- {"specification":"768p-10s","official_supplier_tip":"768P 10s","price":0.4,"unit":"second","sort_order":2,"discount_rate":0}
- ]
- }`
-
- require.NoError(t, UpdateModelDisplayPricingByJSONString(jsonStr))
- items := GetModelDisplayPricing("kling-video")
- require.Len(t, items, 3)
- require.Equal(t, "768p-6s", items[0].Specification)
- require.Equal(t, 0.8, items[0].DiscountRate)
- require.Equal(t, "768p-10s", items[1].Specification)
- require.Equal(t, 1.0, items[1].DiscountRate)
- require.Equal(t, "1080p", items[2].Specification)
- require.Equal(t, 1.0, items[2].DiscountRate)
-
- items[0].Specification = "mutated"
- require.Equal(t, "768p-6s", GetModelDisplayPricing("kling-video")[0].Specification)
-
- roundTrip := ModelDisplayPricing2JSONString()
- require.NoError(t, UpdateModelDisplayPricingByJSONString(roundTrip))
- require.Equal(t, "768p-6s", GetModelDisplayPricing("kling-video")[0].Specification)
- }
-
- func TestSetModelDisplayPricingValidation(t *testing.T) {
- tests := []struct {
- name string
- model string
- items []types.ModelDisplayPricingItem
- want string
- }{
- {
- name: "empty_model",
- model: "",
- items: []types.ModelDisplayPricingItem{{Specification: "768p", Price: 1, Unit: "second"}},
- want: "model name is required",
- },
- {
- name: "empty_specification",
- model: "kling-video",
- items: []types.ModelDisplayPricingItem{{Price: 1, Unit: "second"}},
- want: "specification is required",
- },
- {
- name: "negative_price",
- model: "kling-video",
- items: []types.ModelDisplayPricingItem{{Specification: "768p", Price: -1, Unit: "second"}},
- want: "price must be >= 0",
- },
- {
- name: "empty_unit",
- model: "kling-video",
- items: []types.ModelDisplayPricingItem{{Specification: "768p", Price: 1}},
- want: "unit is required",
- },
- {
- name: "bad_discount",
- model: "kling-video",
- items: []types.ModelDisplayPricingItem{{Specification: "768p", Price: 1, Unit: "second", DiscountRate: 1.2}},
- want: "discount_rate must be > 0 and <= 1",
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- err := SetModelDisplayPricing(tt.model, tt.items)
- require.Error(t, err)
- require.Contains(t, err.Error(), tt.want)
- })
- }
- }
-
- func TestDeleteModelDisplayPricing(t *testing.T) {
- require.NoError(t, UpdateModelDisplayPricingByJSONString(`{}`))
- require.NoError(t, SetModelDisplayPricing("kling-video", []types.ModelDisplayPricingItem{
- {Specification: "768p", Price: 1, Unit: "second"},
- }))
- require.Len(t, GetModelDisplayPricing("kling-video"), 1)
- require.NoError(t, DeleteModelDisplayPricing("kling-video"))
- require.Empty(t, GetModelDisplayPricing("kling-video"))
- }
|