a previous commit introduced a bug where hiding a project did not hide the todos in it. Fixes #832

This commit is contained in:
Reinier Balt 2009-01-24 22:13:19 +01:00
parent 8076f4fe72
commit 07426ebe54
5 changed files with 25 additions and 31 deletions

View file

@ -106,9 +106,9 @@ class ProjectsController < ApplicationController
def update
params['project'] ||= {}
if params['project']['state']
@state_changed = @project.state != params['project']['state']
@new_state = params['project']['state']
@state_changed = @project.state != @new_state
logger.info "@state_changed: #{@project.state} == #{params['project']['state']} != #{@state_changed}"
@project.transition_to(params['project']['state'])
params['project'].delete('state')
end
success_text = if params['field'] == 'name' && params['value']
@ -117,6 +117,7 @@ class ProjectsController < ApplicationController
end
@project.attributes = params['project']
if @project.save
@project.transition_to(@new_state) if @state_changed
if boolean_param('wants_render')
if (@project.hidden?)
@project_project_hidden_todo_counts = Hash.new

View file

@ -65,6 +65,7 @@ class TodosController < ApplicationController
@todo.context_id = context.id
end
@todo.update_state_from_project
@saved = @todo.save
unless (@saved == false) || p.tag_list.blank?
@todo.tag_with(p.tag_list)
@ -257,7 +258,10 @@ class TodosController < ApplicationController
end
@project_changed = @original_item_project_id != @todo.project_id
if (@project_changed && !@original_item_project_id.nil?) then @remaining_undone_in_project = current_user.projects.find(@original_item_project_id).not_done_todo_count; end
if (@project_changed && !@original_item_project_id.nil?) then
@todo.update_state_from_project
@remaining_undone_in_project = current_user.projects.find(@original_item_project_id).not_done_todo_count
end
determine_down_count
respond_to do |format|
format.js

View file

@ -57,8 +57,6 @@ class Todo < ActiveRecord::Base
end
end
before_validation :update_state_from_project
def update_state_from_project
if state == 'project_hidden' and !project.hidden?
self.state = 'active'

View file

@ -136,31 +136,6 @@ describe Todo do
end
end
describe 'when update_state_from_project is called' do
it "should unhide when project is active" do
project = mock_model(Project, :hidden? => false)
todo = Todo.new(:state => 'project_hidden', :project => project)
todo.should be_project_hidden
todo.save
todo.should be_active
end
it "should unhide when project is null" do
todo = Todo.new(:state => 'project_hidden', :project => nil)
todo.should be_project_hidden
todo.save
todo.should be_active
end
it "should hide when project is hidden" do
project = mock_model(Project, :hidden? => true)
todo = Todo.new(:state => 'active', :project => project)
todo.should be_active
todo.save
todo.should be_project_hidden
end
end
describe 'when toggling completion' do
it 'toggles to active when completed' do
todo = create_todo

View file

@ -94,7 +94,7 @@ class TodosControllerTest < Test::Rails::TestCase
assert_difference Todo, :count do
xml = "<todo><description>Call Warren Buffet to find out how much he makes per day</description><project_id>#{projects(:timemachine).id}</project_id><context_id>#{contexts(:agenda).id}</context_id><show-from type=\"datetime\">#{1.week.from_now.xmlschema}</show-from></todo>"
#p parse_xml_body(xml)
# p parse_xml_body(xml)
post :create, parse_xml_body(xml).update(:format => "xml")
assert_response :created
end
@ -505,4 +505,20 @@ class TodosControllerTest < Test::Rails::TestCase
assert next_todo.due > @todo.due
end
def test_removing_hidden_project_activates_todo
login_as(:admin_user)
# get a project and hide it, todos in the project should be hidden
p = projects(:timemachine)
p.hide!
assert p.reload().hidden?
todo = p.todos.first
assert "project_hidden", todo.state
# clear project from todo: the todo should be unhidden
xhr :post, :update, :id => 1, :_source_view => 'todo', "project_name"=>"None", "todo"=>{}
todo.reload()
assert "active", todo.state
end
end