From d02ddefff4f1d3800f7bdccb35c520a1155cccc5 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Wed, 10 Feb 2010 20:38:23 +0000 Subject: [PATCH] Fixed: parent project field doesn't include blank value when a member with 'add subproject' permission edits a child project (#4790). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3405 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/project.rb | 2 +- test/unit/project_test.rb | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index b8030d7fd..58ef81140 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -249,7 +249,7 @@ class Project < ActiveRecord::Base return @allowed_parents if @allowed_parents @allowed_parents = Project.find(:all, :conditions => Project.allowed_to_condition(User.current, :add_subprojects)) @allowed_parents = @allowed_parents - self_and_descendants - if User.current.allowed_to?(:add_project, nil, :global => true) + if User.current.allowed_to?(:add_project, nil, :global => true) || (!new_record? && parent.nil?) @allowed_parents << nil end unless parent.nil? || @allowed_parents.empty? || @allowed_parents.include?(parent) diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb index 8b8ce585f..447ae1b04 100644 --- a/test/unit/project_test.rb +++ b/test/unit/project_test.rb @@ -285,6 +285,48 @@ class ProjectTest < ActiveSupport::TestCase assert Project.new.allowed_parents.compact.empty? end + def test_allowed_parents_with_add_subprojects_permission + Role.find(1).remove_permission!(:add_project) + Role.find(1).add_permission!(:add_subprojects) + User.current = User.find(2) + # new project + assert !Project.new.allowed_parents.include?(nil) + assert Project.new.allowed_parents.include?(Project.find(1)) + # existing root project + assert Project.find(1).allowed_parents.include?(nil) + # existing child + assert Project.find(3).allowed_parents.include?(Project.find(1)) + assert !Project.find(3).allowed_parents.include?(nil) + end + + def test_allowed_parents_with_add_project_permission + Role.find(1).add_permission!(:add_project) + Role.find(1).remove_permission!(:add_subprojects) + User.current = User.find(2) + # new project + assert Project.new.allowed_parents.include?(nil) + assert !Project.new.allowed_parents.include?(Project.find(1)) + # existing root project + assert Project.find(1).allowed_parents.include?(nil) + # existing child + assert Project.find(3).allowed_parents.include?(Project.find(1)) + assert Project.find(3).allowed_parents.include?(nil) + end + + def test_allowed_parents_with_add_project_and_subprojects_permission + Role.find(1).add_permission!(:add_project) + Role.find(1).add_permission!(:add_subprojects) + User.current = User.find(2) + # new project + assert Project.new.allowed_parents.include?(nil) + assert Project.new.allowed_parents.include?(Project.find(1)) + # existing root project + assert Project.find(1).allowed_parents.include?(nil) + # existing child + assert Project.find(3).allowed_parents.include?(Project.find(1)) + assert Project.find(3).allowed_parents.include?(nil) + end + def test_users_by_role users_by_role = Project.find(1).users_by_role assert_kind_of Hash, users_by_role