add ff parsing tests to check if types are handled correctly
This commit is contained in:
@@ -81,11 +81,8 @@ func ReadFeatureTogglesFromInitFile(featureTogglesSection *ini.Section) (map[str
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ParseFlag(name, value string) (FeatureToggle, error) {
|
func ParseFlag(name, value string) (FeatureToggle, error) {
|
||||||
var structure any
|
var structure map[string]any
|
||||||
|
|
||||||
if boolean, err := strconv.ParseBool(value); err == nil {
|
|
||||||
return FeatureToggle{Type: Boolean, Name: name, Value: boolean}, nil
|
|
||||||
}
|
|
||||||
if integer, err := strconv.Atoi(value); err == nil {
|
if integer, err := strconv.Atoi(value); err == nil {
|
||||||
return FeatureToggle{Type: Integer, Name: name, Value: integer}, nil
|
return FeatureToggle{Type: Integer, Name: name, Value: integer}, nil
|
||||||
}
|
}
|
||||||
@@ -95,5 +92,9 @@ func ParseFlag(name, value string) (FeatureToggle, error) {
|
|||||||
if err := json.Unmarshal([]byte(value), &structure); err == nil {
|
if err := json.Unmarshal([]byte(value), &structure); err == nil {
|
||||||
return FeatureToggle{Type: Structure, Name: name, Value: structure}, nil
|
return FeatureToggle{Type: Structure, Name: name, Value: structure}, nil
|
||||||
}
|
}
|
||||||
|
if boolean, err := strconv.ParseBool(value); err == nil {
|
||||||
|
return FeatureToggle{Type: Boolean, Name: name, Value: boolean}, nil
|
||||||
|
}
|
||||||
|
|
||||||
return FeatureToggle{Type: String, Name: name, Value: value}, nil
|
return FeatureToggle{Type: String, Name: name, Value: value}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ func TestFeatureToggles(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "invalid boolean value should return syntax error",
|
name: "conflict in type declaration is be detected",
|
||||||
conf: map[string]string{
|
conf: map[string]string{
|
||||||
"enable": "feature1,feature2",
|
"enable": "feature1,feature2",
|
||||||
"feature2": "invalid",
|
"feature2": "invalid",
|
||||||
@@ -57,6 +57,22 @@ func TestFeatureToggles(t *testing.T) {
|
|||||||
expectedToggles: map[string]FeatureToggle{},
|
expectedToggles: map[string]FeatureToggle{},
|
||||||
err: errors.New("type mismatch during flag declaration 'feature2': boolean, string"),
|
err: errors.New("type mismatch during flag declaration 'feature2': boolean, string"),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "type of the feature flag is handled correctly",
|
||||||
|
conf: map[string]string{
|
||||||
|
"feature1": "1", "feature2": "1.0",
|
||||||
|
"feature3": `{"foo":"bar"}`, "feature4": "bar",
|
||||||
|
"feature5": "t", "feature6": "T",
|
||||||
|
},
|
||||||
|
expectedToggles: map[string]FeatureToggle{
|
||||||
|
"feature1": {Name: "feature1", Type: Integer, Value: 1},
|
||||||
|
"feature2": {Name: "feature2", Type: Float, Value: 1.0},
|
||||||
|
"feature3": {Name: "feature3", Type: Structure, Value: map[string]any{"foo": "bar"}},
|
||||||
|
"feature4": {Name: "feature4", Type: String, Value: "bar"},
|
||||||
|
"feature5": {Name: "feature5", Type: Boolean, Value: true},
|
||||||
|
"feature6": {Name: "feature6", Type: Boolean, Value: true},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
|
|||||||
Reference in New Issue
Block a user