Refactor add_users method for project and group
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
		
							parent
							
								
									c76812c79f
								
							
						
					
					
						commit
						c6960ded8a
					
				|  | @ -125,7 +125,7 @@ class Group < Namespace | |||
|   end | ||||
| 
 | ||||
|   def add_users(users, access_level, current_user: nil, expires_at: nil) | ||||
|     GroupMember.add_users_to_group( | ||||
|     GroupMember.add_users( | ||||
|       self, | ||||
|       users, | ||||
|       access_level, | ||||
|  |  | |||
|  | @ -151,6 +151,22 @@ class Member < ActiveRecord::Base | |||
|       member | ||||
|     end | ||||
| 
 | ||||
|     def add_users(source, users, access_level, current_user: nil, expires_at: nil) | ||||
|       return [] unless users.present? | ||||
| 
 | ||||
|       self.transaction do | ||||
|         users.map do |user| | ||||
|           add_user( | ||||
|             source, | ||||
|             user, | ||||
|             access_level, | ||||
|             current_user: current_user, | ||||
|             expires_at: expires_at | ||||
|           ) | ||||
|         end | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     def access_levels | ||||
|       Gitlab::Access.sym_options | ||||
|     end | ||||
|  | @ -173,18 +189,6 @@ class Member < ActiveRecord::Base | |||
|       # There is no current user for bulk actions, in which case anything is allowed | ||||
|       !current_user || current_user.can?(:"update_#{member.type.underscore}", member) | ||||
|     end | ||||
| 
 | ||||
|     def add_users_to_source(source, users, access_level, current_user: nil, expires_at: nil) | ||||
|       users.each do |user| | ||||
|         add_user( | ||||
|           source, | ||||
|           user, | ||||
|           access_level, | ||||
|           current_user: current_user, | ||||
|           expires_at: expires_at | ||||
|         ) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def real_source_type | ||||
|  |  | |||
|  | @ -21,18 +21,6 @@ class GroupMember < Member | |||
|     Gitlab::Access.sym_options_with_owner | ||||
|   end | ||||
| 
 | ||||
|   def self.add_users_to_group(group, users, access_level, current_user: nil, expires_at: nil) | ||||
|     self.transaction do | ||||
|       add_users_to_source( | ||||
|         group, | ||||
|         users, | ||||
|         access_level, | ||||
|         current_user: current_user, | ||||
|         expires_at: expires_at | ||||
|       ) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def group | ||||
|     source | ||||
|   end | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ class ProjectMember < Member | |||
|   before_destroy :delete_member_todos | ||||
| 
 | ||||
|   class << self | ||||
|     # Add users to project teams with passed access option | ||||
|     # Add users to projects with passed access option | ||||
|     # | ||||
|     # access can be an integer representing a access code | ||||
|     # or symbol like :master representing role | ||||
|  | @ -39,7 +39,7 @@ class ProjectMember < Member | |||
|         project_ids.each do |project_id| | ||||
|           project = Project.find(project_id) | ||||
| 
 | ||||
|           add_users_to_source( | ||||
|           add_users( | ||||
|             project, | ||||
|             users, | ||||
|             access_level, | ||||
|  |  | |||
|  | @ -50,8 +50,8 @@ class ProjectTeam | |||
|   end | ||||
| 
 | ||||
|   def add_users(users, access_level, current_user: nil, expires_at: nil) | ||||
|     ProjectMember.add_users_to_projects( | ||||
|       [project.id], | ||||
|     ProjectMember.add_users( | ||||
|       project, | ||||
|       users, | ||||
|       access_level, | ||||
|       current_user: current_user, | ||||
|  |  | |||
|  | @ -0,0 +1,4 @@ | |||
| --- | ||||
| title: Refactor add_users method for project and group | ||||
| merge_request: 10850 | ||||
| author: | ||||
|  | @ -127,7 +127,7 @@ describe Projects::LabelsController do | |||
| 
 | ||||
|     context 'group owner' do | ||||
|       before do | ||||
|         GroupMember.add_users_to_group(group, [user], :owner) | ||||
|         GroupMember.add_users(group, [user], :owner) | ||||
|       end | ||||
| 
 | ||||
|       it 'gives access' do | ||||
|  |  | |||
|  | @ -386,6 +386,31 @@ describe Member, models: true do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '.add_users' do | ||||
|     %w[project group].each do |source_type| | ||||
|       context "when source is a #{source_type}" do | ||||
|         let!(:source) { create(source_type, :public, :access_requestable) } | ||||
|         let!(:user) { create(:user) } | ||||
|         let!(:admin) { create(:admin) } | ||||
| 
 | ||||
|         it 'returns a <Source>Member objects' do | ||||
|           members = described_class.add_users(source, [user], :master) | ||||
| 
 | ||||
|           expect(members).to be_a Array | ||||
|           expect(members.first).to be_a "#{source_type.classify}Member".constantize | ||||
|           expect(members.first).to be_persisted | ||||
|         end | ||||
| 
 | ||||
|         it 'returns an empty array' do | ||||
|           members = described_class.add_users(source, [], :master) | ||||
| 
 | ||||
|           expect(members).to be_a Array | ||||
|           expect(members).to be_empty | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#accept_request' do | ||||
|     let(:member) { create(:project_member, requested_at: Time.now.utc) } | ||||
| 
 | ||||
|  |  | |||
|  | @ -13,12 +13,12 @@ describe GroupMember, models: true do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '.add_users_to_group' do | ||||
|   describe '.add_users' do | ||||
|     it 'adds the given users to the given group' do | ||||
|       group = create(:group) | ||||
|       users = create_list(:user, 2) | ||||
| 
 | ||||
|       described_class.add_users_to_group( | ||||
|       described_class.add_users( | ||||
|         group, | ||||
|         [users.first.id, users.second], | ||||
|         described_class::MASTER | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue