Index: app/controllers/my_controller.rb =================================================================== --- app/controllers/my_controller.rb (revision 3739) +++ app/controllers/my_controller.rb (working copy) @@ -136,7 +136,7 @@ block = params[:block].to_s.underscore (render :nothing => true; return) unless block && (BLOCKS.keys.include? block) @user = User.current - layout = @user.pref[:my_page_layout] || {} + layout = @user.pref[:my_page_layout] || DEFAULT_LAYOUT.dup # remove if already present in a group %w(top left right).each {|f| (layout[f] ||= []).delete block } # add it on top @@ -152,7 +152,7 @@ block = params[:block].to_s.underscore @user = User.current # remove block in all groups - layout = @user.pref[:my_page_layout] || {} + layout = @user.pref[:my_page_layout] || DEFAULT_LAYOUT.dup %w(top left right).each {|f| (layout[f] ||= []).delete block } @user.pref[:my_page_layout] = layout @user.pref.save @@ -168,7 +168,7 @@ if group.is_a?(String) group_items = (params["list-#{group}"] || []).collect(&:underscore) if group_items and group_items.is_a? Array - layout = @user.pref[:my_page_layout] || {} + layout = @user.pref[:my_page_layout] || DEFAULT_LAYOUT.dup # remove group blocks if they are presents in other groups %w(top left right).each {|f| layout[f] = (layout[f] || []) - group_items Index: test/functional/my_controller_test.rb =================================================================== --- test/functional/my_controller_test.rb (revision 3739) +++ test/functional/my_controller_test.rb (working copy) @@ -129,6 +129,43 @@ assert_response :success assert_equal ['documents', 'calendar', 'latestnews'], User.find(2).pref[:my_page_layout]['left'] end + + context "MyPage layout for new users" do + setup do + @user = User.find(2) + assert_equal @user.preference, nil + @user.save + end + + should "add block" do + xhr :post, :add_block, :block => 'issueswatched' + assert_response :success + + @user.reload + assert @user.pref[:my_page_layout]['top'].include?('issueswatched') + assert @user.pref[:my_page_layout]['right'].include?('issuesreportedbyme') + end + + should "remove block" do + xhr :post, :remove_block, :block => 'issueswatched' + assert_response :success + + @user.reload + assert !@user.pref[:my_page_layout]['top'].include?('issueswatched') + assert @user.pref[:my_page_layout]['right'].include?('issuesreportedbyme') + end + + should "order blocks" do + xhr :post, :order_blocks, :group => 'top', 'list-top' => ['issuesreportedbyme', 'issuesassignedtome'] + assert_response :success + + @user.reload + assert_equal ['issuesreportedbyme', 'issuesassignedtome'], @user.pref[:my_page_layout]['top'] + + assert_equal [], @user.pref[:my_page_layout]['left'] + assert_equal [], @user.pref[:my_page_layout]['right'] + end + end context "POST to reset_rss_key" do context "with an existing rss_token" do