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