mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-08-07 22:02:56 +03:00
UserConfig validation
This commit is contained in:
@@ -164,6 +164,10 @@ func loadUserConfig(configFiles []string, base *UserConfig) (*UserConfig, error)
|
|||||||
if err := yaml.Unmarshal(content, base); err != nil {
|
if err := yaml.Unmarshal(content, base); err != nil {
|
||||||
return nil, fmt.Errorf("The config at `%s` couldn't be parsed, please inspect it before opening up an issue.\n%w", path, err)
|
return nil, fmt.Errorf("The config at `%s` couldn't be parsed, please inspect it before opening up an issue.\n%w", path, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := base.Validate(); err != nil {
|
||||||
|
return nil, fmt.Errorf("The config at `%s` has a validation error.\n%w", path, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return base, nil
|
return base, nil
|
||||||
|
22
pkg/config/user_config_validation.go
Normal file
22
pkg/config/user_config_validation.go
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"slices"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (config *UserConfig) Validate() error {
|
||||||
|
if err := validateEnum("gui.statusPanelView", config.Gui.StatusPanelView, []string{"dashboard", "allBranchesLog"}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func validateEnum(name string, value string, allowedValues []string) error {
|
||||||
|
if slices.Contains(allowedValues, value) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
allowedValuesStr := strings.Join(allowedValues, ", ")
|
||||||
|
return fmt.Errorf("Unexpected value '%s' for '%s'. Allowed values: %s", value, name, allowedValuesStr)
|
||||||
|
}
|
49
pkg/config/user_config_validation_test.go
Normal file
49
pkg/config/user_config_validation_test.go
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUserConfigValidate_enums(t *testing.T) {
|
||||||
|
type testCase struct {
|
||||||
|
value string
|
||||||
|
valid bool
|
||||||
|
}
|
||||||
|
|
||||||
|
scenarios := []struct {
|
||||||
|
name string
|
||||||
|
setup func(config *UserConfig, value string)
|
||||||
|
testCases []testCase
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Gui.StatusPanelView",
|
||||||
|
setup: func(config *UserConfig, value string) {
|
||||||
|
config.Gui.StatusPanelView = value
|
||||||
|
},
|
||||||
|
testCases: []testCase{
|
||||||
|
{value: "dashboard", valid: true},
|
||||||
|
{value: "allBranchesLog", valid: true},
|
||||||
|
{value: "", valid: false},
|
||||||
|
{value: "invalid_value", valid: false},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, s := range scenarios {
|
||||||
|
t.Run(s.name, func(t *testing.T) {
|
||||||
|
for _, testCase := range s.testCases {
|
||||||
|
config := GetDefaultConfig()
|
||||||
|
s.setup(config, testCase.value)
|
||||||
|
err := config.Validate()
|
||||||
|
|
||||||
|
if testCase.valid {
|
||||||
|
assert.NoError(t, err)
|
||||||
|
} else {
|
||||||
|
assert.Error(t, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user