add ff parsing tests to check if types are handled correctly

This commit is contained in:
grambbledook
2026-01-12 16:30:41 +01:00
parent f52a6bf88e
commit bc164a2c4f
2 changed files with 22 additions and 5 deletions
+5 -4
View File
@@ -81,11 +81,8 @@ func ReadFeatureTogglesFromInitFile(featureTogglesSection *ini.Section) (map[str
}
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 {
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 {
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
}
+17 -1
View File
@@ -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{
"enable": "feature1,feature2",
"feature2": "invalid",
@@ -57,6 +57,22 @@ func TestFeatureToggles(t *testing.T) {
expectedToggles: map[string]FeatureToggle{},
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 {