@@ -740,7 +740,12 class Project < ActiveRecord::Base | |||
|
740 | 740 | |
|
741 | 741 | # Copies members from +project+ |
|
742 | 742 | def copy_members(project) |
|
743 | project.memberships.each do |member| | |
|
743 | # Copy users first, then groups to handle members with inherited and given roles | |
|
744 | members_to_copy = [] | |
|
745 | members_to_copy += project.memberships.select {|m| m.principal.is_a?(User)} | |
|
746 | members_to_copy += project.memberships.select {|m| !m.principal.is_a?(User)} | |
|
747 | ||
|
748 | members_to_copy.each do |member| | |
|
744 | 749 | new_member = Member.new |
|
745 | 750 | new_member.attributes = member.attributes.dup.except("id", "project_id", "created_on") |
|
746 | 751 | # only copy non inherited roles |
@@ -770,6 +770,22 class ProjectTest < ActiveSupport::TestCase | |||
|
770 | 770 | assert_equal @project, membership.project |
|
771 | 771 | end |
|
772 | 772 | end |
|
773 | ||
|
774 | should "copy memberships with groups and additional roles" do | |
|
775 | group = Group.create!(:lastname => "Copy group") | |
|
776 | user = User.find(7) | |
|
777 | group.users << user | |
|
778 | # group role | |
|
779 | Member.create!(:project_id => @source_project.id, :principal => group, :role_ids => [2]) | |
|
780 | member = Member.find_by_user_id_and_project_id(user.id, @source_project.id) | |
|
781 | # additional role | |
|
782 | member.role_ids = [1] | |
|
783 | ||
|
784 | assert @project.copy(@source_project) | |
|
785 | member = Member.find_by_user_id_and_project_id(user.id, @project.id) | |
|
786 | assert_not_nil member | |
|
787 | assert_equal [1, 2], member.role_ids.sort | |
|
788 | end | |
|
773 | 789 | |
|
774 | 790 | should "copy project specific queries" do |
|
775 | 791 | assert @project.valid? |
General Comments 0
You need to be logged in to leave comments.
Login now