mirror of
https://github.com/TracksApp/tracks.git
synced 2025-09-22 05:50:47 +02:00
a previous commit introduced a bug where hiding a project did not hide the todos in it. Fixes #832
This commit is contained in:
parent
8076f4fe72
commit
07426ebe54
5 changed files with 25 additions and 31 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue