From 838b2d83c25674e8168b90f8aa814271a71972cf Mon Sep 17 00:00:00 2001 From: bsag Date: Mon, 13 Nov 2006 11:53:27 +0000 Subject: [PATCH] Applied Luke's patch to init_not_done_counts to exclude actions from hidden projects in the count shown in the sidebar. git-svn-id: http://www.rousette.org.uk/svn/tracks-repos/trunk@340 a4c988fc-2ded-0310-b66e-134b36920a42 --- tracks/app/controllers/application.rb | 5 +++-- .../test/functional/todo_controller_test.rb | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/tracks/app/controllers/application.rb b/tracks/app/controllers/application.rb index dfc70269..78773ff7 100644 --- a/tracks/app/controllers/application.rb +++ b/tracks/app/controllers/application.rb @@ -92,11 +92,12 @@ class ApplicationController < ActionController::Base init_not_done_counts end - # TODO: Need to exclude hidden projects from this count def init_not_done_counts(parents = ['project','context']) parents.each do |parent| eval("@#{parent}_not_done_counts = Todo.count(:all, - :conditions => ['user_id = ? and type = ? and done = ?', @user.id, \"Immediate\", false], + :conditions => ['todos.user_id = ? and todos.type = ? and todos.done = ? and (projects.state != ? or todos.project_id is ?)', + @user.id, \"Immediate\", false, \"hidden\", nil], + :joins => 'LEFT JOIN projects on projects.id = todos.project_id', :group => :#{parent}_id)") end end diff --git a/tracks/test/functional/todo_controller_test.rb b/tracks/test/functional/todo_controller_test.rb index 4df85ecb..a560eed2 100644 --- a/tracks/test/functional/todo_controller_test.rb +++ b/tracks/test/functional/todo_controller_test.rb @@ -5,6 +5,8 @@ require 'todo_controller' class TodoController; def rescue_action(e) raise e end; end class TodoControllerTest < Test::Unit::TestCase + fixtures :users, :preferences, :projects, :contexts, :todos + def setup @controller = TodoController.new @request, @response = ActionController::TestRequest.new, ActionController::TestResponse.new @@ -17,4 +19,23 @@ class TodoControllerTest < Test::Unit::TestCase assert_redirected_to :controller => 'login', :action => 'login' end + def test_not_done_counts + @request.session['user_id'] = users(:admin_user).id + get :index + assert_equal 2, assigns['project_not_done_counts'][projects(:timemachine).id] + assert_equal 3, assigns['context_not_done_counts'][contexts(:call).id] + assert_equal 1, assigns['context_not_done_counts'][contexts(:lab).id] + end + + def test_not_done_counts_after_hiding_project + p = Project.find(1) + p.hide! + p.save! + @request.session['user_id'] = users(:admin_user).id + get :index + assert_equal nil, assigns['project_not_done_counts'][projects(:timemachine).id] + assert_equal 2, assigns['context_not_done_counts'][contexts(:call).id] + assert_equal nil, assigns['context_not_done_counts'][contexts(:lab).id] + end + end