From 700a1a2253d53dcb61e3fc4a0f6d30c42cb755bb Mon Sep 17 00:00:00 2001 From: Leon Mika Date: Mon, 23 Jan 2023 21:45:12 +1100 Subject: [PATCH] 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. --- internal/dynamo-browse/controllers/iface.go | 1 + .../dynamo-browse/controllers/settings.go | 22 +++++++++++++++++++ .../controllers/settings_test.go | 9 ++++++++ .../providers/settingstore/settingstore.go | 8 +++++++ 4 files changed, 40 insertions(+) diff --git a/internal/dynamo-browse/controllers/iface.go b/internal/dynamo-browse/controllers/iface.go index a604192..3673221 100644 --- a/internal/dynamo-browse/controllers/iface.go +++ b/internal/dynamo-browse/controllers/iface.go @@ -23,4 +23,5 @@ type SettingsProvider interface { SetDefaultLimit(limit int) error ScriptLookupFS() ([]fs.FS, error) SetScriptLookupPaths(value string) error + ScriptLookupPaths() string } diff --git a/internal/dynamo-browse/controllers/settings.go b/internal/dynamo-browse/controllers/settings.go index 6ff8fc0..ec69dfc 100644 --- a/internal/dynamo-browse/controllers/settings.go +++ b/internal/dynamo-browse/controllers/settings.go @@ -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) } diff --git a/internal/dynamo-browse/controllers/settings_test.go b/internal/dynamo-browse/controllers/settings_test.go index f2682da..e7c7315 100644 --- a/internal/dynamo-browse/controllers/settings_test.go +++ b/internal/dynamo-browse/controllers/settings_test.go @@ -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))) }) } diff --git a/internal/dynamo-browse/providers/settingstore/settingstore.go b/internal/dynamo-browse/providers/settingstore/settingstore.go index 33c7a27..30db68e 100644 --- a/internal/dynamo-browse/providers/settingstore/settingstore.go +++ b/internal/dynamo-browse/providers/settingstore/settingstore.go @@ -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 {