diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb index a8b119229..257b90321 100644 --- a/app/controllers/settings_controller.rb +++ b/app/controllers/settings_controller.rb @@ -51,12 +51,12 @@ class SettingsController < ApplicationController def plugin @plugin = Redmine::Plugin.find(params[:id]) if request.post? - Setting["plugin_#{@plugin.id}"] = params[:settings] + Setting.send "plugin_#{@plugin.id}=", params[:settings] flash[:notice] = l(:notice_successful_update) redirect_to :action => 'plugin', :id => @plugin.id else @partial = @plugin.settings[:partial] - @settings = Setting["plugin_#{@plugin.id}"] + @settings = Setting.send "plugin_#{@plugin.id}" end rescue Redmine::PluginNotFound render_404 diff --git a/test/fixtures/plugins/foo_plugin/_foo_plugin_settings.html.erb b/test/fixtures/plugins/foo_plugin/_foo_plugin_settings.html.erb new file mode 100644 index 000000000..44537d3c3 --- /dev/null +++ b/test/fixtures/plugins/foo_plugin/_foo_plugin_settings.html.erb @@ -0,0 +1 @@ +

<%= text_field_tag 'settings[sample_setting]', @settings['sample_setting'] %>

diff --git a/test/functional/settings_controller_test.rb b/test/functional/settings_controller_test.rb index 13a0bcca2..fb9bb6286 100644 --- a/test/functional/settings_controller_test.rb +++ b/test/functional/settings_controller_test.rb @@ -56,4 +56,33 @@ class SettingsControllerTest < ActionController::TestCase assert_equal %w(issue_added issue_updated news_added), Setting.notified_events assert_equal 'Test footer', Setting.emails_footer end + + def test_get_plugin_settings + Setting.stubs(:plugin_foo).returns({'sample_setting' => 'Plugin setting value'}) + ActionController::Base.view_paths.unshift(File.join(Rails.root, "test/fixtures/plugins")) + Redmine::Plugin.register :foo do + settings :partial => "foo_plugin/foo_plugin_settings" + end + + get :plugin, :id => 'foo' + assert_response :success + assert_template 'plugin' + assert_tag 'form', :attributes => {:action => '/settings/plugin/foo'}, + :descendant => {:tag => 'input', :attributes => {:name => 'settings[sample_setting]', :value => 'Plugin setting value'}} + + Redmine::Plugin.clear + end + + def test_get_invalid_plugin_settings + get :plugin, :id => 'none' + assert_response 404 + end + + def test_post_plugin_settings + Setting.expects(:plugin_foo=).with({'sample_setting' => 'Value'}).returns(true) + Redmine::Plugin.register(:foo) {} + + post :plugin, :id => 'foo', :settings => {'sample_setting' => 'Value'} + assert_redirected_to '/settings/plugin/foo' + end end