summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/settings_controller.rb3
-rw-r--r--test/functional/settings_controller_test.rb14
2 files changed, 16 insertions, 1 deletions
diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb
index 51ab871ca..7b2dceb31 100644
--- a/app/controllers/settings_controller.rb
+++ b/app/controllers/settings_controller.rb
@@ -67,7 +67,8 @@ class SettingsController < ApplicationController
end
if request.post?
- Setting.send "plugin_#{@plugin.id}=", params[:settings].permit!.to_h
+ setting = params[:settings] ? params[:settings].permit!.to_h : {}
+ Setting.send "plugin_#{@plugin.id}=", setting
flash[:notice] = l(:notice_successful_update)
redirect_to plugin_settings_path(@plugin)
else
diff --git a/test/functional/settings_controller_test.rb b/test/functional/settings_controller_test.rb
index c506978c0..4c1019191 100644
--- a/test/functional/settings_controller_test.rb
+++ b/test/functional/settings_controller_test.rb
@@ -242,6 +242,20 @@ class SettingsControllerTest < Redmine::ControllerTest
assert_equal({'sample_setting' => 'Value'}, Setting.plugin_foo)
end
+ def test_post_empty_plugin_settings
+ Redmine::Plugin.register(:foo) do
+ settings :partial => 'not blank', # so that configurable? is true
+ :default => {'sample_setting' => 'Plugin setting value'}
+ end
+
+ post :plugin, :params => {
+ :id => 'foo'
+ }
+ assert_redirected_to '/settings/plugin/foo'
+
+ assert_equal({}, Setting.plugin_foo)
+ end
+
def test_post_non_configurable_plugin_settings
Redmine::Plugin.register(:foo) {}