Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

127 řádky
3.5 KiB

  1. package ratio_setting
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. "github.com/stretchr/testify/require"
  6. )
  7. const defaultGroupRatioJSON = `{"default":1,"vip":1,"svip":1}`
  8. const defaultGroupGroupRatioJSON = `{"vip":{"edit_this":0.9}}`
  9. // resetGroupRatios restores the default group ratios after each test.
  10. func resetGroupRatios(t *testing.T) {
  11. t.Helper()
  12. t.Cleanup(func() {
  13. _ = UpdateGroupRatioByJSONString(defaultGroupRatioJSON)
  14. _ = UpdateGroupGroupRatioByJSONString(defaultGroupGroupRatioJSON)
  15. })
  16. }
  17. // --- GetGroupRatio ---
  18. func TestGetGroupRatio_DefaultGroups(t *testing.T) {
  19. resetGroupRatios(t)
  20. assert.Equal(t, 1.0, GetGroupRatio("default"))
  21. assert.Equal(t, 1.0, GetGroupRatio("vip"))
  22. assert.Equal(t, 1.0, GetGroupRatio("svip"))
  23. }
  24. func TestGetGroupRatio_UnknownGroup(t *testing.T) {
  25. resetGroupRatios(t)
  26. // 不存在的分组应返回 1(降级默认值)
  27. assert.Equal(t, 1.0, GetGroupRatio("nonexistent"))
  28. }
  29. func TestGetGroupRatio_UpdateAndRead(t *testing.T) {
  30. resetGroupRatios(t)
  31. err := UpdateGroupRatioByJSONString(`{"default":1,"vip":1,"svip":1,"test-group":0.8,"free":0}`)
  32. require.NoError(t, err)
  33. assert.Equal(t, 0.8, GetGroupRatio("test-group"))
  34. assert.Equal(t, 0.0, GetGroupRatio("free"))
  35. // 清除自定义分组后应回退到默认值 1
  36. require.NoError(t, UpdateGroupRatioByJSONString(defaultGroupRatioJSON))
  37. assert.Equal(t, 1.0, GetGroupRatio("test-group"))
  38. }
  39. func TestGetGroupRatio_OverrideDefault(t *testing.T) {
  40. resetGroupRatios(t)
  41. require.NoError(t, UpdateGroupRatioByJSONString(`{"default":1,"vip":0.5,"svip":1}`))
  42. assert.Equal(t, 0.5, GetGroupRatio("vip"))
  43. }
  44. func TestGetGroupRatio_InvalidJSON(t *testing.T) {
  45. err := UpdateGroupRatioByJSONString(`not json`)
  46. assert.Error(t, err)
  47. }
  48. func TestCheckGroupRatio_Negative(t *testing.T) {
  49. err := CheckGroupRatio(`{"bad":-0.5}`)
  50. assert.Error(t, err)
  51. }
  52. func TestCheckGroupRatio_Valid(t *testing.T) {
  53. err := CheckGroupRatio(`{"ok":0.5,"zero":0}`)
  54. assert.NoError(t, err)
  55. }
  56. // --- GetGroupGroupRatio ---
  57. func TestGetGroupGroupRatio_NoSpecialRatio(t *testing.T) {
  58. resetGroupRatios(t)
  59. // default 用户使用 default 分组,没有特殊倍率
  60. ratio, ok := GetGroupGroupRatio("default", "default")
  61. assert.False(t, ok)
  62. assert.Equal(t, -1.0, ratio)
  63. }
  64. func TestGetGroupGroupRatio_DefaultSpecialRatio(t *testing.T) {
  65. resetGroupRatios(t)
  66. // 内置默认: vip 用户使用 edit_this 分组 => 0.9
  67. ratio, ok := GetGroupGroupRatio("vip", "edit_this")
  68. assert.True(t, ok)
  69. assert.Equal(t, 0.9, ratio)
  70. }
  71. func TestGetGroupGroupRatio_UpdateAndRead(t *testing.T) {
  72. resetGroupRatios(t)
  73. err := UpdateGroupGroupRatioByJSONString(`{"premium":{"groupA":0.7,"groupB":1.2}}`)
  74. require.NoError(t, err)
  75. ratio, ok := GetGroupGroupRatio("premium", "groupA")
  76. assert.True(t, ok)
  77. assert.Equal(t, 0.7, ratio)
  78. ratio, ok = GetGroupGroupRatio("premium", "groupB")
  79. assert.True(t, ok)
  80. assert.Equal(t, 1.2, ratio)
  81. // 不存在的组合
  82. _, ok = GetGroupGroupRatio("premium", "nonexistent")
  83. assert.False(t, ok)
  84. _, ok = GetGroupGroupRatio("nonexistent", "groupA")
  85. assert.False(t, ok)
  86. }
  87. // --- GetGroupRatioCopy ---
  88. func TestGetGroupRatioCopy_ReturnsCurrentState(t *testing.T) {
  89. resetGroupRatios(t)
  90. require.NoError(t, UpdateGroupRatioByJSONString(`{"default":1,"vip":1,"svip":1,"copy-test":2.5}`))
  91. copy := GetGroupRatioCopy()
  92. assert.Equal(t, 2.5, copy["copy-test"])
  93. }
  94. // --- ContainsGroupRatio ---
  95. func TestContainsGroupRatio(t *testing.T) {
  96. resetGroupRatios(t)
  97. assert.True(t, ContainsGroupRatio("default"))
  98. assert.True(t, ContainsGroupRatio("vip"))
  99. assert.False(t, ContainsGroupRatio("nonexistent_group"))
  100. }