summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2017-03-15 17:52:41 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2017-03-15 17:52:41 +0000
commitd21627b70f5431de33a8c532b7b73799c5ae1700 (patch)
tree0b4b700e6b7093f085408d93a508ec363d28fed7
parent945f3f949d40ef3ef2e0a394b6f9062818029127 (diff)
downloadredmine-d21627b70f5431de33a8c532b7b73799c5ae1700.tar.gz
redmine-d21627b70f5431de33a8c532b7b73799c5ae1700.zip
Clear settings for blocks that are no longer used.
git-svn-id: http://svn.redmine.org/redmine/trunk@16405 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/user_preference.rb8
-rw-r--r--test/functional/my_controller_test.rb9
-rw-r--r--test/unit/user_preference_test.rb11
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