diff --git a/lib/gitlab/client/groups.rb b/lib/gitlab/client/groups.rb index a3f50b67d..8c900e3a5 100644 --- a/lib/gitlab/client/groups.rb +++ b/lib/gitlab/client/groups.rb @@ -148,26 +148,34 @@ def group_merge_requests(group, options = {}) # # @example # Gitlab.add_group_member(1, 2, 40) + # Gitlab.add_group_member(1, 2, 40, member_role_id: 5) # # @param [Integer] team_id The group id to add a member to. # @param [Integer] user_id The user id of the user to add to the team. # @param [Integer] access_level Project access level. + # @param [Hash] options A customizable set of options. + # @option options [Integer] :member_role_id The id of a custom member role. # @return [Gitlab::ObjectifiedHash] Information about added team member. - def add_group_member(team_id, user_id, access_level) - post("/groups/#{url_encode team_id}/members", body: { user_id: user_id, access_level: access_level }) + def add_group_member(team_id, user_id, access_level, options = {}) + body = { user_id: user_id, access_level: access_level }.merge(options) + post("/groups/#{url_encode team_id}/members", body: body) end # Edit a user of a group. # # @example # Gitlab.edit_group_member(1, 2, 40) + # Gitlab.edit_group_member(1, 2, 40, member_role_id: 5) # # @param [Integer] team_id The group id of member to edit. # @param [Integer] user_id The user id of the user to edit. # @param [Integer] access_level Project access level. + # @param [Hash] options A customizable set of options. + # @option options [Integer] :member_role_id The id of a custom member role. # @return [Gitlab::ObjectifiedHash] Information about edited team member. - def edit_group_member(team_id, user_id, access_level) - put("/groups/#{url_encode team_id}/members/#{user_id}", body: { access_level: access_level }) + def edit_group_member(team_id, user_id, access_level, options = {}) + body = { access_level: access_level }.merge(options) + put("/groups/#{url_encode team_id}/members/#{user_id}", body: body) end # Removes user from user group. diff --git a/lib/gitlab/client/projects.rb b/lib/gitlab/client/projects.rb index 7263db488..998f886e4 100644 --- a/lib/gitlab/client/projects.rb +++ b/lib/gitlab/client/projects.rb @@ -138,12 +138,14 @@ def team_member(project, id) # @example # Gitlab.add_team_member('gitlab', 2, 40) # Gitlab.add_team_member('gitlab', 2, 40, { expires_at: "2018-12-31"}) + # Gitlab.add_team_member('gitlab', 2, 40, { member_role_id: 5 }) # # @param [Integer, String] project The ID or path of a project. # @param [Integer] id The ID of a user. # @param [Integer] access_level The access level to project. # @param [Hash] options A customizable set of options. # @option options [String] :expires_at A date string in the format YEAR-MONTH-DAY. + # @option options [Integer] :member_role_id The id of a custom member role. # @return [Gitlab::ObjectifiedHash] Information about added team member. def add_team_member(project, id, access_level, options = {}) body = { user_id: id, access_level: access_level }.merge(options) @@ -155,12 +157,14 @@ def add_team_member(project, id, access_level, options = {}) # @example # Gitlab.edit_team_member('gitlab', 3, 20) # Gitlab.edit_team_member('gitlab', 3, 20, { expires_at: "2018-12-31"}) + # Gitlab.edit_team_member('gitlab', 3, 20, { member_role_id: 5 }) # # @param [Integer, String] project The ID or path of a project. # @param [Integer] id The ID of a user. # @param [Integer] access_level The access level to project. # @param [Hash] options A customizable set of options. # @option options [String] :expires_at A date string in the format YEAR-MONTH-DAY. + # @option options [Integer] :member_role_id The id of a custom member role. # @return [Array] Information about updated team member. def edit_team_member(project, id, access_level, options = {}) body = { access_level: access_level }.merge(options) diff --git a/spec/gitlab/client/groups_spec.rb b/spec/gitlab/client/groups_spec.rb index 153b61880..a8a25aa26 100644 --- a/spec/gitlab/client/groups_spec.rb +++ b/spec/gitlab/client/groups_spec.rb @@ -208,6 +208,24 @@ it 'returns information about the added member' do expect(@member.name).to eq('John Smith') end + + context 'with member_role_id' do + before do + stub_post('/groups/4/members', 'group_member') # Assuming fixture 'group_member' is suitable + @member_with_role = Gitlab.add_group_member(4, 2, 30, member_role_id: 5) + end + + it 'gets the correct resource with member_role_id' do + expect(a_post('/groups/4/members') + .with(body: { user_id: '2', access_level: '30', member_role_id: '5' })).to have_been_made + end + + it 'returns information about the added member' do + # NOTE: The 'group_member' fixture does not include member_role_id in the response. + # So, we can only verify the request was made correctly. + expect(@member_with_role.name).to eq('John Smith') + end + end end describe '.edit_group_member' do @@ -224,6 +242,24 @@ it 'returns information about the edited member' do expect(@member.access_level).to eq(50) end + + context 'with member_role_id' do + before do + stub_put('/groups/4/members/2', 'group_member_edit') # Assuming fixture 'group_member_edit' is suitable + @member_with_role = Gitlab.edit_group_member(4, 2, 20, member_role_id: 6) + end + + it 'gets the correct resource with member_role_id' do + expect(a_put('/groups/4/members/2') + .with(body: { access_level: '20', member_role_id: '6' })).to have_been_made + end + + it 'returns information about the edited member' do + # NOTE: The 'group_member_edit' fixture does not include member_role_id in the response. + # So, we can only verify the request was made correctly. + expect(@member_with_role.access_level).to eq(50) # This will depend on the 'group_member_edit' fixture content + end + end end describe '.remove_group_member' do diff --git a/spec/gitlab/client/projects_spec.rb b/spec/gitlab/client/projects_spec.rb index fd9874b33..2507a8319 100644 --- a/spec/gitlab/client/projects_spec.rb +++ b/spec/gitlab/client/projects_spec.rb @@ -216,6 +216,22 @@ expect(@team_member.name).to eq('John Smith') expect(@team_member.expires_at).to eq('2018-12-31T00:00:00Z') end + + context 'with member_role_id' do + before do + stub_post('/projects/example-project/members', 'team_member') + @member_with_role = Gitlab.add_team_member('example-project', 2, 30, member_role_id: 5) + end + + it 'gets the correct resource with member_role_id' do + expect(a_post('/projects/example-project/members') + .with(body: { user_id: '2', access_level: '30', member_role_id: '5' })).to have_been_made + end + + it 'returns information about the added member' do + expect(@member_with_role.name).to eq('John Smith') + end + end end describe '.edit_team_member' do @@ -233,6 +249,22 @@ expect(@team_member.name).to eq('John Smith') expect(@team_member.expires_at).to eq('2018-12-31T00:00:00Z') end + + context 'with member_role_id' do + before do + stub_put('/projects/example-project/members/2', 'group_member_edit') + @member_with_role = Gitlab.edit_team_member('example-project', 2, 10, member_role_id: 6) + end + + it 'gets the correct resource with member_role_id' do + expect(a_put('/projects/example-project/members/2') + .with(body: { access_level: '10', member_role_id: '6' })).to have_been_made + end + + it 'returns information about the edited member' do + expect(@member_with_role.access_level).to eq(50) + end + end end describe '.remove_team_member' do