mirror of
https://github.com/redmine/redmine.git
synced 2026-03-05 20:11:36 +01:00
Project#set_parents! inserts children or root projects in alphabetical order.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/work@2160 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -197,12 +197,29 @@ class Project < ActiveRecord::Base
|
||||
return false unless p
|
||||
end
|
||||
end
|
||||
if p == parent
|
||||
if p == parent && !p.nil?
|
||||
# Nothing to do
|
||||
true
|
||||
elsif p.nil? || (p.active? && move_possible?(p))
|
||||
move_to_child_of(p)
|
||||
# Insert the project so that target's children or root projects stay alphabetically sorted
|
||||
sibs = (p.nil? ? self.class.roots : p.children)
|
||||
to_be_inserted_before = sibs.detect {|c| c.name.to_s.downcase > name.to_s.downcase }
|
||||
if to_be_inserted_before
|
||||
move_to_left_of(to_be_inserted_before)
|
||||
elsif p.nil?
|
||||
if sibs.empty?
|
||||
# move_to_root adds the project in first (ie. left) position
|
||||
move_to_root
|
||||
else
|
||||
move_to_right_of(sibs.last) unless self == sibs.last
|
||||
end
|
||||
else
|
||||
# move_to_child_of adds the project in last (ie.right) position
|
||||
move_to_child_of(p)
|
||||
end
|
||||
true
|
||||
else
|
||||
# Can not move to the given target
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
@@ -118,6 +118,31 @@ class ProjectTest < Test::Unit::TestCase
|
||||
assert !(sub.set_parent!(Project.find(3)))
|
||||
end
|
||||
|
||||
def test_set_parent_should_add_roots_in_alphabetical_order
|
||||
ProjectCustomField.delete_all
|
||||
Project.delete_all
|
||||
Project.create!(:name => 'Project C', :identifier => 'project-c').set_parent!(nil)
|
||||
Project.create!(:name => 'Project B', :identifier => 'project-b').set_parent!(nil)
|
||||
Project.create!(:name => 'Project D', :identifier => 'project-d').set_parent!(nil)
|
||||
Project.create!(:name => 'Project A', :identifier => 'project-a').set_parent!(nil)
|
||||
|
||||
assert_equal 4, Project.count
|
||||
assert_equal Project.all.sort_by(&:name), Project.all.sort_by(&:lft)
|
||||
end
|
||||
|
||||
def test_set_parent_should_add_children_in_alphabetical_order
|
||||
ProjectCustomField.delete_all
|
||||
parent = Project.create!(:name => 'Parent', :identifier => 'parent')
|
||||
Project.create!(:name => 'Project C', :identifier => 'project-c').set_parent!(parent)
|
||||
Project.create!(:name => 'Project B', :identifier => 'project-b').set_parent!(parent)
|
||||
Project.create!(:name => 'Project D', :identifier => 'project-d').set_parent!(parent)
|
||||
Project.create!(:name => 'Project A', :identifier => 'project-a').set_parent!(parent)
|
||||
|
||||
parent.reload
|
||||
assert_equal 4, parent.children.size
|
||||
assert_equal parent.children.sort_by(&:name), parent.children
|
||||
end
|
||||
|
||||
def test_rebuild_should_sort_children_alphabetically
|
||||
ProjectCustomField.delete_all
|
||||
parent = Project.create!(:name => 'Parent', :identifier => 'parent')
|
||||
|
||||
Reference in New Issue
Block a user