# Adds user as a project member with the default role
# Used for when a non-admin user creates a project
def add_default_member(user)
- role = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
+ role = self.class.default_member_role
member = Member.new(:project => self, :principal => user, :roles => [role])
self.members << member
member
end
+ # Default role that is given to non-admin users that
+ # create a project
+ def self.default_member_role
+ Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
+ end
+
# Deletes all project's members
def delete_all_members
me, mr = Member.table_name, MemberRole.table_name
'default_version_id'
safe_attributes 'enabled_module_names',
- :if => lambda {|project, user| project.new_record? || user.allowed_to?(:select_project_modules, project) }
+ :if => lambda {|project, user|
+ if project.new_record?
+ if user.admin?
+ true
+ else
+ default_member_role.has_permission?(:select_project_modules)
+ end
+ else
+ user.allowed_to?(:select_project_modules, project)
+ end
+ }
safe_attributes 'inherit_members',
:if => lambda {|project, user| project.parent.nil? || project.parent.visible?(user)}
end
end
+ def test_new_by_non_admin_should_display_modules_if_default_role_is_allowed_to_select_modules
+ Role.non_member.add_permission!(:add_project)
+ default_role = Role.generate!(:permissions => [:view_issues])
+ user = User.generate!
+ @request.session[:user_id] = user.id
+
+ with_settings :new_project_user_role_id => default_role.id.to_s do
+ get :new
+ assert_select 'input[name=?]', 'project[enabled_module_names][]', 0
+
+ default_role.add_permission!(:select_project_modules)
+ get :new
+ assert_select 'input[name=?]', 'project[enabled_module_names][]'
+ end
+ end
+
def test_new_should_not_display_invalid_search_link
@request.session[:user_id] = 1
assert_select_error /Subproject of is invalid/
end
+ def test_create_by_non_admin_should_accept_modules_if_default_role_is_allowed_to_select_modules
+ Role.non_member.add_permission!(:add_project)
+ default_role = Role.generate!(:permissions => [:view_issues, :add_project])
+ user = User.generate!
+ @request.session[:user_id] = user.id
+
+ with_settings :new_project_user_role_id => default_role.id.to_s, :default_projects_modules => %w(news files) do
+ project = new_record(Project) do
+ post :create, :project => {
+ :name => "blog1",
+ :identifier => "blog1",
+ :enabled_module_names => ["issue_tracking", "repository"]
+ }
+ end
+ assert_equal %w(files news), project.enabled_module_names.sort
+
+ default_role.add_permission!(:select_project_modules)
+ project = new_record(Project) do
+ post :create, :project => {
+ :name => "blog2",
+ :identifier => "blog2",
+ :enabled_module_names => ["issue_tracking", "repository"]
+ }
+ end
+ assert_equal %w(issue_tracking repository), project.enabled_module_names.sort
+ end
+ end
+
def test_create_subproject_with_inherit_members_should_inherit_members
Role.find_by_name('Manager').add_permission! :add_subprojects
parent = Project.find(1)