Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

96 wiersze
3.1 KiB

  1. package ratio_setting
  2. import (
  3. "testing"
  4. "github.com/QuantumNous/new-api/types"
  5. "github.com/stretchr/testify/require"
  6. )
  7. func TestModelDisplayPricingRoundTripNormalizeAndSort(t *testing.T) {
  8. require.NoError(t, UpdateModelDisplayPricingByJSONString(`{}`))
  9. jsonStr := `{
  10. "kling-video": [
  11. {"specification":"1080p","official_supplier_tip":"1080P","price":0.58333,"unit":"second","sort_order":3},
  12. {"specification":"768p-6s","official_supplier_tip":"768P 6s","price":0.33333,"unit":"second","sort_order":1,"discount_rate":0.8},
  13. {"specification":"768p-10s","official_supplier_tip":"768P 10s","price":0.4,"unit":"second","sort_order":2,"discount_rate":0}
  14. ]
  15. }`
  16. require.NoError(t, UpdateModelDisplayPricingByJSONString(jsonStr))
  17. items := GetModelDisplayPricing("kling-video")
  18. require.Len(t, items, 3)
  19. require.Equal(t, "768p-6s", items[0].Specification)
  20. require.Equal(t, 0.8, items[0].DiscountRate)
  21. require.Equal(t, "768p-10s", items[1].Specification)
  22. require.Equal(t, 1.0, items[1].DiscountRate)
  23. require.Equal(t, "1080p", items[2].Specification)
  24. require.Equal(t, 1.0, items[2].DiscountRate)
  25. items[0].Specification = "mutated"
  26. require.Equal(t, "768p-6s", GetModelDisplayPricing("kling-video")[0].Specification)
  27. roundTrip := ModelDisplayPricing2JSONString()
  28. require.NoError(t, UpdateModelDisplayPricingByJSONString(roundTrip))
  29. require.Equal(t, "768p-6s", GetModelDisplayPricing("kling-video")[0].Specification)
  30. }
  31. func TestSetModelDisplayPricingValidation(t *testing.T) {
  32. tests := []struct {
  33. name string
  34. model string
  35. items []types.ModelDisplayPricingItem
  36. want string
  37. }{
  38. {
  39. name: "empty_model",
  40. model: "",
  41. items: []types.ModelDisplayPricingItem{{Specification: "768p", Price: 1, Unit: "second"}},
  42. want: "model name is required",
  43. },
  44. {
  45. name: "empty_specification",
  46. model: "kling-video",
  47. items: []types.ModelDisplayPricingItem{{Price: 1, Unit: "second"}},
  48. want: "specification is required",
  49. },
  50. {
  51. name: "negative_price",
  52. model: "kling-video",
  53. items: []types.ModelDisplayPricingItem{{Specification: "768p", Price: -1, Unit: "second"}},
  54. want: "price must be >= 0",
  55. },
  56. {
  57. name: "empty_unit",
  58. model: "kling-video",
  59. items: []types.ModelDisplayPricingItem{{Specification: "768p", Price: 1}},
  60. want: "unit is required",
  61. },
  62. {
  63. name: "bad_discount",
  64. model: "kling-video",
  65. items: []types.ModelDisplayPricingItem{{Specification: "768p", Price: 1, Unit: "second", DiscountRate: 1.2}},
  66. want: "discount_rate must be > 0 and <= 1",
  67. },
  68. }
  69. for _, tt := range tests {
  70. t.Run(tt.name, func(t *testing.T) {
  71. err := SetModelDisplayPricing(tt.model, tt.items)
  72. require.Error(t, err)
  73. require.Contains(t, err.Error(), tt.want)
  74. })
  75. }
  76. }
  77. func TestDeleteModelDisplayPricing(t *testing.T) {
  78. require.NoError(t, UpdateModelDisplayPricingByJSONString(`{}`))
  79. require.NoError(t, SetModelDisplayPricing("kling-video", []types.ModelDisplayPricingItem{
  80. {Specification: "768p", Price: 1, Unit: "second"},
  81. }))
  82. require.Len(t, GetModelDisplayPricing("kling-video"), 1)
  83. require.NoError(t, DeleteModelDisplayPricing("kling-video"))
  84. require.Empty(t, GetModelDisplayPricing("kling-video"))
  85. }