Allow placeholder for types number and longtext (#13809)

Этот коммит содержится в:
Ben Schumacher
2020-02-05 10:46:58 +01:00
коммит произвёл GitHub
родитель 435d43049f
Коммит 57717a23af
2 изменённых файлов: 80 добавлений и 32 удалений

Просмотреть файл

@@ -76,7 +76,7 @@ type PluginSetting struct {
// The help text to display alongside the "Regenerate" button for settings of the "generated" type. // The help text to display alongside the "Regenerate" button for settings of the "generated" type.
RegenerateHelpText string `json:"regenerate_help_text,omitempty" yaml:"regenerate_help_text,omitempty"` RegenerateHelpText string `json:"regenerate_help_text,omitempty" yaml:"regenerate_help_text,omitempty"`
// The placeholder to display for "text", "generated" and "username" types when blank. // The placeholder to display for "generated", "text", "longtext", "number" and "username" types when blank.
Placeholder string `json:"placeholder" yaml:"placeholder"` Placeholder string `json:"placeholder" yaml:"placeholder"`
// The default value of the setting. // The default value of the setting.
@@ -386,7 +386,11 @@ func (s *PluginSetting) isValid() error {
return errors.New("should not set RegenerateHelpText for setting type that is not generated") return errors.New("should not set RegenerateHelpText for setting type that is not generated")
} }
if s.Placeholder != "" && !(pluginSettingType == Text || pluginSettingType == Generated || pluginSettingType == Username) { if s.Placeholder != "" && !(pluginSettingType == Generated ||
pluginSettingType == Text ||
pluginSettingType == LongText ||
pluginSettingType == Number ||
pluginSettingType == Username) {
return errors.New("should not set Placeholder for setting type not in text, generated or username") return errors.New("should not set Placeholder for setting type not in text, generated or username")
} }

Просмотреть файл

@@ -105,46 +105,90 @@ func TestIsValidSettingsSchema(t *testing.T) {
} }
func TestSettingIsValid(t *testing.T) { func TestSettingIsValid(t *testing.T) {
testCases := []struct { for name, test := range map[string]struct {
Title string Setting PluginSetting
setting *PluginSetting
ExpectError bool ExpectError bool
}{ }{
{"Invalid setting type", &PluginSetting{Type: "invalid"}, true}, "Invalid setting type": {
{"RegenerateHelpText error", &PluginSetting{Type: "text", RegenerateHelpText: "some text"}, true}, PluginSetting{Type: "invalid"},
{"Placeholder error", &PluginSetting{Type: "bool", Placeholder: "some text"}, true}, true,
{"Nil Options", &PluginSetting{Type: "bool"}, false}, },
{"Options error", &PluginSetting{Type: "generated", Options: []*PluginOption{}}, true}, "RegenerateHelpText error": {
{"Options displayName error", &PluginSetting{Type: "radio", Options: []*PluginOption{ PluginSetting{Type: "text", RegenerateHelpText: "some text"},
{ true,
Value: "some value", },
"Placeholder error": {
PluginSetting{Type: "bool", Placeholder: "some text"},
true,
},
"Nil Options": {
PluginSetting{Type: "bool"},
false,
},
"Options error": {
PluginSetting{Type: "generated", Options: []*PluginOption{}},
true,
},
"Options displayName error": {
PluginSetting{
Type: "radio",
Options: []*PluginOption{{
Value: "some value",
}},
}, },
}}, true}, true,
{"Options value error", &PluginSetting{Type: "radio", Options: []*PluginOption{ },
{ "Options value error": {
DisplayName: "some name", PluginSetting{
Type: "radio",
Options: []*PluginOption{{
DisplayName: "some name",
}},
}, },
}}, true}, true,
{"Happy case", &PluginSetting{Type: "radio", Options: []*PluginOption{ },
{ "Happy case": {
DisplayName: "Name", PluginSetting{
Value: "value", Type: "radio",
Options: []*PluginOption{{
DisplayName: "Name",
Value: "value",
}},
}, },
}}, false}, false,
{ },
"Valid number setting", "Valid number setting": {
&PluginSetting{ PluginSetting{
Type: "number", Type: "number",
Default: 10, Default: 10,
}, },
false, false,
}, },
} "Placeholder is disallowed for bool settings": {
PluginSetting{
for _, tc := range testCases { Type: "bool",
t.Run(tc.Title, func(t *testing.T) { Placeholder: "some Text",
err := tc.setting.isValid() },
if tc.ExpectError { true,
},
"Placeholder is allowed for text settings": {
PluginSetting{
Type: "text",
Placeholder: "some Text",
},
false,
},
"Placeholder is allowed for long text settings": {
PluginSetting{
Type: "longtext",
Placeholder: "some Text",
},
false,
},
} {
t.Run(name, func(t *testing.T) {
err := test.Setting.isValid()
if test.ExpectError {
assert.Error(t, err) assert.Error(t, err)
} else { } else {
assert.NoError(t, err) assert.NoError(t, err)