fix #1417. We now handle unblocking a todo that is part of a hidden project or context

This commit is contained in:
Reinier Balt 2013-06-04 10:07:02 +02:00
parent 2921746409
commit a8af880647
2 changed files with 30 additions and 2 deletions

View file

@ -103,7 +103,7 @@ class Todo < ActiveRecord::Base
end
event :block do
transitions :to => :pending, :from => [:active, :deferred]
transitions :to => :pending, :from => [:active, :deferred, :project_hidden]
end
end
@ -158,6 +158,14 @@ class Todo < ActiveRecord::Base
return !( uncompleted_predecessors.empty? || state == 'project_hidden' )
end
def guard_for_transition_from_deferred_to_pending
no_uncompleted_predecessors? && not_part_of_hidden_container?
end
def not_part_of_hidden_container?
!( (self.project && self.project.hidden?) || self.context.hidden? )
end
# Returns a string with description <context, project>
def specification
project_name = self.project.is_a?(NullProject) ? "(none)" : self.project.name
@ -201,7 +209,7 @@ class Todo < ActiveRecord::Base
def remove_predecessor(predecessor)
self.predecessors.delete(predecessor)
if self.predecessors.empty?
self.activate!
self.not_part_of_hidden_container? ? self.activate! : self.hide!
else
save!
end

View file

@ -239,6 +239,26 @@ class TodoTest < ActiveSupport::TestCase
assert !@not_completed1.starred?
end
def test_hidden_todo_remains_hidden_after_getting_unblokked
todo = todos(:call_bill)
project=todo.project
project.hide!
assert todo.reload.hidden?, "todo in hidden project should be hidden"
todo2 = todos(:call_dino_ext)
todo.add_predecessor(todo2)
todo.block!
assert todo.pending?, "todo with predecessor should be blocked"
# cannot activate if part of hidden project
assert_raise(AASM::InvalidTransition) { todo.activate! }
todo.remove_predecessor(todo2)
assert todo.reload.hidden?, "todo should be put back in hidden state"
end
def test_todo_specification_handles_null_project
# @not_completed1 has a project
todo_desc = @not_completed1.description