Fixed bad value errors when trying to set default-limit without specifying a value

Now, when calling 'set' with a name but no value, with a few exceptions, the current setting value will be displayed.
This commit is contained in:
Leon Mika 2023-01-23 21:45:12 +11:00
parent ad1a77a257
commit 700a1a2253
4 changed files with 40 additions and 0 deletions

View file

@ -23,4 +23,5 @@ type SettingsProvider interface {
SetDefaultLimit(limit int) error
ScriptLookupFS() ([]fs.FS, error)
SetScriptLookupPaths(value string) error
ScriptLookupPaths() string
}

View file

@ -44,7 +44,25 @@ func (sc *SettingsController) SetSetting(name string, value string) tea.Msg {
Message: "In read-write mode",
Next: SettingsUpdated{},
}
case "read-only":
if value == "" {
isRO, _ := sc.settings.IsReadOnly()
return events.StatusMsg(fmt.Sprintf("read-only = %v", isRO))
}
newRO, err := strconv.ParseBool(value)
if err != nil {
return events.Error(errors.Wrapf(err, "bad value: %v", value))
}
if err := sc.settings.SetReadOnly(newRO); err != nil {
return events.Error(err)
}
case "default-limit":
if value == "" {
return events.StatusMsg(fmt.Sprintf("default-limit = %v", sc.settings.DefaultLimit()))
}
newLimit, err := strconv.Atoi(value)
if err != nil {
return events.Error(errors.Wrapf(err, "bad value: %v", value))
@ -58,6 +76,10 @@ func (sc *SettingsController) SetSetting(name string, value string) tea.Msg {
Next: SettingsUpdated{},
}
case "script.lookup-path":
if value == "" {
return events.StatusMsg(fmt.Sprintf("script.lookup-path = '%v'", sc.settings.ScriptLookupPaths()))
}
if err := sc.settings.SetScriptLookupPaths(value); err != nil {
return events.Error(err)
}

View file

@ -16,6 +16,9 @@ func TestSettingsController_SetSetting(t *testing.T) {
assert.True(t, srv.settingsController.IsReadOnly())
assert.IsType(t, events.WrappedStatusMsg{}, msg)
assert.IsType(t, controllers.SettingsUpdated{}, msg.(events.WrappedStatusMsg).Next)
msg = invokeCommand(t, srv.settingsController.SetSetting("read-only", ""))
assert.Equal(t, "read-only = true", string(msg.(events.StatusMsg)))
})
t.Run("read-write setting", func(t *testing.T) {
@ -26,6 +29,9 @@ func TestSettingsController_SetSetting(t *testing.T) {
assert.False(t, srv.settingsController.IsReadOnly())
assert.IsType(t, events.WrappedStatusMsg{}, msg)
assert.IsType(t, controllers.SettingsUpdated{}, msg.(events.WrappedStatusMsg).Next)
msg = invokeCommand(t, srv.settingsController.SetSetting("read-only", ""))
assert.Equal(t, "read-only = false", string(msg.(events.StatusMsg)))
})
t.Run("set default limit", func(t *testing.T) {
@ -35,5 +41,8 @@ func TestSettingsController_SetSetting(t *testing.T) {
invokeCommand(t, srv.settingsController.SetSetting("default-limit", "20"))
assert.Equal(t, 20, srv.settingProvider.DefaultLimit())
msg := invokeCommand(t, srv.settingsController.SetSetting("default-limit", ""))
assert.Equal(t, "default-limit = 20", string(msg.(events.StatusMsg)))
})
}

View file

@ -36,6 +36,14 @@ func (c *SettingStore) SetScriptLookupPaths(value string) error {
return c.ws.Set(settingBucket, keyTableReadOnly, value)
}
func (c *SettingStore) ScriptLookupPaths() string {
paths, err := c.getStringValue(keyScriptLookupPath, defaultScriptLookupPaths)
if err != nil {
return ""
}
return paths
}
func (c *SettingStore) ScriptLookupFS() ([]fs.FS, error) {
paths, err := c.getStringValue(keyScriptLookupPath, defaultScriptLookupPaths)
if err != nil {