summaryrefslogtreecommitdiff
path: root/spec/requests/api/members_spec.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-02-14 03:12:20 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-02-14 03:12:20 +0000
commit91608af1b74517451137c1a31e310b40234e65ca (patch)
treea373a97725830baaa8353995a87550d2ca9d5360 /spec/requests/api/members_spec.rb
parent40325c75499789e8db9c0ae1a6c92f3aa780eaa7 (diff)
downloadgitlab-ce-91608af1b74517451137c1a31e310b40234e65ca.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/requests/api/members_spec.rb')
-rw-r--r--spec/requests/api/members_spec.rb122
1 files changed, 119 insertions, 3 deletions
diff --git a/spec/requests/api/members_spec.rb b/spec/requests/api/members_spec.rb
index 02061bb8ab6..731e0a4a078 100644
--- a/spec/requests/api/members_spec.rb
+++ b/spec/requests/api/members_spec.rb
@@ -291,6 +291,25 @@ RSpec.describe API::Members do
user: maintainer
)
end
+
+ context 'with an already existing member' do
+ before do
+ source.add_developer(stranger)
+ end
+
+ it 'tracks the invite source from params' do
+ post api("/#{source_type.pluralize}/#{source.id}/members", maintainer),
+ params: params.merge(invite_source: '_invite_source_')
+
+ expect_snowplow_event(
+ category: 'Members::CreateService',
+ action: 'create_member',
+ label: '_invite_source_',
+ property: 'existing_user',
+ user: maintainer
+ )
+ end
+ end
end
context 'when executing the Members::CreateService for multiple user_ids' do
@@ -399,6 +418,49 @@ RSpec.describe API::Members do
expect(member.tasks_to_be_done).to match_array([:code, :ci])
expect(member.member_task.project_id).to eq(project_id)
end
+
+ context 'with already existing member' do
+ before do
+ source.add_developer(stranger)
+ end
+
+ it 'does not update tasks to be done if tasks already exist', :aggregate_failures do
+ member = source.members.find_by(user_id: stranger.id)
+ create(:member_task, member: member, project_id: project_id, tasks_to_be_done: %w(code ci))
+
+ expect do
+ post api("/#{source_type.pluralize}/#{source.id}/members", maintainer),
+ params: {
+ user_id: stranger.id,
+ access_level: Member::DEVELOPER,
+ tasks_to_be_done: %w(issues),
+ tasks_project_id: project_id
+ }
+ end.not_to change(MemberTask, :count)
+
+ member.reset
+ expect(response).to have_gitlab_http_status(:created)
+ expect(member.tasks_to_be_done).to match_array([:code, :ci])
+ expect(member.member_task.project_id).to eq(project_id)
+ end
+
+ it 'adds tasks to be done if they do not exist', :aggregate_failures do
+ expect do
+ post api("/#{source_type.pluralize}/#{source.id}/members", maintainer),
+ params: {
+ user_id: stranger.id,
+ access_level: Member::DEVELOPER,
+ tasks_to_be_done: %w(issues),
+ tasks_project_id: project_id
+ }
+ end.to change(MemberTask, :count).by(1)
+
+ member = source.members.find_by(user_id: stranger.id)
+ expect(response).to have_gitlab_http_status(:created)
+ expect(member.tasks_to_be_done).to match_array([:issues])
+ expect(member.member_task.project_id).to eq(project_id)
+ end
+ end
end
context 'when there are multiple users to add' do
@@ -412,14 +474,68 @@ RSpec.describe API::Members do
expect(member.member_task.project_id).to eq(project_id)
end
end
+
+ context 'with already existing members' do
+ before do
+ source.add_developer(stranger)
+ source.add_developer(developer)
+ end
+
+ it 'does not update tasks to be done if tasks already exist', :aggregate_failures do
+ members = source.members.where(user_id: [developer.id, stranger.id])
+ members.each do |member|
+ create(:member_task, member: member, project_id: project_id, tasks_to_be_done: %w(code ci))
+ end
+
+ expect do
+ post api("/#{source_type.pluralize}/#{source.id}/members", maintainer),
+ params: {
+ user_id: [developer.id, stranger.id].join(','),
+ access_level: Member::DEVELOPER,
+ tasks_to_be_done: %w(issues),
+ tasks_project_id: project_id
+ }
+ end.not_to change(MemberTask, :count)
+
+ expect(response).to have_gitlab_http_status(:created)
+ members.each do |member|
+ member.reset
+ expect(member.tasks_to_be_done).to match_array([:code, :ci])
+ expect(member.member_task.project_id).to eq(project_id)
+ end
+ end
+
+ it 'adds tasks to be done if they do not exist', :aggregate_failures do
+ expect do
+ post api("/#{source_type.pluralize}/#{source.id}/members", maintainer),
+ params: {
+ user_id: [developer.id, stranger.id].join(','),
+ access_level: Member::DEVELOPER,
+ tasks_to_be_done: %w(issues),
+ tasks_project_id: project_id
+ }
+ end.to change(MemberTask, :count).by(2)
+
+ expect(response).to have_gitlab_http_status(:created)
+ members = source.members.where(user_id: [developer.id, stranger.id])
+ members.each do |member|
+ expect(member.tasks_to_be_done).to match_array([:issues])
+ expect(member.member_task.project_id).to eq(project_id)
+ end
+ end
+ end
end
end
- it "returns 409 if member already exists" do
+ it "updates a current member" do
+ source.add_guest(stranger)
+
post api("/#{source_type.pluralize}/#{source.id}/members", maintainer),
- params: { user_id: maintainer.id, access_level: Member::MAINTAINER }
+ params: { user_id: stranger.id, access_level: Member::MAINTAINER }
- expect(response).to have_gitlab_http_status(:conflict)
+ expect(response).to have_gitlab_http_status(:created)
+ expect(json_response['id']).to eq(stranger.id)
+ expect(json_response['access_level']).to eq(Member::MAINTAINER)
end
it 'returns 404 when the user_id is not valid' do