From d21627b70f5431de33a8c532b7b73799c5ae1700 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Wed, 15 Mar 2017 17:52:41 +0000 Subject: [PATCH] Clear settings for blocks that are no longer used. git-svn-id: http://svn.redmine.org/redmine/trunk@16405 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/user_preference.rb | 8 +++++++- test/functional/my_controller_test.rb | 9 +++++---- test/unit/user_preference_test.rb | 11 +++++++++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/app/models/user_preference.rb b/app/models/user_preference.rb index 0ebafa839..e0b17631c 100644 --- a/app/models/user_preference.rb +++ b/app/models/user_preference.rb @@ -23,7 +23,7 @@ class UserPreference < ActiveRecord::Base attr_protected :others, :user_id - before_save :set_others_hash + before_save :set_others_hash, :clear_unused_block_settings safe_attributes 'hide_mail', 'time_zone', @@ -132,4 +132,10 @@ class UserPreference < ActiveRecord::Base block_settings = my_page_settings(block).merge(settings.symbolize_keys) my_page_settings[block] = block_settings end + + def clear_unused_block_settings + blocks = my_page_layout.values.flatten + my_page_settings.keep_if {|block, settings| blocks.include?(block)} + end + private :clear_unused_block_settings end diff --git a/test/functional/my_controller_test.rb b/test/functional/my_controller_test.rb index f79cca5d9..f6c9d5ab2 100644 --- a/test/functional/my_controller_test.rb +++ b/test/functional/my_controller_test.rb @@ -266,12 +266,12 @@ class MyControllerTest < Redmine::ControllerTest user = User.generate!(:language => 'en') @request.session[:user_id] = user.id - xhr :post, :update_page, :settings => {'timelog' => {'days' => '14'}} + xhr :post, :update_page, :settings => {'issuesassignedtome' => {'columns' => ['subject', 'due_date']}} assert_response :success - assert_include '$("#block-timelog").replaceWith(', response.body - assert_include '14 days', response.body + assert_include '$("#block-issuesassignedtome").replaceWith(', response.body + assert_include 'Due date', response.body - assert_equal({:days => "14"}, user.reload.pref.my_page_settings('timelog')) + assert_equal({:columns => ['subject', 'due_date']}, user.reload.pref.my_page_settings('issuesassignedtome')) end def test_add_block @@ -321,6 +321,7 @@ class MyControllerTest < Redmine::ControllerTest end def test_reset_rss_key_without_existing_key + Token.delete_all assert_nil User.find(2).rss_token post :reset_rss_key diff --git a/test/unit/user_preference_test.rb b/test/unit/user_preference_test.rb index bbf5f70ba..757a795d9 100644 --- a/test/unit/user_preference_test.rb +++ b/test/unit/user_preference_test.rb @@ -93,4 +93,15 @@ class UserPreferenceTest < ActiveSupport::TestCase up[:foo] = 'bar' assert_equal 'bar', up[:foo] end + + def test_removing_a_block_should_clear_its_settings + up = User.find(2).pref + up.my_page_layout = {'top' => ['news', 'documents']} + up.my_page_settings = {'news' => {:foo => 'bar'}, 'documents' => {:baz => 'quz'}} + up.save! + + up.remove_block 'news' + up.save! + assert_equal ['documents'], up.my_page_settings.keys + end end -- 2.39.5