|
- package ratio_setting
-
- import (
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- )
-
- const defaultGroupRatioJSON = `{"default":1,"vip":1,"svip":1}`
- const defaultGroupGroupRatioJSON = `{"vip":{"edit_this":0.9}}`
-
- // resetGroupRatios restores the default group ratios after each test.
- func resetGroupRatios(t *testing.T) {
- t.Helper()
- t.Cleanup(func() {
- _ = UpdateGroupRatioByJSONString(defaultGroupRatioJSON)
- _ = UpdateGroupGroupRatioByJSONString(defaultGroupGroupRatioJSON)
- })
- }
-
- // --- GetGroupRatio ---
-
- func TestGetGroupRatio_DefaultGroups(t *testing.T) {
- resetGroupRatios(t)
- assert.Equal(t, 1.0, GetGroupRatio("default"))
- assert.Equal(t, 1.0, GetGroupRatio("vip"))
- assert.Equal(t, 1.0, GetGroupRatio("svip"))
- }
-
- func TestGetGroupRatio_UnknownGroup(t *testing.T) {
- resetGroupRatios(t)
- // 不存在的分组应返回 1(降级默认值)
- assert.Equal(t, 1.0, GetGroupRatio("nonexistent"))
- }
-
- func TestGetGroupRatio_UpdateAndRead(t *testing.T) {
- resetGroupRatios(t)
- err := UpdateGroupRatioByJSONString(`{"default":1,"vip":1,"svip":1,"test-group":0.8,"free":0}`)
- require.NoError(t, err)
-
- assert.Equal(t, 0.8, GetGroupRatio("test-group"))
- assert.Equal(t, 0.0, GetGroupRatio("free"))
-
- // 清除自定义分组后应回退到默认值 1
- require.NoError(t, UpdateGroupRatioByJSONString(defaultGroupRatioJSON))
- assert.Equal(t, 1.0, GetGroupRatio("test-group"))
- }
-
- func TestGetGroupRatio_OverrideDefault(t *testing.T) {
- resetGroupRatios(t)
- require.NoError(t, UpdateGroupRatioByJSONString(`{"default":1,"vip":0.5,"svip":1}`))
- assert.Equal(t, 0.5, GetGroupRatio("vip"))
- }
-
- func TestGetGroupRatio_InvalidJSON(t *testing.T) {
- err := UpdateGroupRatioByJSONString(`not json`)
- assert.Error(t, err)
- }
-
- func TestCheckGroupRatio_Negative(t *testing.T) {
- err := CheckGroupRatio(`{"bad":-0.5}`)
- assert.Error(t, err)
- }
-
- func TestCheckGroupRatio_Valid(t *testing.T) {
- err := CheckGroupRatio(`{"ok":0.5,"zero":0}`)
- assert.NoError(t, err)
- }
-
- // --- GetGroupGroupRatio ---
-
- func TestGetGroupGroupRatio_NoSpecialRatio(t *testing.T) {
- resetGroupRatios(t)
- // default 用户使用 default 分组,没有特殊倍率
- ratio, ok := GetGroupGroupRatio("default", "default")
- assert.False(t, ok)
- assert.Equal(t, -1.0, ratio)
- }
-
- func TestGetGroupGroupRatio_DefaultSpecialRatio(t *testing.T) {
- resetGroupRatios(t)
- // 内置默认: vip 用户使用 edit_this 分组 => 0.9
- ratio, ok := GetGroupGroupRatio("vip", "edit_this")
- assert.True(t, ok)
- assert.Equal(t, 0.9, ratio)
- }
-
- func TestGetGroupGroupRatio_UpdateAndRead(t *testing.T) {
- resetGroupRatios(t)
- err := UpdateGroupGroupRatioByJSONString(`{"premium":{"groupA":0.7,"groupB":1.2}}`)
- require.NoError(t, err)
-
- ratio, ok := GetGroupGroupRatio("premium", "groupA")
- assert.True(t, ok)
- assert.Equal(t, 0.7, ratio)
-
- ratio, ok = GetGroupGroupRatio("premium", "groupB")
- assert.True(t, ok)
- assert.Equal(t, 1.2, ratio)
-
- // 不存在的组合
- _, ok = GetGroupGroupRatio("premium", "nonexistent")
- assert.False(t, ok)
-
- _, ok = GetGroupGroupRatio("nonexistent", "groupA")
- assert.False(t, ok)
- }
-
- // --- GetGroupRatioCopy ---
-
- func TestGetGroupRatioCopy_ReturnsCurrentState(t *testing.T) {
- resetGroupRatios(t)
- require.NoError(t, UpdateGroupRatioByJSONString(`{"default":1,"vip":1,"svip":1,"copy-test":2.5}`))
- copy := GetGroupRatioCopy()
- assert.Equal(t, 2.5, copy["copy-test"])
- }
-
- // --- ContainsGroupRatio ---
-
- func TestContainsGroupRatio(t *testing.T) {
- resetGroupRatios(t)
- assert.True(t, ContainsGroupRatio("default"))
- assert.True(t, ContainsGroupRatio("vip"))
- assert.False(t, ContainsGroupRatio("nonexistent_group"))
- }
|