setting: configure toggles as true/false instead of array (#43326)
Signed-off-by: bergquist <carl.bergquist@gmail.com>
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"gopkg.in/ini.v1"
|
||||
)
|
||||
|
||||
func TestFeatureToggles(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
conf map[string]string
|
||||
err error
|
||||
expectedToggles map[string]bool
|
||||
defaultToggles map[string]bool
|
||||
}{
|
||||
{
|
||||
name: "can parse feature toggles passed in the `enable` array",
|
||||
conf: map[string]string{
|
||||
"enable": "feature1,feature2",
|
||||
},
|
||||
expectedToggles: map[string]bool{
|
||||
"feature1": true,
|
||||
"feature2": true,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "can parse feature toggles listed under [feature_toggles]",
|
||||
conf: map[string]string{
|
||||
"enable": "feature1,feature2",
|
||||
"feature3": "true",
|
||||
},
|
||||
expectedToggles: map[string]bool{
|
||||
"feature1": true,
|
||||
"feature2": true,
|
||||
"feature3": true,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "toggles under [feature_toggles] overrides those in the array",
|
||||
conf: map[string]string{
|
||||
"enable": "feature1,feature2",
|
||||
"feature2": "false",
|
||||
},
|
||||
expectedToggles: map[string]bool{
|
||||
"feature1": true,
|
||||
"feature2": false,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "invalid boolean value should return syntax error",
|
||||
conf: map[string]string{
|
||||
"enable": "feature1,feature2",
|
||||
"feature2": "invalid",
|
||||
},
|
||||
expectedToggles: map[string]bool{},
|
||||
err: strconv.ErrSyntax,
|
||||
},
|
||||
{
|
||||
name: "should override default feature toggles",
|
||||
defaultToggles: map[string]bool{
|
||||
"feature1": true,
|
||||
},
|
||||
conf: map[string]string{
|
||||
"feature1": "false",
|
||||
},
|
||||
expectedToggles: map[string]bool{
|
||||
"feature1": false,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
f := ini.Empty()
|
||||
|
||||
toggles, _ := f.NewSection("feature_toggles")
|
||||
for k, v := range tc.conf {
|
||||
_, err := toggles.NewKey(k, v)
|
||||
require.ErrorIs(t, err, nil)
|
||||
}
|
||||
|
||||
dt := map[string]bool{}
|
||||
if len(tc.defaultToggles) > 0 {
|
||||
dt = tc.defaultToggles
|
||||
}
|
||||
|
||||
featureToggles, err := overrideDefaultWithConfiguration(f, dt)
|
||||
require.ErrorIs(t, err, tc.err)
|
||||
|
||||
if err == nil {
|
||||
for k, v := range featureToggles {
|
||||
require.Equal(t, tc.expectedToggles[k], v, tc.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user